123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 |
- ////////////////////////////////////////////////////////////////////////////////
- /// @file reg_spi.h
- /// @author AE TEAM
- /// @brief THIS FILE CONTAINS ALL THE FUNCTIONS PROTOTYPES FOR THE SERIES OF
- /// MM32 FIRMWARE LIBRARY.
- ////////////////////////////////////////////////////////////////////////////////
- /// @attention
- ///
- /// THE EXISTING FIRMWARE IS ONLY FOR REFERENCE, WHICH IS DESIGNED TO PROVIDE
- /// CUSTOMERS WITH CODING INFORMATION ABOUT THEIR PRODUCTS SO THEY CAN SAVE
- /// TIME. THEREFORE, MINDMOTION SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT OR
- /// CONSEQUENTIAL DAMAGES ABOUT ANY CLAIMS ARISING OUT OF THE CONTENT OF SUCH
- /// HARDWARE AND/OR THE USE OF THE CODING INFORMATION CONTAINED HEREIN IN
- /// CONNECTION WITH PRODUCTS MADE BY CUSTOMERS.
- ///
- /// <H2><CENTER>© COPYRIGHT MINDMOTION </CENTER></H2>
- ////////////////////////////////////////////////////////////////////////////////
- // Define to prevent recursive inclusion
- #ifndef __REG_SPI_H
- #define __REG_SPI_H
- // Files includes
- #include <stdint.h>
- #include <stdbool.h>
- #include "types.h"
- #if defined ( __CC_ARM )
- #pragma anon_unions
- #endif
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI Base Address Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI2_BASE (APB1PERIPH_BASE + 0x3800) ///< Base Address: 0x40003800
- #define SPI1_BASE (APB2PERIPH_BASE + 0x3000) ///< Base Address: 0x400013000
- #define SPI3_BASE (APB1PERIPH_BASE + 0x3C00) ///< Base Address: 0x40003C000
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI Register Structure Definition
- ////////////////////////////////////////////////////////////////////////////////
- #undef USENCOMBINEREGISTER
- #undef USENNEWREGISTER
- #undef USENOLDREGISTER
- #define USENCOMBINEREGISTER
- #ifdef USENCOMBINEREGISTER
- typedef struct {
- union {
- __IO u32 TDR; ///< SPI transmit data register, offset: 0x00
- __IO u32 TXREG;
- };
- union {
- __IO u32 RDR; ///< SPI receive data register, offset: 0x04
- __IO u32 RXREG;
- };
- union {
- __IO u32 SR; ///< SPI current state register, offset: 0x08
- __IO u32 CSTAT;
- };
- union {
- __IO u32 ISR; ///< SPI interruput state register, offset: 0x0C
- __IO u32 INTSTAT;
- };
- union {
- __IO u32 IER; ///< SPI interruput enable register, offset: 0x10
- __IO u32 INTEN;
- };
- union {
- __IO u32 ICR; ///< SPI interruput control register, offset: 0x14
- __IO u32 INTCLR;
- };
- union {
- __IO u32 GCR; ///< SPI global control register, offset: 0x18
- __IO u32 GCTL;
- };
- union {
- __IO u32 CCR; ///< SPI common control register, offset: 0x1C
- __IO u32 CCTL;
- };
- union {
- __IO u32 BRR; ///< SPI baud rate control register, offset: 0x20
- __IO u32 SPBRG;
- };
- union {
- __IO u32 RDNR; ///< SPI receive data number register, offset: 0x24
- __IO u32 RXDNR;
- };
- union {
- __IO u32 NSSR; ///< SPI chip select register, offset: 0x28
- __IO u32 SCSR;
- };
- union {
- __IO u32 ECR; ///< SPI extand control register, offset: 0x2C
- __IO u32 EXTCTL;
- };
- __IO u32 CFGR; ///< I2S configuration register, offset: 0x30
- } SPI_TypeDef;
- #endif
- #ifdef USENNEWREGISTER
- typedef struct {
- __IO u32 TDR; ///< SPI transmit data register, offset: 0x00
- __IO u32 RDR; ///< SPI receive data register, offset: 0x04
- __IO u32 SR; ///< SPI current state register, offset: 0x08
- __IO u32 ISR; ///< SPI interruput state register, offset: 0x0C
- __IO u32 IER; ///< SPI interruput enable register, offset: 0x10
- __IO u32 ICR; ///< SPI interruput control register, offset: 0x14
- __IO u32 GCR; ///< SPI global control register, offset: 0x18
- __IO u32 CCR; ///< SPI common control register, offset: 0x1C
- __IO u32 BRR; ///< SPI baud rate control register, offset: 0x20
- __IO u32 RDNR; ///< SPI receive data number register, offset: 0x24
- __IO u32 NSSR; ///< SPI chip select register, offset: 0x28
- __IO u32 ECR; ///< SPI extand control register, offset: 0x2C
- } SPI_TypeDef;
- #endif
- #ifdef USENOLDREGISTER
- typedef struct {
- __IO u32 TXREG; ///< SPI transmit data register, offset: 0x00
- __IO u32 RXREG; ///< SPI receive data register, offset: 0x04
- __IO u32 CSTAT; ///< SPI current state register, offset: 0x08
- __IO u32 INTSTAT; ///< SPI interruput state register, offset: 0x0C
- __IO u32 INTEN; ///< SPI interruput enable register, offset: 0x10
- __IO u32 INTCLR; ///< SPI interruput control register, offset: 0x14
- __IO u32 GCTL; ///< SPI global control register, offset: 0x18
- __IO u32 CCTL; ///< SPI common control register, offset: 0x1C
- __IO u32 SPBRG; ///< SPI baud rate control register, offset: 0x20
- __IO u32 RXDNR; ///< SPI receive data number register, offset: 0x24
- __IO u32 NSSR; ///< SPI chip select register, offset: 0x28
- __IO u32 EXTCTL; ///< SPI extand control register, offset: 0x2C
- } SPI_TypeDef;
- #endif
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI type pointer Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI2 ((SPI_TypeDef*) SPI2_BASE)
- #define SPI1 ((SPI_TypeDef*) SPI1_BASE)
- #define SPI3 ((SPI_TypeDef*) SPI3_BASE)
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_TDR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_TDR_TXREG_Pos (0)
- #define SPI_TDR_TXREG (0xFFFFFFFFU << SPI_TDR_TXREG_Pos) ///< Transmit data register
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_RDR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_RDR_RXREG_Pos (0)
- #define SPI_RDR_RXREG (0xFFFFFFFFU << SPI_RDR_RXREG_Pos) ///< Receive data register
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_SR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_SR_TXEPT_Pos (0)
- #define SPI_SR_TXEPT (0x01U << SPI_SR_TXEPT_Pos) ///< Transmitter empty bit
- #define SPI_SR_RXAVL_Pos (1)
- #define SPI_SR_RXAVL (0x01U << SPI_SR_RXAVL_Pos) ///< Receive available byte data message
- #define SPI_SR_TXFULL_Pos (2)
- #define SPI_SR_TXFULL (0x01U << SPI_SR_TXFULL_Pos) ///< Transmitter FIFO full status bit
- #define SPI_SR_RXAVL_4BYTE_Pos (3)
- #define SPI_SR_RXAVL_4BYTE (0x01U << SPI_SR_RXAVL_4BYTE_Pos) ///< Receive available 4 byte data message
- #define SPI_SR_TXFADDR_Pos (4)
- #define SPI_SR_TXFADDR (0x0FU << SPI_SR_TXFADDR_Pos) ///< Transmit FIFO address
- #define SPI_SR_RXFADDR_Pos (8)
- #define SPI_SR_RXFADDR (0x0FU << SPI_SR_RXFADDR_Pos) ///< Receive FIFO address
- #define SPI_SR_BUSY_Pos (12)
- #define SPI_SR_BUSY (0x01U << SPI_SR_BUSY_Pos) ///< Data transfer flag
- #define SPI_SR_CHSIDE_Pos (13)
- #define SPI_SR_CHSIDE (0x01U << SPI_SR_CHSIDE_Pos) ///< transmission channel
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_ISR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_ISR_TX_INTF_Pos (0)
- #define SPI_ISR_TX_INTF (0x01U << SPI_ISR_TX_INTF_Pos) ///< Transmit FIFO available interrupt flag bit
- #define SPI_ISR_RX_INTF_Pos (1)
- #define SPI_ISR_RX_INTF (0x01U << SPI_ISR_RX_INTF_Pos) ///< Receive data available interrupt flag bit
- #define SPI_ISR_UNDERRUN_INTF_Pos (2)
- #define SPI_ISR_UNDERRUN_INTF (0x01U << SPI_ISR_UNDERRUN_INTF_Pos) ///< SPI underrun interrupt flag bit
- #define SPI_ISR_RXOERR_INTF_Pos (3)
- #define SPI_ISR_RXOERR_INTF (0x01U << SPI_ISR_RXOERR_INTF_Pos) ///< Receive overrun error interrupt flag bit
- #define SPI_ISR_RXMATCH_INTF_Pos (4)
- #define SPI_ISR_RXMATCH_INTF (0x01U << SPI_ISR_RXMATCH_INTF_Pos) ///< Receive data match the RXDNR number, the receive process will be completed and generate the interrupt
- #define SPI_ISR_RXFULL_INTF_Pos (5)
- #define SPI_ISR_RXFULL_INTF (0x01U << SPI_ISR_RXFULL_INTF_Pos) ///< RX FIFO full interrupt flag bit
- #define SPI_ISR_TXEPT_INTF_Pos (6)
- #define SPI_ISR_TXEPT_INTF (0x01U << SPI_ISR_TXEPT_INTF_Pos) ///< Transmitter empty interrupt flag bit
- #define SPI_ISR_FRE_INTF_Pos (7)
- #define SPI_ISR_FRE_INTF (0x01U << SPI_ISR_FRE_INTF_Pos) ///< I2S frame transmission error flag bit
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_IER Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_IER_TX_IEN_Pos (0)
- #define SPI_IER_TX_IEN (0x01U << SPI_IER_TX_IEN_Pos) ///< Transmit FIFO empty interrupt enable bit
- #define SPI_IER_RX_IEN_Pos (1)
- #define SPI_IER_RX_IEN (0x01U << SPI_IER_RX_IEN_Pos) ///< Receive FIFO interrupt enable bit
- #define SPI_IER_UNDERRUN_IEN_Pos (2)
- #define SPI_IER_UNDERRUN_IEN (0x01U << SPI_IER_UNDERRUN_IEN_Pos) ///< Transmitter underrun interrupt enable bit
- #define SPI_IER_RXOERR_IEN_Pos (3)
- #define SPI_IER_RXOERR_IEN (0x01U << SPI_IER_RXOERR_IEN_Pos) ///< Overrun error interrupt enable bit
- #define SPI_IER_RXMATCH_IEN_Pos (4)
- #define SPI_IER_RXMATCH_IEN (0x01U << SPI_IER_RXMATCH_IEN_Pos) ///< Receive data complete interrupt enable bit
- #define SPI_IER_RXFULL_IEN_Pos (5)
- #define SPI_IER_RXFULL_IEN (0x01U << SPI_IER_RXFULL_IEN_Pos) ///< Receive FIFO full interrupt enable bit
- #define SPI_IER_TXEPT_IEN_Pos (6)
- #define SPI_IER_TXEPT_IEN (0x01U << SPI_IER_TXEPT_IEN_Pos) ///< Transmit empty interrupt enable bit
- #define SPI_IER_FRE_IEN_Pos (7)
- #define SPI_IER_FRE_IEN (0x01U << SPI_IER_FRE_IEN_Pos) ///< I2S frame transmission interrupt enable bit
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_ICR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_ICR_TX_ICLR_Pos (0)
- #define SPI_ICR_TX_ICLR (0x01U << SPI_ICR_TX_ICLR_Pos) ///< Transmitter FIFO empty interrupt clear bit
- #define SPI_ICR_RX_ICLR_Pos (1)
- #define SPI_ICR_RX_ICLR (0x01U << SPI_ICR_RX_ICLR_Pos) ///< Receive interrupt clear bit
- #define SPI_ICR_UNDERRUN_ICLR_Pos (2)
- #define SPI_ICR_UNDERRUN_ICLR (0x01U << SPI_ICR_UNDERRUN_ICLR_Pos) ///< Transmitter underrun interrupt clear bit
- #define SPI_ICR_RXOERR_ICLR_Pos (3)
- #define SPI_ICR_RXOERR_ICLR (0x01U << SPI_ICR_RXOERR_ICLR_Pos) ///< Overrun error interrupt clear bit
- #define SPI_ICR_RXMATCH_ICLR_Pos (4)
- #define SPI_ICR_RXMATCH_ICLR (0x01U << SPI_ICR_RXMATCH_ICLR_Pos) ///< Receive completed interrupt clear bit
- #define SPI_ICR_RXFULL_ICLR_Pos (5)
- #define SPI_ICR_RXFULL_ICLR (0x01U << SPI_ICR_RXFULL_ICLR_Pos) ///< Receiver buffer full interrupt clear bit
- #define SPI_ICR_TXEPT_ICLR_Pos (6)
- #define SPI_ICR_TXEPT_ICLR (0x01U << SPI_ICR_TXEPT_ICLR_Pos) ///< Transmitter empty interrupt clear bit
- #define SPI_ICR_FRE_ICLR_Pos (7)
- #define SPI_ICR_FRE_ICLR (0x01U << SPI_ICR_FRE_ICLR_Pos) ///< I2S frame transmission interrupt clear bit
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_GCR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_GCR_SPIEN_Pos (0)
- #define SPI_GCR_SPIEN (0x01U << SPI_GCR_SPIEN_Pos) ///< SPI select bit
- #define SPI_GCR_IEN_Pos (1)
- #define SPI_GCR_IEN (0x01U << SPI_GCR_IEN_Pos) ///< SPI interrupt enable bit
- #define SPI_GCR_MODE_Pos (2)
- #define SPI_GCR_MODE (0x01U << SPI_GCR_MODE_Pos) ///< Master mode bit
- #define SPI_GCR_TXEN_Pos (3)
- #define SPI_GCR_TXEN (0x01U << SPI_GCR_TXEN_Pos) ///< Transmit enable bit
- #define SPI_GCR_RXEN_Pos (4)
- #define SPI_GCR_RXEN (0x01U << SPI_GCR_RXEN_Pos) ///< Receive enable bit
- #define SPI_GCR_RXTLF_Pos (5)
- #define SPI_GCR_RXTLF (0x03U << SPI_GCR_RXTLF_Pos) ///< RX FIFO trigger level bit
- #define SPI_GCR_RXTLF_One (0x00U << SPI_GCR_RXTLF_Pos) ///<
- #define SPI_GCR_RXTLF_Half (0x01U << SPI_GCR_RXTLF_Pos) ///<
- #define SPI_GCR_TXTLF_Pos (7)
- #define SPI_GCR_TXTLF (0x03U << SPI_GCR_TXTLF_Pos) ///< TX FIFO trigger level bit
- #define SPI_GCR_TXTLF_One (0x00U << SPI_GCR_TXTLF_Pos) ///<
- #define SPI_GCR_TXTLF_Half (0x01U << SPI_GCR_TXTLF_Pos) ///<
- #define SPI_GCR_DMAEN_Pos (9)
- #define SPI_GCR_DMAEN (0x01U << SPI_GCR_DMAEN_Pos) ///< DMA access mode enable
- #define SPI_GCR_NSS_Pos (10)
- #define SPI_GCR_NSS (0x01U << SPI_GCR_NSS_Pos) ///< NSS select signal that from software or hardware
- #define SPI_GCR_DWSEL_Pos (11)
- #define SPI_GCR_DWSEL (0x01U << SPI_GCR_DWSEL_Pos) ///< Valid byte or double-word data select signal
- #define SPI_GCR_NSSTOG_Pos (12)
- #define SPI_GCR_NSSTOG (0x01U << SPI_GCR_NSSTOG_Pos) ///< Slave select toggle
- #define SPI_GCR_PAD_SEL_Pos (13)
- #define SPI_GCR_PAD_SEL (0x1FU << SPI_GCR_PAD_SEL_Pos) ///< Bus mapping transformation
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_CCR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_CCR_CPHA_Pos (0)
- #define SPI_CCR_CPHA (0x01U << SPI_CCR_CPHA_Pos) ///< Clock phase select bit
- #define SPI_CCR_CPOL_Pos (1)
- #define SPI_CCR_CPOL (0x01U << SPI_CCR_CPOL_Pos) ///< Clock polarity select bit
- #define SPI_CCR_LSBFE_Pos (2)
- #define SPI_CCR_LSBFE (0x01U << SPI_CCR_LSBFE_Pos) ///< LSI first enable bit
- #define SPI_CCR_SPILEN_Pos (3)
- #define SPI_CCR_SPILEN (0x01U << SPI_CCR_SPILEN_Pos) ///< SPI character length bit
- #define SPI_CCR_RXEDGE_Pos (4)
- #define SPI_CCR_RXEDGE (0x01U << SPI_CCR_RXEDGE_Pos) ///< Receive data edge select
- #define SPI_CCR_TXEDGE_Pos (5)
- #define SPI_CCR_TXEDGE (0x01U << SPI_CCR_TXEDGE_Pos) ///< Transmit data edge select
- #define SPI_CCR_CPHASEL_Pos (6)
- #define SPI_CCR_CPHASEL (0x01U << SPI_CCR_CPHASEL) ///< CPHA polarity select
- #define SPI_CCR_HISPD_Pos (7)
- #define SPI_CCR_HISPD (0x01U << SPI_CCR_HISPD) ///< High speed slave mode
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_BRR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_BRR_DIVF_Pos (0)
- #define SPI_BRR_DIVF (0xFFFFU << SPI_BRR_DIVF_Pos) ///< SPI baud rate control register for baud rate
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_RDNR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_RDNR_RDN_Pos (0)
- #define SPI_RDNR_RDN (0xFFFFU << SPI_RDNR_RDN_Pos) ///< The register is used to hold a count of to be received bytes in next receive process
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_NSSR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_NSSR_NSS_Pos (0)
- #define SPI_NSSR_NSS (0xFFU << SPI_NSSR_NSS_Pos) ///< Chip select output signal in Master mode
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief SPI_ECR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define SPI_ECR_EXTLEN_Pos (0)
- #define SPI_ECR_EXTLEN (0x1FU << SPI_ECR_EXTLEN_Pos) ///< control SPI data length
- ////////////////////////////////////////////////////////////////////////////////
- /// @brief I2S_CFGR Register Bit Definition
- ////////////////////////////////////////////////////////////////////////////////
- #define I2SCFGR_CLEAR_Mask ((u32)0xFE00F388)
- #define I2S_CFGR_CHLEN_Pos (0)
- #define I2S_CFGR_CHLEN (0x01U << I2S_CFGR_CHLEN_Pos) ///< Vocal tract length
- #define I2S_CFGR_DATLEN_Pos (1)
- #define I2S_CFGR_DATLEN_16 (0x00U << I2S_CFGR_DATLEN_Pos) ///< Audio data width 16
- #define I2S_CFGR_DATLEN_24 (0x01U << I2S_CFGR_DATLEN_Pos) ///< Audio data width 24
- #define I2S_CFGR_DATLEN_32 (0x02U << I2S_CFGR_DATLEN_Pos) ///< Audio data width 32
- #define I2S_CFGR_I2SSTD_Pos (4)
- #define I2S_CFGR_I2SSTD_PCM (0x00U << I2S_CFGR_I2SSTD_Pos) ///< I2S selection PCM standard
- #define I2S_CFGR_I2SSTD_MSB_R (0x01U << I2S_CFGR_I2SSTD_Pos) ///< I2S selection Right alignment (MSB) standard
- #define I2S_CFGR_I2SSTD_MSB_L (0x02U << I2S_CFGR_I2SSTD_Pos) ///< I2S selection Left aligned (MSB) standard
- #define I2S_CFGR_I2SSTD_Philips (0x03U << I2S_CFGR_I2SSTD_Pos) ///< I2S selection Philips standard
- #define I2S_CFGR_PCMSYNC_Pos (6)
- #define I2S_CFGR_PCMSYNC (0x01U << I2S_CFGR_PCMSYNC_Pos) ///< PCM frame synchronization mode
- #define I2S_CFGR_SPI_I2S_Pos (10)
- #define I2S_CFGR_SPI_I2S (0x01U << I2S_CFGR_SPI_I2S_Pos) ///< SPI/I2S module function selection
- #define I2S_CFGR_MCKOE_Pos (11)
- #define I2S_CFGR_MCKOE (0x01U << I2S_CFGR_MCKOE_Pos) ///< I2S master clock output enable
- #define I2S_CFGR_I2SDIV_Pos (16)
- #define I2S_CFGR_I2SDIV (0x1FFU << I2S_CFGR_I2SDIV_Pos) ///< The frequency division
- /// @}
- /// @}
- /// @}
- ////////////////////////////////////////////////////////////////////////////////
- #endif
- ////////////////////////////////////////////////////////////////////////////////
|