gd32f4xx_spi.h 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. /*!
  2. \file gd32f4xx_spi.h
  3. \brief definitions for the SPI
  4. */
  5. /*
  6. Copyright (C) 2016 GigaDevice
  7. 2016-08-15, V1.0.0, firmware for GD32F4xx
  8. */
  9. #ifndef GD32F4XX_SPI_H
  10. #define GD32F4XX_SPI_H
  11. #include "gd32f4xx.h"
  12. /* SPIx(x=0,1,2,3,4,5) definitions */
  13. #define SPI0 (SPI_BASE + 0x0000F800U)
  14. #define SPI1 SPI_BASE
  15. #define SPI2 (SPI_BASE + 0x00000400U)
  16. #define SPI3 (SPI_BASE + 0x0000FC00U)
  17. #define SPI4 (SPI_BASE + 0x00011800U)
  18. #define SPI5 (SPI_BASE + 0x00011C00U)
  19. /* I2Sx_ADD(x=1,2) definitions */
  20. #define I2S1_ADD I2S_ADD_BASE
  21. #define I2S2_ADD (I2S_ADD_BASE + 0x00000C00U)
  22. /* SPI registers definitions */
  23. #define SPI_CTL0(spix) REG32((spix) + 0x00U) /*!< SPI control register 0 */
  24. #define SPI_CTL1(spix) REG32((spix) + 0x04U) /*!< SPI control register 1*/
  25. #define SPI_STAT(spix) REG32((spix) + 0x08U) /*!< SPI status register */
  26. #define SPI_DATA(spix) REG32((spix) + 0x0CU) /*!< SPI data register */
  27. #define SPI_CRCPOLY(spix) REG32((spix) + 0x10U) /*!< SPI CRC polynomial register */
  28. #define SPI_RCRC(spix) REG32((spix) + 0x14U) /*!< SPI receive CRC register */
  29. #define SPI_TCRC(spix) REG32((spix) + 0x18U) /*!< SPI transmit CRC register */
  30. #define SPI_I2SCTL(spix) REG32((spix) + 0x1CU) /*!< SPI I2S control register */
  31. #define SPI_I2SPSC(spix) REG32((spix) + 0x20U) /*!< SPI I2S clock prescaler register */
  32. #define SPI_QCTL(spix) REG32((spix) + 0x80U) /*!< SPI quad mode control register */
  33. /* I2S_ADD registers definitions */
  34. #define I2S_ADD_CTL0(i2sx_add) REG32((i2sx_add) + 0x00U) /*!< I2S_ADD control register 0 */
  35. #define I2S_ADD_CTL1(i2sx_add) REG32((i2sx_add) + 0x04U) /*!< I2S_ADD control register 1*/
  36. #define I2S_ADD_STAT(i2sx_add) REG32((i2sx_add) + 0x08U) /*!< I2S_ADD status register */
  37. #define I2S_ADD_DATA(i2sx_add) REG32((i2sx_add) + 0x0CU) /*!< I2S_ADD data register */
  38. #define I2S_ADD_CRCPOLY(i2sx_add) REG32((i2sx_add) + 0x10U) /*!< I2S_ADD CRC polynomial register */
  39. #define I2S_ADD_RCRC(i2sx_add) REG32((i2sx_add) + 0x14U) /*!< I2S_ADD receive CRC register */
  40. #define I2S_ADD_TCRC(i2sx_add) REG32((i2sx_add) + 0x18U) /*!< I2S_ADD transmit CRC register */
  41. #define I2S_ADD_I2SCTL(i2sx_add) REG32((i2sx_add) + 0x1CU) /*!< I2S_ADD I2S control register */
  42. #define I2S_ADD_I2SPSC(i2sx_add) REG32((i2sx_add) + 0x20U) /*!< I2S_ADD I2S clock prescaler register */
  43. /* bits definitions */
  44. /* SPIx_CTL0 */
  45. #define SPI_CTL0_CKPH BIT(0) /*!< clock phase selection*/
  46. #define SPI_CTL0_CKPL BIT(1) /*!< clock polarity selection */
  47. #define SPI_CTL0_MSTMOD BIT(2) /*!< master mode enable */
  48. #define SPI_CTL0_PSC BITS(3,5) /*!< master clock prescaler selection */
  49. #define SPI_CTL0_SPIEN BIT(6) /*!< SPI enable*/
  50. #define SPI_CTL0_LF BIT(7) /*!< lsb first mode */
  51. #define SPI_CTL0_SWNSS BIT(8) /*!< nss pin selection in nss software mode */
  52. #define SPI_CTL0_SWNSSEN BIT(9) /*!< nss software mode selection */
  53. #define SPI_CTL0_RO BIT(10) /*!< receive only */
  54. #define SPI_CTL0_FF16 BIT(11) /*!< data frame size */
  55. #define SPI_CTL0_CRCNT BIT(12) /*!< CRC next transfer */
  56. #define SPI_CTL0_CRCEN BIT(13) /*!< CRC calculation enable */
  57. #define SPI_CTL0_BDOEN BIT(14) /*!< bidirectional transmit output enable*/
  58. #define SPI_CTL0_BDEN BIT(15) /*!< bidirectional enable */
  59. /* SPIx_CTL1 */
  60. #define SPI_CTL1_DMAREN BIT(0) /*!< receive buffer dma enable */
  61. #define SPI_CTL1_DMATEN BIT(1) /*!< transmit buffer dma enable */
  62. #define SPI_CTL1_NSSDRV BIT(2) /*!< drive nss output */
  63. #define SPI_CTL1_TMOD BIT(4) /*!< SPI TI mode enable */
  64. #define SPI_CTL1_ERRIE BIT(5) /*!< errors interrupt enable */
  65. #define SPI_CTL1_RBNEIE BIT(6) /*!< receive buffer not empty interrupt enable */
  66. #define SPI_CTL1_TBEIE BIT(7) /*!< transmit buffer empty interrupt enable */
  67. /* SPIx_STAT */
  68. #define SPI_STAT_RBNE BIT(0) /*!< receive buffer not empty */
  69. #define SPI_STAT_TBE BIT(1) /*!< transmit buffer empty */
  70. #define SPI_STAT_I2SCH BIT(2) /*!< I2S channel side */
  71. #define SPI_STAT_TXURERR BIT(3) /*!< I2S transmission underrun error bit */
  72. #define SPI_STAT_CRCERR BIT(4) /*!< SPI CRC error bit */
  73. #define SPI_STAT_CONFERR BIT(5) /*!< SPI configuration error */
  74. #define SPI_STAT_RXORERR BIT(6) /*!< SPI reception overrun error Bit */
  75. #define SPI_STAT_TRANS BIT(7) /*!< transmitting on-going Bit */
  76. #define SPI_STAT_FERR BIT(8) /*!< format error */
  77. /* SPI_DATA */
  78. #define SPI_DATA_DATA BITS(0,15) /*!< data transfer register */
  79. /* SPI_CRCPOLY */
  80. #define SPI_CRCPOLY_CPR BITS(0,15) /*!< CRC polynomial register */
  81. /* SPI_RCRC */
  82. #define SPI_RCRC_RCR BITS(0,15) /*!< RX CRC register */
  83. /* SPI_TCRC */
  84. #define SPI_TCRC_TCR BITS(0,15) /*!< RX CRC register */
  85. /* SPIx_I2SCTL */
  86. #define SPI_I2SCTL_CHLEN BIT(0) /*!< channel length */
  87. #define SPI_I2SCTL_DTLEN BITS(1,2) /*!< data length */
  88. #define SPI_I2SCTL_CKPL BIT(3) /*!< idle state clock polarity */
  89. #define SPI_I2SCTL_I2SSTD BITS(4,5) /*!< I2S standard selection */
  90. #define SPI_I2SCTL_PCMSMOD BIT(7) /*!< PCM frame synchronization mode */
  91. #define SPI_I2SCTL_I2SOPMOD BITS(8,9) /*!< I2S operation mode */
  92. #define SPI_I2SCTL_I2SEN BIT(10) /*!< I2S enable */
  93. #define SPI_I2SCTL_I2SSEL BIT(11) /*!< I2S mode selection */
  94. /* SPIx_I2S_PSC */
  95. #define SPI_I2SPSC_DIV BITS(0,7) /*!< dividing factor for the prescaler */
  96. #define SPI_I2SPSC_OF BIT(8) /*!< odd factor for the prescaler */
  97. #define SPI_I2SPSC_MCKOEN BIT(9) /*!< I2S MCK output enable */
  98. /* SPIx_SPI_QCTL(only SPI5) */
  99. #define SPI_QCTL_QMOD BIT(0) /*!< quad-SPI mode enable */
  100. #define SPI_QCTL_QRD BIT(1) /*!< quad-SPI mode read select */
  101. #define SPI_QCTL_IO23_DRV BIT(2) /*!< drive SPI_IO2 and SPI_IO3 enable */
  102. /* constants definitions */
  103. /* SPI and I2S parameter struct definitions */
  104. typedef struct
  105. {
  106. uint32_t device_mode; /*!< SPI master or slave */
  107. uint32_t trans_mode; /*!< SPI transtype */
  108. uint32_t frame_size; /*!< SPI frame size */
  109. uint32_t nss; /*!< SPI nss control by handware or software */
  110. uint32_t endian; /*!< SPI big endian or little endian */
  111. uint32_t clock_polarity_phase; /*!< SPI clock phase and polarity */
  112. uint32_t prescale; /*!< SPI prescale factor */
  113. }spi_parameter_struct;
  114. /* SPI struct parameter options */
  115. #define SPI_MASTER (SPI_CTL0_MSTMOD | SPI_CTL0_SWNSS) /*!< SPI as master */
  116. #define SPI_SLAVE ((uint32_t)0x00000000U) /*!< SPI as slave */
  117. #define SPI_BIDIRECTIONAL_TEANSMIT SPI_CTL0_BDOEN /*!< SPI work in transmit-only mode */
  118. #define SPI_BIDIRECTIONAL_RECEIVE ~SPI_CTL0_BDOEN /*!< SPI work in receive-only mode */
  119. #define SPI_TRANSMODE_FULLDUPLEX ((uint32_t)0x00000000U) /*!< SPI receive and send data at fullduplex communication */
  120. #define SPI_TRANSMODE_RECEIVEONLY SPI_CTL0_RO /*!< SPI only receive data */
  121. #define SPI_TRANSMODE_BDRECEIVE SPI_CTL0_BDEN /*!< bidirectional receive data */
  122. #define SPI_TRANSMODE_BDTRANSMIT (SPI_CTL0_BDEN | SPI_CTL0_BDOEN) /*!< bidirectional transmit data*/
  123. #define SPI_FRAMESIZE_16BIT SPI_CTL0_FF16 /*!< SPI frame size is 16 bits */
  124. #define SPI_FRAMESIZE_8BIT ((uint32_t)0x00000000U) /*!< SPI frame size is 8 bits */
  125. #define SPI_NSS_SOFT SPI_CTL0_SWNSSEN /*!< SPI nss control by sofrware */
  126. #define SPI_NSS_HARD ((uint32_t)0x00000000U) /*!< SPI nss control by hardware */
  127. #define SPI_ENDIAN_MSB ((uint32_t)0x00000000U) /*!< SPI transmit way is big endian:transmit MSB first */
  128. #define SPI_ENDIAN_LSB SPI_CTL0_LF /*!< SPI transmit way is little endian:transmit LSB first */
  129. #define SPI_CK_PL_LOW_PH_1EDGE ((uint32_t)0x00000000U) /*!< SPI clock polarity is low level and phase is first edge */
  130. #define SPI_CK_PL_HIGH_PH_1EDGE SPI_CTL0_CKPL /*!< SPI clock polarity is high level and phase is first edge */
  131. #define SPI_CK_PL_LOW_PH_2EDGE SPI_CTL0_CKPH /*!< SPI clock polarity is low level and phase is second edge */
  132. #define SPI_CK_PL_HIGH_PH_2EDGE (SPI_CTL0_CKPL|SPI_CTL0_CKPH) /*!< SPI clock polarity is high level and phase is second edge */
  133. #define CTL0_PSC(regval) (BITS(3,5)&((uint32_t)(regval)<<3))
  134. #define SPI_PSC_2 CTL0_PSC(0) /*!< SPI clock prescale factor is 2 */
  135. #define SPI_PSC_4 CTL0_PSC(1) /*!< SPI clock prescale factor is 4 */
  136. #define SPI_PSC_8 CTL0_PSC(2) /*!< SPI clock prescale factor is 8 */
  137. #define SPI_PSC_16 CTL0_PSC(3) /*!< SPI clock prescale factor is 16 */
  138. #define SPI_PSC_32 CTL0_PSC(4) /*!< SPI clock prescale factor is 32 */
  139. #define SPI_PSC_64 CTL0_PSC(5) /*!< SPI clock prescale factor is 64 */
  140. #define SPI_PSC_128 CTL0_PSC(6) /*!< SPI clock prescale factor is 128 */
  141. #define SPI_PSC_256 CTL0_PSC(7) /*!< SPI clock prescale factor is 256 */
  142. /* I2S parameter options */
  143. #define I2S_AUDIOSAMPLE_8K ((uint32_t)8000U) /*!< I2S audio sample rate is 8khz */
  144. #define I2S_AUDIOSAMPLE_11K ((uint32_t)11025U) /*!< I2S audio sample rate is 11khz */
  145. #define I2S_AUDIOSAMPLE_16K ((uint32_t)16000U) /*!< I2S audio sample rate is 16khz */
  146. #define I2S_AUDIOSAMPLE_22K ((uint32_t)22050U) /*!< I2S audio sample rate is 22khz */
  147. #define I2S_AUDIOSAMPLE_32K ((uint32_t)32000U) /*!< I2S audio sample rate is 32khz */
  148. #define I2S_AUDIOSAMPLE_44K ((uint32_t)44100U) /*!< I2S audio sample rate is 44khz */
  149. #define I2S_AUDIOSAMPLE_48K ((uint32_t)48000U) /*!< I2S audio sample rate is 48khz */
  150. #define I2S_AUDIOSAMPLE_96K ((uint32_t)96000U) /*!< I2S audio sample rate is 96khz */
  151. #define I2S_AUDIOSAMPLE_192K ((uint32_t)192000U) /*!< I2S audio sample rate is 192khz */
  152. #define I2SCTL_DTLEN(regval) (BITS(1,2)&((uint32_t)(regval)<<1))
  153. #define I2S_FRAMEFORMAT_DT16B_CH16B I2SCTL_DTLEN(0) /*!< I2S data length is 16 bit and channel length is 16 bit */
  154. #define I2S_FRAMEFORMAT_DT16B_CH32B (I2SCTL_DTLEN(0)|SPI_I2SCTL_CHLEN) /*!< I2S data length is 16 bit and channel length is 32 bit */
  155. #define I2S_FRAMEFORMAT_DT24B_CH32B (I2SCTL_DTLEN(1)|SPI_I2SCTL_CHLEN) /*!< I2S data length is 24 bit and channel length is 32 bit */
  156. #define I2S_FRAMEFORMAT_DT32B_CH32B (I2SCTL_DTLEN(2)|SPI_I2SCTL_CHLEN) /*!< I2S data length is 32 bit and channel length is 32 bit */
  157. #define I2S_MCKOUT_DISABLE ((uint32_t)0x00000000U) /*!< I2S master clock output disable */
  158. #define I2S_MCKOUT_ENABLE SPI_I2SPSC_MCKOEN /*!< I2S master clock output enable */
  159. #define I2SCTL_I2SOPMOD(regval) (BITS(8,9)&((uint32_t)(regval)<<8))
  160. #define I2S_MODE_SLAVETX I2SCTL_I2SOPMOD(0) /*!< I2S slave transmit mode */
  161. #define I2S_MODE_SLAVERX I2SCTL_I2SOPMOD(1) /*!< I2S slave receive mode */
  162. #define I2S_MODE_MASTERTX I2SCTL_I2SOPMOD(2) /*!< I2S master transmit mode */
  163. #define I2S_MODE_MASTERRX I2SCTL_I2SOPMOD(3) /*!< I2S master receive mode */
  164. #define I2SCTL_I2SSTD(regval) (BITS(4,5)&((uint32_t)(regval)<<4))
  165. #define I2S_STD_PHILLIPS I2SCTL_I2SSTD(0) /*!< I2S phillips standard */
  166. #define I2S_STD_MSB I2SCTL_I2SSTD(1) /*!< I2S MSB standard */
  167. #define I2S_STD_LSB I2SCTL_I2SSTD(2) /*!< I2S LSB standard */
  168. #define I2S_STD_PCMSHORT I2SCTL_I2SSTD(3) /*!< I2S PCM short standard */
  169. #define I2S_STD_PCMLONG (I2SCTL_I2SSTD(3)|SPI_I2SCTL_PCMSMOD) /*!< I2S PCM long standard */
  170. #define I2S_CKPL_LOW ((uint32_t)0x00000000U) /*!< I2S clock polarity low level */
  171. #define I2S_CKPL_HIGH SPI_I2SCTL_CKPL /*!< I2S clock polarity high level */
  172. /* SPI dma constants definitions */
  173. #define SPI_DMA_TRANSMIT ((uint8_t)0x00U) /*!< SPI transmit data DMA */
  174. #define SPI_DMA_RECEIVE ((uint8_t)0x01U) /*!< SPI receive data DMA */
  175. /* SPI CRC constants definitions */
  176. #define SPI_CRC_TX ((uint8_t)0x00U) /*!< SPI transmit CRC value */
  177. #define SPI_CRC_RX ((uint8_t)0x01U) /*!< SPI receive CRC value */
  178. /* SPI interrupt constants definitions */
  179. #define SPI_I2S_INT_TBE ((uint8_t)0x00U) /*!< transmit buffer empty interrupt */
  180. #define SPI_I2S_INT_RBNE ((uint8_t)0x01U) /*!< receive buffer not empty interrupt */
  181. #define SPI_I2S_INT_RXORERR ((uint8_t)0x02U) /*!< overrun interrupt */
  182. #define SPI_INT_CONFERR ((uint8_t)0x03U) /*!< config error interrupt */
  183. #define SPI_INT_CRCERR ((uint8_t)0x04U) /*!< CRC error interrupt */
  184. #define I2S_INT_TXURERR ((uint8_t)0x05U) /*!< underrun error interrupt */
  185. #define SPI_I2S_INT_ERR ((uint8_t)0x06U) /*!< error interrupt */
  186. #define SPI_I2S_INT_FERR ((uint8_t)0x07U) /*!< format error interrupt */
  187. /* SPI flag definitions */
  188. #define SPI_FLAG_RBNE SPI_STAT_RBNE /*!< receive buffer not empty flag */
  189. #define SPI_FLAG_TBE SPI_STAT_TBE /*!< transmit buffer empty flag */
  190. #define SPI_FLAG_CRCERR SPI_STAT_CRCERR /*!< CRC error flag */
  191. #define SPI_FLAG_CONFERR SPI_STAT_CONFERR /*!< mode config error flag */
  192. #define SPI_FLAG_RXORERR SPI_STAT_RXORERR /*!< receive overrun flag */
  193. #define SPI_FLAG_TRANS SPI_STAT_TRANS /*!< transmit on-going flag */
  194. #define SPI_FLAG_FERR SPI_STAT_FERR /*!< format error interrupt flag */
  195. #define I2S_FLAG_RBNE SPI_STAT_RBNE /*!< receive buffer not empty flag */
  196. #define I2S_FLAG_TBE SPI_STAT_TBE /*!< transmit buffer empty flag */
  197. #define I2S_FLAG_CH SPI_STAT_I2SCH /*!< transmit buffer empty interrupt */
  198. #define I2S_FLAG_TXURERR SPI_STAT_TXURERR /*!< underrun error flag */
  199. #define I2S_FLAG_RXORERR SPI_STAT_RXORERR /*!< overrun flag */
  200. #define I2S_FLAG_TRANS SPI_STAT_TRANS /*!< transmit on-going flag */
  201. #define I2S_FLAG_FERR SPI_STAT_FERR /*!< format error interrupt flag */
  202. /* function declarations */
  203. /* SPI and I2S reset */
  204. void spi_i2s_deinit(uint32_t spi_periph);
  205. /* SPI parameter initialization */
  206. void spi_init(uint32_t spi_periph,spi_parameter_struct* spi_struct);
  207. /* SPI enable */
  208. void spi_enable(uint32_t spi_periph);
  209. /* SPI disable */
  210. void spi_disable(uint32_t spi_periph);
  211. /* I2S parameter initialization */
  212. void i2s_init(uint32_t spi_periph,uint32_t i2s_mode,uint32_t i2s_standard,uint32_t i2s_ckpl);
  213. /* I2S prescale configuration */
  214. void i2s_psc_config(uint32_t spi_periph,uint32_t i2s_audiosample,uint32_t i2s_frameformat,uint32_t i2s_mckout);
  215. /* I2S enable */
  216. void i2s_enable(uint32_t spi_periph);
  217. /* I2S disable */
  218. void i2s_disable(uint32_t spi_periph);
  219. /* SPI nss output enable */
  220. void spi_nss_output_enable(uint32_t spi_periph);
  221. /* SPI nss output disable */
  222. void spi_nss_output_disable(uint32_t spi_periph);
  223. /* SPI nss pin high level in software mode */
  224. void spi_nss_internal_high(uint32_t spi_periph);
  225. /* SPI nss pin low level in software mode */
  226. void spi_nss_internal_low(uint32_t spi_periph);
  227. /* SPI dma enable */
  228. void spi_dma_enable(uint32_t spi_periph,uint8_t spi_dma);
  229. /* SPI dma disable */
  230. void spi_dma_disable(uint32_t spi_periph,uint8_t spi_dma);
  231. /* configure SPI/I2S data frame format */
  232. void spi_i2s_data_frame_format_config(uint32_t spi_periph,uint16_t frame_format);
  233. /* transmit data */
  234. void spi_i2s_data_transmit(uint32_t spi_periph,uint16_t data);
  235. /* receive data */
  236. uint16_t spi_i2s_data_receive(uint32_t spi_periph);
  237. /* configure SPI bidirectional transfer direction */
  238. void spi_bidirectional_transfer_config(uint32_t spi_periph,uint32_t transfer_direction);
  239. /* enable SPI interrupt */
  240. void spi_i2s_interrupt_enable(uint32_t spi_periph,uint8_t spi_i2s_int);
  241. /* disable SPI interrupt */
  242. void spi_i2s_interrupt_disable(uint32_t spi_periph,uint8_t spi_i2s_int);
  243. /* get SPI and I2S interrupt status*/
  244. FlagStatus spi_i2s_interrupt_flag_get(uint32_t spi_periph,uint8_t spi_i2s_int);
  245. /* get SPI and I2S flag status */
  246. FlagStatus spi_i2s_flag_get(uint32_t spi_periph,uint32_t spi_i2s_flag);
  247. /* clear SPI CRC error flag status */
  248. void spi_crc_error_clear(uint32_t spi_periph);
  249. /* SPI CRC polynomial set */
  250. void spi_crc_polynomial_set(uint32_t spi_periph,uint16_t crc_poly);
  251. /* SPI CRC polynomial get */
  252. uint16_t spi_crc_polynomial_get(uint32_t spi_periph);
  253. /* SPI CRC function turn on */
  254. void spi_crc_on(uint32_t spi_periph);
  255. /* SPI CRC function turn off */
  256. void spi_crc_off(uint32_t spi_periph);
  257. /* SPI next data is CRC value */
  258. void spi_crc_next(uint32_t spi_periph);
  259. /* get SPI CRC send value or receive value */
  260. uint16_t spi_crc_get(uint32_t spi_periph,uint8_t spi_crc);
  261. /* SPI TI mode enable */
  262. void spi_ti_mode_enable(uint32_t spi_periph);
  263. /* SPI TI mode disable */
  264. void spi_ti_mode_disable(uint32_t spi_periph);
  265. /* configure i2s full duplex mode */
  266. void i2s_full_duplex_mode_config(uint32_t i2s_add_periph,uint32_t i2s_mode,uint32_t i2s_standard,uint32_t i2s_ckpl,uint32_t i2s_frameformat);
  267. /* quad wire SPI enable */
  268. void qspi_enable(uint32_t spi_periph);
  269. /* quad wire SPI disable */
  270. void qspi_disable(uint32_t spi_periph);
  271. /* quad wire SPI write enable */
  272. void qspi_write_enable(uint32_t spi_periph);
  273. /* quad wire SPI read enable */
  274. void qspi_read_enable(uint32_t spi_periph);
  275. /* quad wire SPI_IO2 and SPI_IO3 pin output enable */
  276. void qspi_io23_output_enable(uint32_t spi_periph);
  277. /* quad wire SPI_IO2 and SPI_IO3 pin output disable */
  278. void qspi_io23_output_disable(uint32_t spi_periph);
  279. #endif /* GD32F4XX_SPI_H */