123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- #ifndef GD32F10X_SPI_H
- #define GD32F10X_SPI_H
- #include "gd32f10x.h"
- #define SPI0 (SPI_BASE + 0x0000F800U)
- #define SPI1 SPI_BASE
- #define SPI2 (SPI_BASE + 0x00000400U)
- #define SPI_CTL0(spix) REG32((spix) + 0x00000000U)
- #define SPI_CTL1(spix) REG32((spix) + 0x00000004U)
- #define SPI_STAT(spix) REG32((spix) + 0x00000008U)
- #define SPI_DATA(spix) REG32((spix) + 0x0000000CU)
- #define SPI_CRCPOLY(spix) REG32((spix) + 0x00000010U)
- #define SPI_RCRC(spix) REG32((spix) + 0x00000014U)
- #define SPI_TCRC(spix) REG32((spix) + 0x00000018U)
- #define SPI_I2SCTL(spix) REG32((spix) + 0x0000001CU)
- #define SPI_I2SPSC(spix) REG32((spix) + 0x00000020U)
- #define SPI_CTL0_CKPH BIT(0)
- #define SPI_CTL0_CKPL BIT(1)
- #define SPI_CTL0_MSTMOD BIT(2)
- #define SPI_CTL0_PSC BITS(3,5)
- #define SPI_CTL0_SPIEN BIT(6)
- #define SPI_CTL0_LF BIT(7)
- #define SPI_CTL0_SWNSS BIT(8)
- #define SPI_CTL0_SWNSSEN BIT(9)
- #define SPI_CTL0_RO BIT(10)
- #define SPI_CTL0_FF16 BIT(11)
- #define SPI_CTL0_CRCNT BIT(12)
- #define SPI_CTL0_CRCEN BIT(13)
- #define SPI_CTL0_BDOEN BIT(14)
- #define SPI_CTL0_BDEN BIT(15)
- #define SPI_CTL1_DMAREN BIT(0)
- #define SPI_CTL1_DMATEN BIT(1)
- #define SPI_CTL1_NSSDRV BIT(2)
- #define SPI_CTL1_ERRIE BIT(5)
- #define SPI_CTL1_RBNEIE BIT(6)
- #define SPI_CTL1_TBEIE BIT(7)
- #define SPI_STAT_RBNE BIT(0)
- #define SPI_STAT_TBE BIT(1)
- #define SPI_STAT_I2SCH BIT(2)
- #define SPI_STAT_TXURERR BIT(3)
- #define SPI_STAT_CRCERR BIT(4)
- #define SPI_STAT_CONFERR BIT(5)
- #define SPI_STAT_RXORERR BIT(6)
- #define SPI_STAT_TRANS BIT(7)
- #define SPI_DATA_DATA BITS(0,15)
- #define SPI_CRCPOLY_CRCPOLY BITS(0,15)
- #define SPI_RCRC_RCRC BITS(0,15)
- #define SPI_TCRC_TCRC BITS(0,15)
- #define SPI_I2SCTL_CHLEN BIT(0)
- #define SPI_I2SCTL_DTLEN BITS(1,2)
- #define SPI_I2SCTL_CKPL BIT(3)
- #define SPI_I2SCTL_I2SSTD BITS(4,5)
- #define SPI_I2SCTL_PCMSMOD BIT(7)
- #define SPI_I2SCTL_I2SOPMOD BITS(8,9)
- #define SPI_I2SCTL_I2SEN BIT(10)
- #define SPI_I2SCTL_I2SSEL BIT(11)
- #define SPI_I2SPSC_DIV BITS(0,7)
- #define SPI_I2SPSC_OF BIT(8)
- #define SPI_I2SPSC_MCKOEN BIT(9)
- typedef struct {
- uint32_t device_mode;
- uint32_t trans_mode;
- uint32_t frame_size;
- uint32_t nss;
- uint32_t endian;
- uint32_t clock_polarity_phase;
- uint32_t prescale;
- } spi_parameter_struct;
- #define SPI_MASTER (SPI_CTL0_MSTMOD | SPI_CTL0_SWNSS)
- #define SPI_SLAVE ((uint32_t)0x00000000U)
- #define SPI_BIDIRECTIONAL_TRANSMIT SPI_CTL0_BDOEN
- #define SPI_BIDIRECTIONAL_RECEIVE (~SPI_CTL0_BDOEN)
- #define SPI_TRANSMODE_FULLDUPLEX ((uint32_t)0x00000000U)
- #define SPI_TRANSMODE_RECEIVEONLY SPI_CTL0_RO
- #define SPI_TRANSMODE_BDRECEIVE SPI_CTL0_BDEN
- #define SPI_TRANSMODE_BDTRANSMIT (SPI_CTL0_BDEN | SPI_CTL0_BDOEN)
- #define SPI_FRAMESIZE_16BIT SPI_CTL0_FF16
- #define SPI_FRAMESIZE_8BIT ((uint32_t)0x00000000U)
- #define SPI_NSS_SOFT SPI_CTL0_SWNSSEN
- #define SPI_NSS_HARD ((uint32_t)0x00000000U)
- #define SPI_ENDIAN_MSB ((uint32_t)0x00000000U)
- #define SPI_ENDIAN_LSB SPI_CTL0_LF
- #define SPI_CK_PL_LOW_PH_1EDGE ((uint32_t)0x00000000U)
- #define SPI_CK_PL_HIGH_PH_1EDGE SPI_CTL0_CKPL
- #define SPI_CK_PL_LOW_PH_2EDGE SPI_CTL0_CKPH
- #define SPI_CK_PL_HIGH_PH_2EDGE (SPI_CTL0_CKPL | SPI_CTL0_CKPH)
- #define CTL0_PSC(regval) (BITS(3,5) & ((uint32_t)(regval) << 3))
- #define SPI_PSC_2 CTL0_PSC(0)
- #define SPI_PSC_4 CTL0_PSC(1)
- #define SPI_PSC_8 CTL0_PSC(2)
- #define SPI_PSC_16 CTL0_PSC(3)
- #define SPI_PSC_32 CTL0_PSC(4)
- #define SPI_PSC_64 CTL0_PSC(5)
- #define SPI_PSC_128 CTL0_PSC(6)
- #define SPI_PSC_256 CTL0_PSC(7)
- #define I2S_AUDIOSAMPLE_8K ((uint32_t)8000U)
- #define I2S_AUDIOSAMPLE_11K ((uint32_t)11025U)
- #define I2S_AUDIOSAMPLE_16K ((uint32_t)16000U)
- #define I2S_AUDIOSAMPLE_22K ((uint32_t)22050U)
- #define I2S_AUDIOSAMPLE_32K ((uint32_t)32000U)
- #define I2S_AUDIOSAMPLE_44K ((uint32_t)44100U)
- #define I2S_AUDIOSAMPLE_48K ((uint32_t)48000U)
- #define I2S_AUDIOSAMPLE_96K ((uint32_t)96000U)
- #define I2S_AUDIOSAMPLE_192K ((uint32_t)192000U)
- #define I2SCTL_DTLEN(regval) (BITS(1,2) & ((uint32_t)(regval) << 1))
- #define I2S_FRAMEFORMAT_DT16B_CH16B I2SCTL_DTLEN(0)
- #define I2S_FRAMEFORMAT_DT16B_CH32B (I2SCTL_DTLEN(0) | SPI_I2SCTL_CHLEN)
- #define I2S_FRAMEFORMAT_DT24B_CH32B (I2SCTL_DTLEN(1) | SPI_I2SCTL_CHLEN)
- #define I2S_FRAMEFORMAT_DT32B_CH32B (I2SCTL_DTLEN(2) | SPI_I2SCTL_CHLEN)
- #define I2S_MCKOUT_DISABLE ((uint32_t)0x00000000U)
- #define I2S_MCKOUT_ENABLE SPI_I2SPSC_MCKOEN
- #define I2SCTL_I2SOPMOD(regval) (BITS(8,9) & ((uint32_t)(regval) << 8))
- #define I2S_MODE_SLAVETX I2SCTL_I2SOPMOD(0)
- #define I2S_MODE_SLAVERX I2SCTL_I2SOPMOD(1)
- #define I2S_MODE_MASTERTX I2SCTL_I2SOPMOD(2)
- #define I2S_MODE_MASTERRX I2SCTL_I2SOPMOD(3)
- #define I2SCTL_I2SSTD(regval) (BITS(4,5) & ((uint32_t)(regval) << 4))
- #define I2S_STD_PHILLIPS I2SCTL_I2SSTD(0)
- #define I2S_STD_MSB I2SCTL_I2SSTD(1)
- #define I2S_STD_LSB I2SCTL_I2SSTD(2)
- #define I2S_STD_PCMSHORT I2SCTL_I2SSTD(3)
- #define I2S_STD_PCMLONG (I2SCTL_I2SSTD(3) | SPI_I2SCTL_PCMSMOD)
- #define I2S_CKPL_LOW ((uint32_t)0x00000000U)
- #define I2S_CKPL_HIGH SPI_I2SCTL_CKPL
- #define SPI_DMA_TRANSMIT ((uint8_t)0x00U)
- #define SPI_DMA_RECEIVE ((uint8_t)0x01U)
- #define SPI_CRC_TX ((uint8_t)0x00U)
- #define SPI_CRC_RX ((uint8_t)0x01U)
- #define SPI_I2S_INT_TBE SPI_CTL1_TBEIE
- #define SPI_I2S_INT_RBNE SPI_CTL1_RBNEIE
- #define SPI_I2S_INT_ERR SPI_CTL1_ERRIE
- #define SPI_I2S_INT_FLAG_TBE ((uint8_t)0x00U)
- #define SPI_I2S_INT_FLAG_RBNE ((uint8_t)0x01U)
- #define SPI_I2S_INT_FLAG_RXORERR ((uint8_t)0x02U)
- #define SPI_INT_FLAG_CONFERR ((uint8_t)0x03U)
- #define SPI_INT_FLAG_CRCERR ((uint8_t)0x04U)
- #define I2S_INT_FLAG_TXURERR ((uint8_t)0x05U)
- #define SPI_FLAG_RBNE SPI_STAT_RBNE
- #define SPI_FLAG_TBE SPI_STAT_TBE
- #define SPI_FLAG_CRCERR SPI_STAT_CRCERR
- #define SPI_FLAG_CONFERR SPI_STAT_CONFERR
- #define SPI_FLAG_RXORERR SPI_STAT_RXORERR
- #define SPI_FLAG_TRANS SPI_STAT_TRANS
- #define I2S_FLAG_RBNE SPI_STAT_RBNE
- #define I2S_FLAG_TBE SPI_STAT_TBE
- #define I2S_FLAG_CH SPI_STAT_I2SCH
- #define I2S_FLAG_TXURERR SPI_STAT_TXURERR
- #define I2S_FLAG_RXORERR SPI_STAT_RXORERR
- #define I2S_FLAG_TRANS SPI_STAT_TRANS
- void spi_i2s_deinit(uint32_t spi_periph);
- void spi_struct_para_init(spi_parameter_struct *spi_struct);
- void spi_init(uint32_t spi_periph, spi_parameter_struct *spi_struct);
- void spi_enable(uint32_t spi_periph);
- void spi_disable(uint32_t spi_periph);
- void i2s_init(uint32_t spi_periph, uint32_t mode, uint32_t standard, uint32_t ckpl);
- void i2s_psc_config(uint32_t spi_periph, uint32_t audiosample, uint32_t frameformat, uint32_t mckout);
- void i2s_enable(uint32_t spi_periph);
- void i2s_disable(uint32_t spi_periph);
- void spi_nss_output_enable(uint32_t spi_periph);
- void spi_nss_output_disable(uint32_t spi_periph);
- void spi_nss_internal_high(uint32_t spi_periph);
- void spi_nss_internal_low(uint32_t spi_periph);
- void spi_dma_enable(uint32_t spi_periph, uint8_t dma);
- void spi_dma_disable(uint32_t spi_periph, uint8_t dma);
- void spi_i2s_data_frame_format_config(uint32_t spi_periph, uint16_t frame_format);
- void spi_bidirectional_transfer_config(uint32_t spi_periph, uint32_t transfer_direction);
- void spi_i2s_data_transmit(uint32_t spi_periph, uint16_t data);
- uint16_t spi_i2s_data_receive(uint32_t spi_periph);
- void spi_crc_polynomial_set(uint32_t spi_periph, uint16_t crc_poly);
- uint16_t spi_crc_polynomial_get(uint32_t spi_periph);
- void spi_crc_on(uint32_t spi_periph);
- void spi_crc_off(uint32_t spi_periph);
- void spi_crc_next(uint32_t spi_periph);
- uint16_t spi_crc_get(uint32_t spi_periph, uint8_t crc);
- FlagStatus spi_i2s_flag_get(uint32_t spi_periph, uint32_t flag);
- void spi_i2s_interrupt_enable(uint32_t spi_periph, uint8_t interrupt);
- void spi_i2s_interrupt_disable(uint32_t spi_periph, uint8_t interrupt);
- FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph, uint8_t interrupt);
- void spi_crc_error_clear(uint32_t spi_periph);
- #endif
|