air105_spi.h 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. /*
  2. * Copyright (c) 2022 OpenLuat & AirM2M
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy of
  5. * this software and associated documentation files (the "Software"), to deal in
  6. * the Software without restriction, including without limitation the rights to
  7. * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  8. * the Software, and to permit persons to whom the Software is furnished to do so,
  9. * subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in all
  12. * copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  16. * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  17. * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  18. * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  19. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  20. */
  21. #ifndef __AIR105_SPI_H
  22. #define __AIR105_SPI_H
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26. /* Includes ------------------------------------------------------------------*/
  27. #include "air105.h"
  28. #define SPI_DMACR_RDMAE_Pos (0)
  29. #define SPI_DMACR_RDMAE_Mask (0x01U << SPI_DMACR_RDMAE_Pos)
  30. #define SPI_DMACR_TDMAE_Pos (1)
  31. #define SPI_DMACR_TDMAE_Mask (0x01U << SPI_DMACR_TDMAE_Pos)
  32. /** @defgroup SPI_Exported_Types
  33. * @{
  34. */
  35. /**
  36. * @brief SPI Init structure definition
  37. */
  38. typedef struct
  39. {
  40. uint32_t SPI_Direction; /*!< Specifies the SPI unidirectional or bidirectional data mode.
  41. This parameter can be a value of @ref SPI_data_direction */
  42. uint32_t SPI_Mode; /*!< Specifies the SPI operating mode.
  43. This parameter can be a value of @ref SPI_mode */
  44. uint32_t SPI_DataSize; /*!< Specifies the SPI data size.
  45. This parameter can be a value of @ref SPI_data_size */
  46. uint32_t SPI_CPOL; /*!< Specifies the serial clock steady state.
  47. This parameter can be a value of @ref SPI_Clock_Polarity */
  48. uint32_t SPI_CPHA; /*!< Specifies the clock active edge for the bit capture.
  49. This parameter can be a value of @ref SPI_Clock_Phase */
  50. uint32_t SPI_NSS; /*!< Specifies whether the NSS signal is managed by
  51. hardware (NSS pin) or by software using the SSI bit.
  52. This parameter can be a value of @ref SPI_Slave_Select_management */
  53. uint32_t SPI_BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be
  54. used to configure the transmit and receive SCK clock.
  55. This parameter can be a value of @ref SPI_BaudRate_Prescaler.
  56. @note The communication clock is derived from the master
  57. clock. The slave clock does not need to be set. */
  58. uint32_t SPI_RXFIFOFullThreshold;
  59. uint32_t SPI_TXFIFOEmptyThreshold;
  60. }SPI_InitTypeDef;
  61. /**
  62. * @brief Texas Instruments Synchronous Serial Protocol (SSP) Init structure definition
  63. */
  64. typedef struct
  65. {
  66. uint32_t SSP_Direction; /*!< Specifies the SPI unidirectional or bidirectional data mode.
  67. This parameter can be a value of @ref SPI_data_direction */
  68. uint32_t SSP_DataSize; /*!< Specifies the SPI data size.
  69. This parameter can be a value of @ref SPI_data_size */
  70. uint32_t SSP_NSS; /*!< Specifies whether the NSS signal is managed by
  71. hardware (NSS pin) or by software using the SSI bit.
  72. This parameter can be a value of @ref SPI_Slave_Select_management */
  73. uint32_t SSP_BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be
  74. used to configure the transmit and receive SCK clock.
  75. This parameter can be a value of @ref SPI_BaudRate_Prescaler.
  76. @note The communication clock is derived from the master
  77. clock. The slave clock does not need to be set. */
  78. uint32_t SSP_RXFIFOFullThreshold;
  79. uint32_t SSP_TXFIFOEmptyThreshold;
  80. }SSP_InitTypeDef;
  81. /**
  82. * @brief National Semiconductor Microwire (NSM) Init structure definition
  83. */
  84. typedef struct
  85. {
  86. uint32_t NSM_Direction;
  87. uint32_t NSM_TransferMode;
  88. uint32_t NSM_DataSize; /*!< Specifies the SPI data size.
  89. This parameter can be a value of @ref SPI_data_size */
  90. uint32_t NSM_ControlDataSize;
  91. uint32_t NSM_NSS; /*!< Specifies whether the NSS signal is managed by
  92. hardware (NSS pin) or by software using the SSI bit.
  93. This parameter can be a value of @ref SPI_Slave_Select_management */
  94. uint32_t NSM_BaudRatePrescaler; /*!< Specifies the Baud Rate prescaler value which will be
  95. used to configure the transmit and receive SCK clock.
  96. This parameter can be a value of @ref SPI_BaudRate_Prescaler.
  97. @note The communication clock is derived from the master
  98. clock. The slave clock does not need to be set. */
  99. FunctionalState NSM_HandShakingCmd;
  100. uint32_t NSM_RXFIFOFullThreshold;
  101. uint32_t NSM_TXFIFOEmptyThreshold;
  102. }NSM_InitTypeDef;
  103. /**
  104. * @brief SPI DMA Init structure definition
  105. */
  106. typedef struct
  107. {
  108. uint32_t SPI_DMAReq;
  109. uint32_t SPI_DMAReceiveLevel;
  110. uint32_t SPI_DMATransmitLevel;
  111. FunctionalState SPI_DMAEnCmd;
  112. }SPI_DMAInitTypeDef;
  113. /** @defgroup SPI_data_direction
  114. * @{
  115. */
  116. #define SPI_Direction_2Lines_FullDuplex ((uint32_t)0x0000)
  117. #define SPI_Direction_1Line_Tx ((uint32_t)0x0100)
  118. #define SPI_Direction_1Line_Rx ((uint32_t)0x0200)
  119. #define SPI_Direction_EEPROM_Read ((uint32_t)0x0300)
  120. #define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \
  121. ((MODE) == SPI_Direction_1Line_Tx) || \
  122. ((MODE) == SPI_Direction_1Line_Rx) || \
  123. ((MODE) == SPI_Direction_EEPROM_Read))
  124. /**
  125. * @}
  126. */
  127. #define SPI_Mode_Master ((uint32_t)0x0001)
  128. #define SPI_Mode_Slave ((uint32_t)0x0000)
  129. #define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \
  130. ((MODE) == SPI_Mode_Slave))
  131. /** @defgroup SPI_data_size
  132. * @{
  133. */
  134. #define SPI_DataSize_8b ((uint32_t)0x0007)
  135. #define SPI_DataSize_16b ((uint32_t)0x000F)
  136. #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_16b) || \
  137. ((DATASIZE) == SPI_DataSize_8b))
  138. /**
  139. * @}
  140. */
  141. /** @defgroup SPI_Clock_Polarity
  142. * @{
  143. */
  144. #define SPI_CPOL_Low ((uint32_t)0x0000)
  145. #define SPI_CPOL_High ((uint32_t)0x0080)
  146. #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \
  147. ((CPOL) == SPI_CPOL_High))
  148. /**
  149. * @}
  150. */
  151. /** @defgroup SPI_Clock_Phase
  152. * @{
  153. */
  154. #define SPI_CPHA_1Edge ((uint32_t)0x0000)
  155. #define SPI_CPHA_2Edge ((uint32_t)0x0040)
  156. #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \
  157. ((CPHA) == SPI_CPHA_2Edge))
  158. /**
  159. * @}
  160. */
  161. #define SPI_NSS_0 ((uint32_t)0x0001)
  162. #define SPI_NSS_Null ((uint32_t)0x0000)
  163. #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_0) || \
  164. ((NSS) == SPI_NSS_Null))
  165. /** @defgroup SPI_BaudRate_Prescaler
  166. * @{
  167. */
  168. #define SPI_BaudRatePrescaler_2 ((uint32_t)0x0002)
  169. #define SPI_BaudRatePrescaler_4 ((uint32_t)0x0004)
  170. #define SPI_BaudRatePrescaler_8 ((uint32_t)0x0008)
  171. #define SPI_BaudRatePrescaler_16 ((uint32_t)0x0010)
  172. #define SPI_BaudRatePrescaler_32 ((uint32_t)0x0020)
  173. #define SPI_BaudRatePrescaler_64 ((uint32_t)0x0040)
  174. #define SPI_BaudRatePrescaler_128 ((uint32_t)0x0080)
  175. #define SPI_BaudRatePrescaler_256 ((uint32_t)0x0100)
  176. #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \
  177. ((PRESCALER) == SPI_BaudRatePrescaler_4) || \
  178. ((PRESCALER) == SPI_BaudRatePrescaler_8) || \
  179. ((PRESCALER) == SPI_BaudRatePrescaler_16) || \
  180. ((PRESCALER) == SPI_BaudRatePrescaler_32) || \
  181. ((PRESCALER) == SPI_BaudRatePrescaler_64) || \
  182. ((PRESCALER) == SPI_BaudRatePrescaler_128) || \
  183. ((PRESCALER) == SPI_BaudRatePrescaler_256))
  184. /**
  185. * @}
  186. */
  187. /** @defgroup SPI_RXFIFOFullThreshold
  188. * @{
  189. */
  190. #define SPI_RXFIFOFullThreshold_1 ((uint32_t)0x0000)
  191. #define SPI_RXFIFOFullThreshold_2 ((uint32_t)0x0001)
  192. #define SPI_RXFIFOFullThreshold_3 ((uint32_t)0x0002)
  193. #define SPI_RXFIFOFullThreshold_4 ((uint32_t)0x0003)
  194. #define SPI_RXFIFOFullThreshold_5 ((uint32_t)0x0004)
  195. #define SPI_RXFIFOFullThreshold_6 ((uint32_t)0x0005)
  196. #define SPI_RXFIFOFullThreshold_7 ((uint32_t)0x0006)
  197. #define SPI_RXFIFOFullThreshold_8 ((uint32_t)0x0007)
  198. #define SPI_RXFIFOFullThreshold_9 ((uint32_t)0x0008)
  199. #define SPI_RXFIFOFullThreshold_10 ((uint32_t)0x0009)
  200. #define SPI_RXFIFOFullThreshold_11 ((uint32_t)0x000A)
  201. #define SPI_RXFIFOFullThreshold_12 ((uint32_t)0x000B)
  202. #define SPI_RXFIFOFullThreshold_13 ((uint32_t)0x000C)
  203. #define SPI_RXFIFOFullThreshold_14 ((uint32_t)0x000D)
  204. #define SPI_RXFIFOFullThreshold_15 ((uint32_t)0x000E)
  205. #define SPI_RXFIFOFullThreshold_16 ((uint32_t)0x000F)
  206. #define IS_SPI_RX_FIFO_FULL_THRESHOLD(THRESHOLD) (((THRESHOLD) == SPI_RXFIFOFullThreshold_1) || \
  207. ((THRESHOLD) == SPI_RXFIFOFullThreshold_2) || \
  208. ((THRESHOLD) == SPI_RXFIFOFullThreshold_3) || \
  209. ((THRESHOLD) == SPI_RXFIFOFullThreshold_4) || \
  210. ((THRESHOLD) == SPI_RXFIFOFullThreshold_5) || \
  211. ((THRESHOLD) == SPI_RXFIFOFullThreshold_6) || \
  212. ((THRESHOLD) == SPI_RXFIFOFullThreshold_7) || \
  213. ((THRESHOLD) == SPI_RXFIFOFullThreshold_8) || \
  214. ((THRESHOLD) == SPI_RXFIFOFullThreshold_9) || \
  215. ((THRESHOLD) == SPI_RXFIFOFullThreshold_10) || \
  216. ((THRESHOLD) == SPI_RXFIFOFullThreshold_11) || \
  217. ((THRESHOLD) == SPI_RXFIFOFullThreshold_12) || \
  218. ((THRESHOLD) == SPI_RXFIFOFullThreshold_13) || \
  219. ((THRESHOLD) == SPI_RXFIFOFullThreshold_14) || \
  220. ((THRESHOLD) == SPI_RXFIFOFullThreshold_15) || \
  221. ((THRESHOLD) == SPI_RXFIFOFullThreshold_16))
  222. /**
  223. * @}
  224. */
  225. /** @defgroup SPI_TXFIFOEmptyThreshold
  226. * @{
  227. */
  228. #define SPI_TXFIFOEmptyThreshold_0 ((uint32_t)0x0000)
  229. #define SPI_TXFIFOEmptyThreshold_1 ((uint32_t)0x0001)
  230. #define SPI_TXFIFOEmptyThreshold_2 ((uint32_t)0x0002)
  231. #define SPI_TXFIFOEmptyThreshold_3 ((uint32_t)0x0003)
  232. #define SPI_TXFIFOEmptyThreshold_4 ((uint32_t)0x0004)
  233. #define SPI_TXFIFOEmptyThreshold_5 ((uint32_t)0x0005)
  234. #define SPI_TXFIFOEmptyThreshold_6 ((uint32_t)0x0006)
  235. #define SPI_TXFIFOEmptyThreshold_7 ((uint32_t)0x0007)
  236. #define SPI_TXFIFOEmptyThreshold_8 ((uint32_t)0x0008)
  237. #define SPI_TXFIFOEmptyThreshold_9 ((uint32_t)0x0009)
  238. #define SPI_TXFIFOEmptyThreshold_10 ((uint32_t)0x000A)
  239. #define SPI_TXFIFOEmptyThreshold_11 ((uint32_t)0x000B)
  240. #define SPI_TXFIFOEmptyThreshold_12 ((uint32_t)0x000C)
  241. #define SPI_TXFIFOEmptyThreshold_13 ((uint32_t)0x000D)
  242. #define SPI_TXFIFOEmptyThreshold_14 ((uint32_t)0x000E)
  243. #define SPI_TXFIFOEmptyThreshold_15 ((uint32_t)0x000F)
  244. #define IS_SPI_TX_FIFO_EMPTY_THRESHOLD(THRESHOLD) (((THRESHOLD) == SPI_TXFIFOEmptyThreshold_0) || \
  245. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_1) || \
  246. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_2) || \
  247. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_3) || \
  248. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_4) || \
  249. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_5) || \
  250. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_6) || \
  251. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_7) || \
  252. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_8) || \
  253. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_9) || \
  254. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_10) || \
  255. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_11) || \
  256. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_12) || \
  257. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_13) || \
  258. ((THRESHOLD) == SPI_TXFIFOEmptyThreshold_14) || \
  259. ((THRESHOLD) <= SPI_TXFIFOEmptyThreshold_15))
  260. /**
  261. * @}
  262. */
  263. /** @defgroup SPI_DMAReceiveLevel
  264. * @{
  265. */
  266. #define SPI_DMAReceiveLevel_1 ((uint32_t)0x0000)
  267. #define SPI_DMAReceiveLevel_2 ((uint32_t)0x0001)
  268. #define SPI_DMAReceiveLevel_3 ((uint32_t)0x0002)
  269. #define SPI_DMAReceiveLevel_4 ((uint32_t)0x0003)
  270. #define SPI_DMAReceiveLevel_5 ((uint32_t)0x0004)
  271. #define SPI_DMAReceiveLevel_6 ((uint32_t)0x0005)
  272. #define SPI_DMAReceiveLevel_7 ((uint32_t)0x0006)
  273. #define SPI_DMAReceiveLevel_8 ((uint32_t)0x0007)
  274. #define SPI_DMAReceiveLevel_9 ((uint32_t)0x0008)
  275. #define SPI_DMAReceiveLevel_10 ((uint32_t)0x0009)
  276. #define SPI_DMAReceiveLevel_11 ((uint32_t)0x000A)
  277. #define SPI_DMAReceiveLevel_12 ((uint32_t)0x000B)
  278. #define SPI_DMAReceiveLevel_13 ((uint32_t)0x000C)
  279. #define SPI_DMAReceiveLevel_14 ((uint32_t)0x000D)
  280. #define SPI_DMAReceiveLevel_15 ((uint32_t)0x000E)
  281. #define SPI_DMAReceiveLevel_16 ((uint32_t)0x000F)
  282. #define IS_SPI_DMA_RECEIVE_LEVEL(LEVEL) ((((int32_t)(LEVEL)) >= SPI_DMAReceiveLevel_1) && \
  283. (((int32_t)(LEVEL)) <= SPI_DMAReceiveLevel_16))
  284. /**
  285. * @}
  286. */
  287. /** @defgroup SPI_DMATransmitLevel
  288. * @{
  289. */
  290. #define SPI_DMATransmitLevel_0 ((uint32_t)0x0000)
  291. #define SPI_DMATransmitLevel_1 ((uint32_t)0x0001)
  292. #define SPI_DMATransmitLevel_2 ((uint32_t)0x0002)
  293. #define SPI_DMATransmitLevel_3 ((uint32_t)0x0003)
  294. #define SPI_DMATransmitLevel_4 ((uint32_t)0x0004)
  295. #define SPI_DMATransmitLevel_5 ((uint32_t)0x0005)
  296. #define SPI_DMATransmitLevel_6 ((uint32_t)0x0006)
  297. #define SPI_DMATransmitLevel_7 ((uint32_t)0x0007)
  298. #define SPI_DMATransmitLevel_8 ((uint32_t)0x0008)
  299. #define SPI_DMATransmitLevel_9 ((uint32_t)0x0009)
  300. #define SPI_DMATransmitLevel_10 ((uint32_t)0x000A)
  301. #define SPI_DMATransmitLevel_11 ((uint32_t)0x000B)
  302. #define SPI_DMATransmitLevel_12 ((uint32_t)0x000C)
  303. #define SPI_DMATransmitLevel_13 ((uint32_t)0x000D)
  304. #define SPI_DMATransmitLevel_14 ((uint32_t)0x000E)
  305. #define SPI_DMATransmitLevel_15 ((uint32_t)0x000F)
  306. #define IS_SPI_DMA_TRANSMIT_LEVEL(LEVEL) ((((int32_t)(LEVEL)) >= SPI_DMATransmitLevel_0) && \
  307. (((int32_t)(LEVEL)) <= SPI_DMATransmitLevel_15))
  308. /**
  309. * @}
  310. */
  311. /** @defgroup SPI_DMA_transfer_requests
  312. * @{
  313. */
  314. #define SPI_DMAReq_Rx ((uint32_t)0x0001)
  315. #define SPI_DMAReq_Tx ((uint32_t)0x0002)
  316. #define IS_SPI_DMAREQ(DMAREQ) ((((DMAREQ) & (uint32_t)0xFFFC) == (uint32_t)0x00) && \
  317. ((DMAREQ) != (uint32_t)0x00))
  318. /**
  319. * @}
  320. */
  321. /** @defgroup SPI_Interrupt Mask and Status Flag
  322. * @{
  323. */
  324. #define SPI_IT_TXE ((uint32_t)0x0001) //clear by hardware
  325. #define SPI_IT_TXOVF ((uint32_t)0x0002) //clear by read TXOICR register
  326. #define SPI_IT_RXF ((uint32_t)0x0010) //clear by hardware
  327. #define SPI_IT_RXOVF ((uint32_t)0x0008) //clear by read RXOICR register
  328. #define SPI_IT_RXUDF ((uint32_t)0x0004) //clear by read RXURCR register
  329. #define SPI_IT_MMC ((uint32_t)0x0020) //clear by read MSTICR register
  330. #define SPI_IT_All ((uint32_t)0x002E)
  331. #define IS_SPI_GET_IT(IT) (((IT) == SPI_IT_TXE) || \
  332. ((IT) == SPI_IT_TXOVF) || \
  333. ((IT) == SPI_IT_RXF) || \
  334. ((IT) == SPI_IT_RXUDF) || \
  335. ((IT) == SPI_IT_RXOVF) || \
  336. ((IT) == SPI_IT_MMC))
  337. #define SPI_FLAG_BSY ((uint32_t)0x0001)
  338. #define SPI_FLAG_TXNF ((uint32_t)0x0002) //clear by hardware
  339. #define SPI_FLAG_TXE ((uint32_t)0x0004) //clear by hardware
  340. #define SPI_FLAG_RXNE ((uint32_t)0x0008) //clear by hardware
  341. #define SPI_FLAG_RXF ((uint32_t)0x0010) //clear by hardware
  342. #define SPI_FLAG_TXERR ((uint32_t)0x0020) //read clear
  343. #define SPI_FLAG_DCERR ((uint32_t)0x0040) //read clear
  344. #define IS_SPI_GET_FLAG(FLAG) (((FLAG) == SPI_SR_RFNE) || \
  345. ((FLAG) == SPI_SR_RFF) || \
  346. ((FLAG) == SPI_SR_TFE) || \
  347. ((FLAG) == SPI_SR_TFNF) || \
  348. ((FLAG) == SPI_SR_BUSY))
  349. /**
  350. * @}
  351. */
  352. /** @defgroup NSM_Direction
  353. * @{
  354. */
  355. #define NSM_Direction_Data_Transmit ((uint32_t)(0x0001))
  356. #define NSM_Direction_Data_Receive ((uint32_t)(0x0002))
  357. #define IS_NSM_DIRECTION_MODE(MODE) (((MODE) == NSM_Direction_Data_Transmit) || \
  358. ((MODE) == NSM_Direction_Data_Receive))
  359. /**
  360. * @}
  361. */
  362. /** @defgroup NSM_TransferMode
  363. * @{
  364. */
  365. #define NSM_TransferMode_Non_Sequential ((uint32_t)(0x0001))
  366. #define NSM_TransferMode_Sequential ((uint32_t)(0x0002))
  367. #define IS_NSM_TRANSFER_MODE(MODE) (((MODE) == NSM_TransferMode_Non_Sequential) || \
  368. ((MODE) == NSM_TransferMode_Sequential))
  369. /**
  370. * @}
  371. */
  372. /** @defgroup NSM_DataSize
  373. * @{
  374. */
  375. #define NSM_DataSize_8b ((uint32_t)0x0007)
  376. #define NSM_DataSize_16b ((uint32_t)0x000F)
  377. #define IS_NSM_DATASIZE(DATASIZE) (((DATASIZE) == NSM_DataSize_8b) || \
  378. ((DATASIZE) == NSM_DataSize_16b))
  379. /**
  380. * @}
  381. */
  382. /** @defgroup NSM_ControlDataSize
  383. * @{
  384. */
  385. #define NSM_ControlDataSize_8b ((uint32_t)0x0007)
  386. #define NSM_ControlDataSize_16b ((uint32_t)0x000F)
  387. #define IS_NSM_CONTROL_DATASIZE(DATASIZE) (((DATASIZE) == NSM_ControlDataSize_8b) || \
  388. ((DATASIZE) == NSM_ControlDataSize_16b))
  389. /**
  390. * @}
  391. */
  392. void SPI_DeInit(SPI_TypeDef* SPIx);
  393. void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
  394. void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);
  395. void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
  396. void SPI_DMAInit(SPI_TypeDef* SPIx, SPI_DMAInitTypeDef* SPI_DMAInitStruct);
  397. void SPI_DMAStructInit(SPI_DMAInitTypeDef* SPI_DMAInitStruct);
  398. void SPI_DMACmd(SPI_TypeDef* SPIx, uint32_t SPI_DMAReq, FunctionalState NewState);
  399. void SPI_ITConfig(SPI_TypeDef* SPIx, uint32_t SPI_IT, FunctionalState NewState);
  400. void SPI_SendData(SPI_TypeDef* SPIx, uint16_t Data);
  401. uint16_t SPI_ReceiveData(SPI_TypeDef* SPIx);
  402. void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint32_t SPI_DataSize);
  403. void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint32_t SPI_Direction);
  404. ITStatus SPI_GetITStatus(SPI_TypeDef* SPIx, uint32_t SPI_IT);
  405. void SPI_ClearITPendingBit(SPI_TypeDef* SPIx, uint32_t SPI_IT);
  406. FlagStatus SPI_GetFlagStatus(SPI_TypeDef* SPIx, uint32_t SPI_FLAG);
  407. uint32_t SPI_GetFlagStatusReg(SPI_TypeDef* SPIx);
  408. FlagStatus SPI_IsBusy(SPI_TypeDef* SPIx);
  409. FlagStatus SPI_IsTXErr(SPI_TypeDef* SPIx);
  410. FlagStatus SPI_IsDataCollisionErr(SPI_TypeDef* SPIx);
  411. void SSP_Init(SPI_TypeDef* SPIx, SSP_InitTypeDef* SSP_InitStruct);
  412. void SSP_StructInit(SSP_InitTypeDef* SSP_InitStruct);
  413. void NSM_Init(SPI_TypeDef* SPIx, NSM_InitTypeDef* NSM_InitStruct);
  414. void NSM_StructInit(NSM_InitTypeDef* NSM_InitStruct);
  415. #ifdef __cplusplus
  416. }
  417. #endif
  418. /**
  419. * @}
  420. */
  421. #endif /*__MSSCPU_SPI_H */
  422. /************************** (C) COPYRIGHT Megahunt *****END OF FILE****/