fm33lc0xx_fl_spi.h 43 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252
  1. /**
  2. *******************************************************************************************************
  3. * @file fm33lc0xx_fl_spi.h
  4. * @author FMSH Application Team
  5. * @brief Head file of SPI FL Module
  6. *******************************************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) [2019] [Fudan Microelectronics]
  10. * THIS SOFTWARE is licensed under the Mulan PSL v1.
  11. * can use this software according to the terms and conditions of the Mulan PSL v1.
  12. * You may obtain a copy of Mulan PSL v1 at:
  13. * http://license.coscl.org.cn/MulanPSL
  14. * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
  16. * PURPOSE.
  17. * See the Mulan PSL v1 for more details.
  18. *
  19. *******************************************************************************************************
  20. */
  21. /* Define to prevent recursive inclusion---------------------------------------------------------------*/
  22. #ifndef __FM33LC0XX_FL_SPI_H
  23. #define __FM33LC0XX_FL_SPI_H
  24. #ifdef __cplusplus
  25. extern "C" {
  26. #endif
  27. /* Includes -------------------------------------------------------------------------------------------*/
  28. #include "fm33lc0xx_fl.h"
  29. /** @addtogroup FM33LC0XX_FL_Driver
  30. * @{
  31. */
  32. /** @defgroup SPI SPI
  33. * @brief SPI FL driver
  34. * @{
  35. */
  36. /* Exported types -------------------------------------------------------------------------------------*/
  37. /** @defgroup SPI_FL_ES_INIT SPI Exported Init structures
  38. * @{
  39. */
  40. /**
  41. * @brief FL SPI Init Sturcture definition
  42. */
  43. typedef struct
  44. {
  45. /*! 传输模式 单双工 */
  46. uint32_t transferMode;
  47. /*! 主从模式 */
  48. uint32_t mode;
  49. /*! 数据位宽 */
  50. uint32_t dataWidth;
  51. /*! 时钟极性 */
  52. uint32_t clockPolarity;
  53. /*! 时钟相位 */
  54. uint32_t clockPhase;
  55. /*! NSS 脚使能软件控制 */
  56. uint32_t softControl;
  57. /*! 通讯速率 */
  58. uint32_t baudRate;
  59. /*! Bit方向 */
  60. uint32_t bitOrder;
  61. } FL_SPI_InitTypeDef;
  62. /**
  63. * @}
  64. */
  65. /* Exported constants ---------------------------------------------------------------------------------*/
  66. /** @defgroup SPI_FL_Exported_Constants SPI Exported Constants
  67. * @{
  68. */
  69. #define SPI_CR1_IOSWAP_Pos (11U)
  70. #define SPI_CR1_IOSWAP_Msk (0x1U << SPI_CR1_IOSWAP_Pos)
  71. #define SPI_CR1_IOSWAP SPI_CR1_IOSWAP_Msk
  72. #define SPI_CR1_MSPA_Pos (10U)
  73. #define SPI_CR1_MSPA_Msk (0x1U << SPI_CR1_MSPA_Pos)
  74. #define SPI_CR1_MSPA SPI_CR1_MSPA_Msk
  75. #define SPI_CR1_SSPA_Pos (9U)
  76. #define SPI_CR1_SSPA_Msk (0x1U << SPI_CR1_SSPA_Pos)
  77. #define SPI_CR1_SSPA SPI_CR1_SSPA_Msk
  78. #define SPI_CR1_MM_Pos (8U)
  79. #define SPI_CR1_MM_Msk (0x1U << SPI_CR1_MM_Pos)
  80. #define SPI_CR1_MM SPI_CR1_MM_Msk
  81. #define SPI_CR1_WAIT_Pos (6U)
  82. #define SPI_CR1_WAIT_Msk (0x3U << SPI_CR1_WAIT_Pos)
  83. #define SPI_CR1_WAIT SPI_CR1_WAIT_Msk
  84. #define SPI_CR1_BAUD_Pos (3U)
  85. #define SPI_CR1_BAUD_Msk (0x7U << SPI_CR1_BAUD_Pos)
  86. #define SPI_CR1_BAUD SPI_CR1_BAUD_Msk
  87. #define SPI_CR1_LSBF_Pos (2U)
  88. #define SPI_CR1_LSBF_Msk (0x1U << SPI_CR1_LSBF_Pos)
  89. #define SPI_CR1_LSBF SPI_CR1_LSBF_Msk
  90. #define SPI_CR1_CPOL_Pos (1U)
  91. #define SPI_CR1_CPOL_Msk (0x1U << SPI_CR1_CPOL_Pos)
  92. #define SPI_CR1_CPOL SPI_CR1_CPOL_Msk
  93. #define SPI_CR1_CPHA_Pos (0U)
  94. #define SPI_CR1_CPHA_Msk (0x1U << SPI_CR1_CPHA_Pos)
  95. #define SPI_CR1_CPHA SPI_CR1_CPHA_Msk
  96. #define SPI_CR2_DUMMY_EN_Pos (15U)
  97. #define SPI_CR2_DUMMY_EN_Msk (0x1U << SPI_CR2_DUMMY_EN_Pos)
  98. #define SPI_CR2_DUMMY_EN SPI_CR2_DUMMY_EN_Msk
  99. #define SPI_CR2_RXO_Pos (11U)
  100. #define SPI_CR2_RXO_Msk (0x1U << SPI_CR2_RXO_Pos)
  101. #define SPI_CR2_RXO SPI_CR2_RXO_Msk
  102. #define SPI_CR2_DLEN_Pos (9U)
  103. #define SPI_CR2_DLEN_Msk (0x3U << SPI_CR2_DLEN_Pos)
  104. #define SPI_CR2_DLEN SPI_CR2_DLEN_Msk
  105. #define SPI_CR2_HALFDUPLEX_Pos (8U)
  106. #define SPI_CR2_HALFDUPLEX_Msk (0x1U << SPI_CR2_HALFDUPLEX_Pos)
  107. #define SPI_CR2_HALFDUPLEX SPI_CR2_HALFDUPLEX_Msk
  108. #define SPI_CR2_HD_RW_Pos (7U)
  109. #define SPI_CR2_HD_RW_Msk (0x1U << SPI_CR2_HD_RW_Pos)
  110. #define SPI_CR2_HD_RW SPI_CR2_HD_RW_Msk
  111. #define SPI_CR2_CMD8B_Pos (6U)
  112. #define SPI_CR2_CMD8B_Msk (0x1U << SPI_CR2_CMD8B_Pos)
  113. #define SPI_CR2_CMD8B SPI_CR2_CMD8B_Msk
  114. #define SPI_CR2_SSNM_Pos (5U)
  115. #define SPI_CR2_SSNM_Msk (0x1U << SPI_CR2_SSNM_Pos)
  116. #define SPI_CR2_SSNM SPI_CR2_SSNM_Msk
  117. #define SPI_CR2_TXO_AC_Pos (4U)
  118. #define SPI_CR2_TXO_AC_Msk (0x1U << SPI_CR2_TXO_AC_Pos)
  119. #define SPI_CR2_TXO_AC SPI_CR2_TXO_AC_Msk
  120. #define SPI_CR2_TXO_Pos (3U)
  121. #define SPI_CR2_TXO_Msk (0x1U << SPI_CR2_TXO_Pos)
  122. #define SPI_CR2_TXO SPI_CR2_TXO_Msk
  123. #define SPI_CR2_SSN_Pos (2U)
  124. #define SPI_CR2_SSN_Msk (0x1U << SPI_CR2_SSN_Pos)
  125. #define SPI_CR2_SSN SPI_CR2_SSN_Msk
  126. #define SPI_CR2_SSNSEN_Pos (1U)
  127. #define SPI_CR2_SSNSEN_Msk (0x1U << SPI_CR2_SSNSEN_Pos)
  128. #define SPI_CR2_SSNSEN SPI_CR2_SSNSEN_Msk
  129. #define SPI_CR2_SPIEN_Pos (0U)
  130. #define SPI_CR2_SPIEN_Msk (0x1U << SPI_CR2_SPIEN_Pos)
  131. #define SPI_CR2_SPIEN SPI_CR2_SPIEN_Msk
  132. #define SPI_CR3_TXBFC_Pos (3U)
  133. #define SPI_CR3_TXBFC_Msk (0x1U << SPI_CR3_TXBFC_Pos)
  134. #define SPI_CR3_TXBFC SPI_CR3_TXBFC_Msk
  135. #define SPI_CR3_RXBFC_Pos (2U)
  136. #define SPI_CR3_RXBFC_Msk (0x1U << SPI_CR3_RXBFC_Pos)
  137. #define SPI_CR3_RXBFC SPI_CR3_RXBFC_Msk
  138. #define SPI_CR3_MERRC_Pos (1U)
  139. #define SPI_CR3_MERRC_Msk (0x1U << SPI_CR3_MERRC_Pos)
  140. #define SPI_CR3_MERRC SPI_CR3_MERRC_Msk
  141. #define SPI_CR3_SERRC_Pos (0U)
  142. #define SPI_CR3_SERRC_Msk (0x1U << SPI_CR3_SERRC_Pos)
  143. #define SPI_CR3_SERRC SPI_CR3_SERRC_Msk
  144. #define SPI_IER_ERRIE_Pos (2U)
  145. #define SPI_IER_ERRIE_Msk (0x1U << SPI_IER_ERRIE_Pos)
  146. #define SPI_IER_ERRIE SPI_IER_ERRIE_Msk
  147. #define SPI_IER_TXIE_Pos (1U)
  148. #define SPI_IER_TXIE_Msk (0x1U << SPI_IER_TXIE_Pos)
  149. #define SPI_IER_TXIE SPI_IER_TXIE_Msk
  150. #define SPI_IER_RXIE_Pos (0U)
  151. #define SPI_IER_RXIE_Msk (0x1U << SPI_IER_RXIE_Pos)
  152. #define SPI_IER_RXIE SPI_IER_RXIE_Msk
  153. #define SPI_ISR_DCN_TX_Pos (12U)
  154. #define SPI_ISR_DCN_TX_Msk (0x1U << SPI_ISR_DCN_TX_Pos)
  155. #define SPI_ISR_DCN_TX SPI_ISR_DCN_TX_Msk
  156. #define SPI_ISR_RXCOL_Pos (10U)
  157. #define SPI_ISR_RXCOL_Msk (0x1U << SPI_ISR_RXCOL_Pos)
  158. #define SPI_ISR_RXCOL SPI_ISR_RXCOL_Msk
  159. #define SPI_ISR_TXCOL_Pos (9U)
  160. #define SPI_ISR_TXCOL_Msk (0x1U << SPI_ISR_TXCOL_Pos)
  161. #define SPI_ISR_TXCOL SPI_ISR_TXCOL_Msk
  162. #define SPI_ISR_BUSY_Pos (8U)
  163. #define SPI_ISR_BUSY_Msk (0x1U << SPI_ISR_BUSY_Pos)
  164. #define SPI_ISR_BUSY SPI_ISR_BUSY_Msk
  165. #define SPI_ISR_MERR_Pos (6U)
  166. #define SPI_ISR_MERR_Msk (0x1U << SPI_ISR_MERR_Pos)
  167. #define SPI_ISR_MERR SPI_ISR_MERR_Msk
  168. #define SPI_ISR_SERR_Pos (5U)
  169. #define SPI_ISR_SERR_Msk (0x1U << SPI_ISR_SERR_Pos)
  170. #define SPI_ISR_SERR SPI_ISR_SERR_Msk
  171. #define SPI_ISR_TXBE_Pos (1U)
  172. #define SPI_ISR_TXBE_Msk (0x1U << SPI_ISR_TXBE_Pos)
  173. #define SPI_ISR_TXBE SPI_ISR_TXBE_Msk
  174. #define SPI_ISR_RXBF_Pos (0U)
  175. #define SPI_ISR_RXBF_Msk (0x1U << SPI_ISR_RXBF_Pos)
  176. #define SPI_ISR_RXBF SPI_ISR_RXBF_Msk
  177. #define FL_SPI_MASTER_SAMPLING_NORMAL (0x0U << SPI_CR1_MSPA_Pos)
  178. #define FL_SPI_MASTER_SAMPLING_DELAY_HALFCLK (0x1U << SPI_CR1_MSPA_Pos)
  179. #define FL_SPI_SLAVE_SAMPLING_NORMAL (0x0U << SPI_CR1_SSPA_Pos)
  180. #define FL_SPI_SLAVE_SAMPLING_ADVANCE_HALFCLK (0x1U << SPI_CR1_SSPA_Pos)
  181. #define FL_SPI_WORK_MODE_SLAVE (0x0U << SPI_CR1_MM_Pos)
  182. #define FL_SPI_WORK_MODE_MASTER (0x1U << SPI_CR1_MM_Pos)
  183. #define FL_SPI_SEND_WAIT_1 (0x0U << SPI_CR1_WAIT_Pos)
  184. #define FL_SPI_SEND_WAIT_2 (0x1U << SPI_CR1_WAIT_Pos)
  185. #define FL_SPI_SEND_WAIT_3 (0x2U << SPI_CR1_WAIT_Pos)
  186. #define FL_SPI_SEND_WAIT_4 (0x3U << SPI_CR1_WAIT_Pos)
  187. #define FL_SPI_CLK_DIV2 (0x0U << SPI_CR1_BAUD_Pos)
  188. #define FL_SPI_CLK_DIV4 (0x1U << SPI_CR1_BAUD_Pos)
  189. #define FL_SPI_CLK_DIV8 (0x2U << SPI_CR1_BAUD_Pos)
  190. #define FL_SPI_CLK_DIV16 (0x3U << SPI_CR1_BAUD_Pos)
  191. #define FL_SPI_CLK_DIV32 (0x4U << SPI_CR1_BAUD_Pos)
  192. #define FL_SPI_CLK_DIV64 (0x5U << SPI_CR1_BAUD_Pos)
  193. #define FL_SPI_CLK_DIV128 (0x6U << SPI_CR1_BAUD_Pos)
  194. #define FL_SPI_CLK_DIV256 (0x7U << SPI_CR1_BAUD_Pos)
  195. #define FL_SPI_BAUDRATE_DIV2 (0x0U << SPI_CR1_BAUD_Pos)
  196. #define FL_SPI_BAUDRATE_DIV4 (0x1U << SPI_CR1_BAUD_Pos)
  197. #define FL_SPI_BAUDRATE_DIV8 (0x2U << SPI_CR1_BAUD_Pos)
  198. #define FL_SPI_BAUDRATE_DIV16 (0x3U << SPI_CR1_BAUD_Pos)
  199. #define FL_SPI_BAUDRATE_DIV32 (0x4U << SPI_CR1_BAUD_Pos)
  200. #define FL_SPI_BAUDRATE_DIV64 (0x5U << SPI_CR1_BAUD_Pos)
  201. #define FL_SPI_BAUDRATE_DIV128 (0x6U << SPI_CR1_BAUD_Pos)
  202. #define FL_SPI_BAUDRATE_DIV256 (0x7U << SPI_CR1_BAUD_Pos)
  203. #define FL_SPI_BIT_ORDER_MSB_FIRST (0x0U << SPI_CR1_LSBF_Pos)
  204. #define FL_SPI_BIT_ORDER_LSB_FIRST (0x1U << SPI_CR1_LSBF_Pos)
  205. #define FL_SPI_POLARITY_NORMAL (0x0U << SPI_CR1_CPOL_Pos)
  206. #define FL_SPI_POLARITY_INVERT (0x1U << SPI_CR1_CPOL_Pos)
  207. #define FL_SPI_PHASE_EDGE1 (0x0U << SPI_CR1_CPHA_Pos)
  208. #define FL_SPI_PHASE_EDGE2 (0x1U << SPI_CR1_CPHA_Pos)
  209. #define FL_SPI_DATA_WIDTH_8B (0x0U << SPI_CR2_DLEN_Pos)
  210. #define FL_SPI_DATA_WIDTH_16B (0x1U << SPI_CR2_DLEN_Pos)
  211. #define FL_SPI_DATA_WIDTH_24B (0x2U << SPI_CR2_DLEN_Pos)
  212. #define FL_SPI_DATA_WIDTH_32B (0x3U << SPI_CR2_DLEN_Pos)
  213. #define FL_SPI_TRANSFER_MODE_FULL_DUPLEX (0x0U << SPI_CR2_HALFDUPLEX_Pos)
  214. #define FL_SPI_TRANSFER_MODE_HALF_DUPLEX (0x1U << SPI_CR2_HALFDUPLEX_Pos)
  215. #define FL_SPI_HALF_DUPLEX_TX (0x0U << SPI_CR2_HD_RW_Pos)
  216. #define FL_SPI_HALF_DUPLEX_RX (0x1U << SPI_CR2_HD_RW_Pos)
  217. #define FL_SPI_HALF_DUPLEX_CMDLEN_DLEN (0x0U << SPI_CR2_CMD8B_Pos)
  218. #define FL_SPI_HALF_DUPLEX_CMDLEN_8B (0x1U << SPI_CR2_CMD8B_Pos)
  219. #define FL_SPI_HALFDUPLEX_CMDLEN_DLEN (0x0U << SPI_CR2_CMD8B_Pos)
  220. #define FL_SPI_HALFDUPLEX_CMDLEN_8B (0x1U << SPI_CR2_CMD8B_Pos)
  221. #define FL_SPI_HARDWARE_SSN_AUTO_HIGH (0x0U << SPI_CR2_SSNM_Pos)
  222. #define FL_SPI_HARDWARE_SSN_KEEP_LOW (0x1U << SPI_CR2_SSNM_Pos)
  223. #define FL_SPI_SSN_LOW (0x0U << SPI_CR2_SSN_Pos)
  224. #define FL_SPI_SSN_HIGH (0x1U << SPI_CR2_SSN_Pos)
  225. #define FL_SPI_FRAME_MODE_CMD (0x0U << SPI_ISR_DCN_TX_Pos)
  226. #define FL_SPI_FRAME_MODE_DATA (0x1U << SPI_ISR_DCN_TX_Pos)
  227. /**
  228. * @}
  229. */
  230. /* Exported functions ---------------------------------------------------------------------------------*/
  231. /** @defgroup SPI_FL_Exported_Functions SPI Exported Functions
  232. * @{
  233. */
  234. /**
  235. * @brief Enable SPI IO Pin Swap
  236. * @rmtoll CR1 IOSWAP FL_SPI_EnablePinSwap
  237. * @param SPIx SPI instance
  238. * @retval None
  239. */
  240. __STATIC_INLINE void FL_SPI_EnablePinSwap(SPI_Type *SPIx)
  241. {
  242. SET_BIT(SPIx->CR1, SPI_CR1_IOSWAP_Msk);
  243. }
  244. /**
  245. * @brief Get SPI IO Pin Swap State
  246. * @rmtoll CR1 IOSWAP FL_SPI_IsEnabledPinSwap
  247. * @param SPIx SPI instance
  248. * @retval State of bit (1 or 0).
  249. */
  250. __STATIC_INLINE uint32_t FL_SPI_IsEnabledPinSwap(SPI_Type *SPIx)
  251. {
  252. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_IOSWAP_Msk) == SPI_CR1_IOSWAP_Msk);
  253. }
  254. /**
  255. * @brief Disable SPI IO Pin Swap
  256. * @rmtoll CR1 IOSWAP FL_SPI_DisablePinSwap
  257. * @param SPIx SPI instance
  258. * @retval None
  259. */
  260. __STATIC_INLINE void FL_SPI_DisablePinSwap(SPI_Type *SPIx)
  261. {
  262. CLEAR_BIT(SPIx->CR1, SPI_CR1_IOSWAP_Msk);
  263. }
  264. /**
  265. * @brief Set Master Sampling Position Adjustment
  266. * @rmtoll CR1 MSPA FL_SPI_SetMasterSamplingAdjust
  267. * @param SPIx SPI instance
  268. * @param adjust This parameter can be one of the following values:
  269. * @arg @ref FL_SPI_MASTER_SAMPLING_NORMAL
  270. * @arg @ref FL_SPI_MASTER_SAMPLING_DELAY_HALFCLK
  271. * @retval None
  272. */
  273. __STATIC_INLINE void FL_SPI_SetMasterSamplingAdjust(SPI_Type *SPIx, uint32_t adjust)
  274. {
  275. MODIFY_REG(SPIx->CR1, SPI_CR1_MSPA_Msk, adjust);
  276. }
  277. /**
  278. * @brief Get Master Sampling Position Adjustment
  279. * @rmtoll CR1 MSPA FL_SPI_GetMasterSamplingAdjust
  280. * @param SPIx SPI instance
  281. * @retval Returned value can be one of the following values:
  282. * @arg @ref FL_SPI_MASTER_SAMPLING_NORMAL
  283. * @arg @ref FL_SPI_MASTER_SAMPLING_DELAY_HALFCLK
  284. */
  285. __STATIC_INLINE uint32_t FL_SPI_GetMasterSamplingAdjust(SPI_Type *SPIx)
  286. {
  287. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_MSPA_Msk));
  288. }
  289. /**
  290. * @brief Set Slave Sending Position Adjustment
  291. * @rmtoll CR1 SSPA FL_SPI_SetSlaveSamplingAdjust
  292. * @param SPIx SPI instance
  293. * @param adjust This parameter can be one of the following values:
  294. * @arg @ref FL_SPI_SLAVE_SAMPLING_NORMAL
  295. * @arg @ref FL_SPI_SLAVE_SAMPLING_ADVANCE_HALFCLK
  296. * @retval None
  297. */
  298. __STATIC_INLINE void FL_SPI_SetSlaveSamplingAdjust(SPI_Type *SPIx, uint32_t adjust)
  299. {
  300. MODIFY_REG(SPIx->CR1, SPI_CR1_SSPA_Msk, adjust);
  301. }
  302. /**
  303. * @brief Get Slave Sending Position Adjustment
  304. * @rmtoll CR1 SSPA FL_SPI_GetSlaveSamplingAdjust
  305. * @param SPIx SPI instance
  306. * @retval Returned value can be one of the following values:
  307. * @arg @ref FL_SPI_SLAVE_SAMPLING_NORMAL
  308. * @arg @ref FL_SPI_SLAVE_SAMPLING_ADVANCE_HALFCLK
  309. */
  310. __STATIC_INLINE uint32_t FL_SPI_GetSlaveSamplingAdjust(SPI_Type *SPIx)
  311. {
  312. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_SSPA_Msk));
  313. }
  314. /**
  315. * @brief Set SPI Working Mode
  316. * @rmtoll CR1 MM FL_SPI_SetWorkMode
  317. * @param SPIx SPI instance
  318. * @param mode This parameter can be one of the following values:
  319. * @arg @ref FL_SPI_WORK_MODE_SLAVE
  320. * @arg @ref FL_SPI_WORK_MODE_MASTER
  321. * @retval None
  322. */
  323. __STATIC_INLINE void FL_SPI_SetWorkMode(SPI_Type *SPIx, uint32_t mode)
  324. {
  325. MODIFY_REG(SPIx->CR1, SPI_CR1_MM_Msk, mode);
  326. }
  327. /**
  328. * @brief Get SPI Working Mode
  329. * @rmtoll CR1 MM FL_SPI_GetWorkMode
  330. * @param SPIx SPI instance
  331. * @retval Returned value can be one of the following values:
  332. * @arg @ref FL_SPI_WORK_MODE_SLAVE
  333. * @arg @ref FL_SPI_WORK_MODE_MASTER
  334. */
  335. __STATIC_INLINE uint32_t FL_SPI_GetWorkMode(SPI_Type *SPIx)
  336. {
  337. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_MM_Msk));
  338. }
  339. /**
  340. * @brief Set SPI Send Wait Cycle Length in Master Mode
  341. * @rmtoll CR1 WAIT FL_SPI_SetSendWait
  342. * @param SPIx SPI instance
  343. * @param wait This parameter can be one of the following values:
  344. * @arg @ref FL_SPI_SEND_WAIT_1
  345. * @arg @ref FL_SPI_SEND_WAIT_2
  346. * @arg @ref FL_SPI_SEND_WAIT_3
  347. * @arg @ref FL_SPI_SEND_WAIT_4
  348. * @retval None
  349. */
  350. __STATIC_INLINE void FL_SPI_SetSendWait(SPI_Type *SPIx, uint32_t wait)
  351. {
  352. MODIFY_REG(SPIx->CR1, SPI_CR1_WAIT_Msk, wait);
  353. }
  354. /**
  355. * @brief Get SPI Send Wait Cycle Length in Master Mode
  356. * @rmtoll CR1 WAIT FL_SPI_GetSendWait
  357. * @param SPIx SPI instance
  358. * @retval Returned value can be one of the following values:
  359. */
  360. __STATIC_INLINE uint32_t FL_SPI_GetSendWait(SPI_Type *SPIx)
  361. {
  362. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_WAIT_Msk));
  363. }
  364. /**
  365. * @brief Set SPI Baudrate in Master Mode
  366. * @rmtoll CR1 BAUD FL_SPI_SetClockDivision
  367. * @param SPIx SPI instance
  368. * @param clock This parameter can be one of the following values:
  369. * @arg @ref FL_SPI_CLK_DIV2
  370. * @arg @ref FL_SPI_CLK_DIV4
  371. * @arg @ref FL_SPI_CLK_DIV8
  372. * @arg @ref FL_SPI_CLK_DIV16
  373. * @arg @ref FL_SPI_CLK_DIV32
  374. * @arg @ref FL_SPI_CLK_DIV64
  375. * @arg @ref FL_SPI_CLK_DIV128
  376. * @arg @ref FL_SPI_CLK_DIV256
  377. * @retval None
  378. */
  379. __STATIC_INLINE void FL_SPI_SetClockDivision(SPI_Type *SPIx, uint32_t clock)
  380. {
  381. MODIFY_REG(SPIx->CR1, SPI_CR1_BAUD_Msk, clock);
  382. }
  383. /**
  384. * @brief Get SPI Baudrate in Master Mode
  385. * @rmtoll CR1 BAUD FL_SPI_GetClockDivision
  386. * @param SPIx SPI instance
  387. * @retval Returned value can be one of the following values:
  388. * @arg @ref FL_SPI_BAUDRATE_DIV2
  389. * @arg @ref FL_SPI_BAUDRATE_DIV4
  390. * @arg @ref FL_SPI_BAUDRATE_DIV8
  391. * @arg @ref FL_SPI_BAUDRATE_DIV16
  392. * @arg @ref FL_SPI_BAUDRATE_DIV32
  393. * @arg @ref FL_SPI_BAUDRATE_DIV64
  394. * @arg @ref FL_SPI_BAUDRATE_DIV128
  395. * @arg @ref FL_SPI_BAUDRATE_DIV256
  396. */
  397. __STATIC_INLINE uint32_t FL_SPI_GetClockDivision(SPI_Type *SPIx)
  398. {
  399. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_BAUD_Msk));
  400. }
  401. /**
  402. * @brief Set SPI Bit Order
  403. * @rmtoll CR1 LSBF FL_SPI_SetBitOrder
  404. * @param SPIx SPI instance
  405. * @param bitOrder This parameter can be one of the following values:
  406. * @arg @ref FL_SPI_BIT_ORDER_MSB_FIRST
  407. * @arg @ref FL_SPI_BIT_ORDER_LSB_FIRST
  408. * @retval None
  409. */
  410. __STATIC_INLINE void FL_SPI_SetBitOrder(SPI_Type *SPIx, uint32_t bitOrder)
  411. {
  412. MODIFY_REG(SPIx->CR1, SPI_CR1_LSBF_Msk, bitOrder);
  413. }
  414. /**
  415. * @brief Get SPI Bit Order
  416. * @rmtoll CR1 LSBF FL_SPI_GetBitOrder
  417. * @param SPIx SPI instance
  418. * @retval Returned value can be one of the following values:
  419. * @arg @ref FL_SPI_BIT_ORDER_MSB_FIRST
  420. * @arg @ref FL_SPI_BIT_ORDER_LSB_FIRST
  421. */
  422. __STATIC_INLINE uint32_t FL_SPI_GetBitOrder(SPI_Type *SPIx)
  423. {
  424. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_LSBF_Msk));
  425. }
  426. /**
  427. * @brief Set SPI Clock Polarity
  428. * @rmtoll CR1 CPOL FL_SPI_SetClockPolarity
  429. * @param SPIx SPI instance
  430. * @param polarity This parameter can be one of the following values:
  431. * @arg @ref FL_SPI_POLARITY_NORMAL
  432. * @arg @ref FL_SPI_POLARITY_INVERT
  433. * @retval None
  434. */
  435. __STATIC_INLINE void FL_SPI_SetClockPolarity(SPI_Type *SPIx, uint32_t polarity)
  436. {
  437. MODIFY_REG(SPIx->CR1, SPI_CR1_CPOL_Msk, polarity);
  438. }
  439. /**
  440. * @brief Get SPI Clock Polarity
  441. * @rmtoll CR1 CPOL FL_SPI_GetClockPolarity
  442. * @param SPIx SPI instance
  443. * @retval Returned value can be one of the following values:
  444. * @arg @ref FL_SPI_POLARITY_NORMAL
  445. * @arg @ref FL_SPI_POLARITY_INVERT
  446. */
  447. __STATIC_INLINE uint32_t FL_SPI_GetClockPolarity(SPI_Type *SPIx)
  448. {
  449. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPOL_Msk));
  450. }
  451. /**
  452. * @brief Set SPI Clock Phase
  453. * @rmtoll CR1 CPHA FL_SPI_SetClockPhase
  454. * @param SPIx SPI instance
  455. * @param phase This parameter can be one of the following values:
  456. * @arg @ref FL_SPI_PHASE_EDGE1
  457. * @arg @ref FL_SPI_PHASE_EDGE2
  458. * @retval None
  459. */
  460. __STATIC_INLINE void FL_SPI_SetClockPhase(SPI_Type *SPIx, uint32_t phase)
  461. {
  462. MODIFY_REG(SPIx->CR1, SPI_CR1_CPHA_Msk, phase);
  463. }
  464. /**
  465. * @brief Get SPI Clock Phase
  466. * @rmtoll CR1 CPHA FL_SPI_GetClockPhase
  467. * @param SPIx SPI instance
  468. * @retval Returned value can be one of the following values:
  469. * @arg @ref FL_SPI_PHASE_EDGE1
  470. * @arg @ref FL_SPI_PHASE_EDGE2
  471. */
  472. __STATIC_INLINE uint32_t FL_SPI_GetClockPhase(SPI_Type *SPIx)
  473. {
  474. return (uint32_t)(READ_BIT(SPIx->CR1, SPI_CR1_CPHA_Msk));
  475. }
  476. /**
  477. * @brief Enable SPI Dummy Cycle Setting Under 4-lines Half Duplex Mode
  478. * @rmtoll CR2 DUMMY_EN FL_SPI_EnableDummyCycle
  479. * @param SPIx SPI instance
  480. * @retval None
  481. */
  482. __STATIC_INLINE void FL_SPI_EnableDummyCycle(SPI_Type *SPIx)
  483. {
  484. SET_BIT(SPIx->CR2, SPI_CR2_DUMMY_EN_Msk);
  485. }
  486. /**
  487. * @brief Disable SPI Dummy Cycle Setting Under 4-lines Half Duplex Mode
  488. * @rmtoll CR2 DUMMY_EN FL_SPI_DisableDummyCycle
  489. * @param SPIx SPI instance
  490. * @retval None
  491. */
  492. __STATIC_INLINE void FL_SPI_DisableDummyCycle(SPI_Type *SPIx)
  493. {
  494. CLEAR_BIT(SPIx->CR2, SPI_CR2_DUMMY_EN_Msk);
  495. }
  496. /**
  497. * @brief Get SPI Dummy Cycle Mode Setting
  498. * @rmtoll CR2 DUMMY_EN FL_SPI_IsEnabledDummyCycle
  499. * @param SPIx SPI instance
  500. * @retval State of bit (1 or 0).
  501. */
  502. __STATIC_INLINE uint32_t FL_SPI_IsEnabledDummyCycle(SPI_Type *SPIx)
  503. {
  504. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_DUMMY_EN_Msk) == SPI_CR2_DUMMY_EN_Msk);
  505. }
  506. /**
  507. * @brief Enable SPI Receive Only Mode
  508. * @rmtoll CR2 RXO FL_SPI_EnableRXOnlyMode
  509. * @param SPIx SPI instance
  510. * @retval None
  511. */
  512. __STATIC_INLINE void FL_SPI_EnableRXOnlyMode(SPI_Type *SPIx)
  513. {
  514. SET_BIT(SPIx->CR2, SPI_CR2_RXO_Msk);
  515. }
  516. /**
  517. * @brief Disable SPI Receive Only Mode Setting
  518. * @rmtoll CR2 RXO FL_SPI_DisableRXOnlyMode
  519. * @param SPIx SPI instance
  520. * @retval None
  521. */
  522. __STATIC_INLINE void FL_SPI_DisableRXOnlyMode(SPI_Type *SPIx)
  523. {
  524. CLEAR_BIT(SPIx->CR2, SPI_CR2_RXO_Msk);
  525. }
  526. /**
  527. * @brief Get SPI Receive Only Mode state
  528. * @rmtoll CR2 RXO FL_SPI_IsEnabledRXOnlyMode
  529. * @param SPIx SPI instance
  530. * @retval State of bit (1 or 0).
  531. */
  532. __STATIC_INLINE uint32_t FL_SPI_IsEnabledRXOnlyMode(SPI_Type *SPIx)
  533. {
  534. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_RXO_Msk) == SPI_CR2_RXO_Msk);
  535. }
  536. /**
  537. * @brief Set SPI Data Width
  538. * @rmtoll CR2 DLEN FL_SPI_SetDataWidth
  539. * @param SPIx SPI instance
  540. * @param width This parameter can be one of the following values:
  541. * @arg @ref FL_SPI_DATA_WIDTH_8B
  542. * @arg @ref FL_SPI_DATA_WIDTH_16B
  543. * @arg @ref FL_SPI_DATA_WIDTH_24B
  544. * @arg @ref FL_SPI_DATA_WIDTH_32B
  545. * @retval None
  546. */
  547. __STATIC_INLINE void FL_SPI_SetDataWidth(SPI_Type *SPIx, uint32_t width)
  548. {
  549. MODIFY_REG(SPIx->CR2, SPI_CR2_DLEN_Msk, width);
  550. }
  551. /**
  552. * @brief Get SPI Data Width
  553. * @rmtoll CR2 DLEN FL_SPI_GetDataWidth
  554. * @param SPIx SPI instance
  555. * @retval Returned value can be one of the following values:
  556. * @arg @ref FL_SPI_DATA_WIDTH_8B
  557. * @arg @ref FL_SPI_DATA_WIDTH_16B
  558. * @arg @ref FL_SPI_DATA_WIDTH_24B
  559. * @arg @ref FL_SPI_DATA_WIDTH_32B
  560. */
  561. __STATIC_INLINE uint32_t FL_SPI_GetDataWidth(SPI_Type *SPIx)
  562. {
  563. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_DLEN_Msk));
  564. }
  565. /**
  566. * @brief Set SPI Transfer Mode
  567. * @rmtoll CR2 HALFDUPLEX FL_SPI_SetTransferMode
  568. * @param SPIx SPI instance
  569. * @param mode This parameter can be one of the following values:
  570. * @arg @ref FL_SPI_TRANSFER_MODE_FULL_DUPLEX
  571. * @arg @ref FL_SPI_TRANSFER_MODE_HALF_DUPLEX
  572. * @retval None
  573. */
  574. __STATIC_INLINE void FL_SPI_SetTransferMode(SPI_Type *SPIx, uint32_t mode)
  575. {
  576. MODIFY_REG(SPIx->CR2, SPI_CR2_HALFDUPLEX_Msk, mode);
  577. }
  578. /**
  579. * @brief Get SPI Transfer Mode
  580. * @rmtoll CR2 HALFDUPLEX FL_SPI_GetTransferMode
  581. * @param SPIx SPI instance
  582. * @retval Returned value can be one of the following values:
  583. * @arg @ref FL_SPI_TRANSFER_MODE_FULL_DUPLEX
  584. * @arg @ref FL_SPI_TRANSFER_MODE_HALF_DUPLEX
  585. */
  586. __STATIC_INLINE uint32_t FL_SPI_GetTransferMode(SPI_Type *SPIx)
  587. {
  588. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_HALFDUPLEX_Msk));
  589. }
  590. /**
  591. * @brief Set SPI Transfer Direction Under Half-Duplex Mode
  592. * @rmtoll CR2 HD_RW FL_SPI_SetTransferDirection
  593. * @param SPIx SPI instance
  594. * @param direction This parameter can be one of the following values:
  595. * @arg @ref FL_SPI_HALF_DUPLEX_TX
  596. * @arg @ref FL_SPI_HALF_DUPLEX_RX
  597. * @retval None
  598. */
  599. __STATIC_INLINE void FL_SPI_SetTransferDirection(SPI_Type *SPIx, uint32_t direction)
  600. {
  601. MODIFY_REG(SPIx->CR2, SPI_CR2_HD_RW_Msk, direction);
  602. }
  603. /**
  604. * @brief Get SPI Transfer Direction Under Half-Duplex Mode
  605. * @rmtoll CR2 HD_RW FL_SPI_GetTransferDirection
  606. * @param SPIx SPI instance
  607. * @retval Returned value can be one of the following values:
  608. * @arg @ref FL_SPI_HALF_DUPLEX_TX
  609. * @arg @ref FL_SPI_HALF_DUPLEX_RX
  610. */
  611. __STATIC_INLINE uint32_t FL_SPI_GetTransferDirection(SPI_Type *SPIx)
  612. {
  613. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_HD_RW_Msk));
  614. }
  615. /**
  616. * @brief Set Command Frame Length Under Half-Duplex Mode
  617. * @rmtoll CR2 CMD8B FL_SPI_SetHalfDuplexCommandLength
  618. * @param SPIx SPI instance
  619. * @param mode This parameter can be one of the following values:
  620. * @arg @ref FL_SPI_HALF_DUPLEX_CMDLEN_DLEN
  621. * @arg @ref FL_SPI_HALF_DUPLEX_CMDLEN_8B
  622. * @retval None
  623. */
  624. __STATIC_INLINE void FL_SPI_SetHalfDuplexCommandLength(SPI_Type *SPIx, uint32_t mode)
  625. {
  626. MODIFY_REG(SPIx->CR2, SPI_CR2_CMD8B_Msk, mode);
  627. }
  628. /**
  629. * @brief Get Command Frame Length Under Half-Duplex Mode
  630. * @rmtoll CR2 CMD8B FL_SPI_GetHalfDuplexCommandLength
  631. * @param SPIx SPI instance
  632. * @retval Returned value can be one of the following values:
  633. * @arg @ref FL_SPI_HALFDUPLEX_CMDLEN_DLEN
  634. * @arg @ref FL_SPI_HALFDUPLEX_CMDLEN_8B
  635. */
  636. __STATIC_INLINE uint32_t FL_SPI_GetHalfDuplexCommandLength(SPI_Type *SPIx)
  637. {
  638. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_CMD8B_Msk));
  639. }
  640. /**
  641. * @brief Set SPI SSN Hard Pin Mode
  642. * @rmtoll CR2 SSNM FL_SPI_SetHardwareSSNMode
  643. * @param SPIx SPI instance
  644. * @param mode This parameter can be one of the following values:
  645. * @arg @ref FL_SPI_HARDWARE_SSN_AUTO_HIGH
  646. * @arg @ref FL_SPI_HARDWARE_SSN_KEEP_LOW
  647. * @retval None
  648. */
  649. __STATIC_INLINE void FL_SPI_SetHardwareSSNMode(SPI_Type *SPIx, uint32_t mode)
  650. {
  651. MODIFY_REG(SPIx->CR2, SPI_CR2_SSNM_Msk, mode);
  652. }
  653. /**
  654. * @brief Get SPI SSN Hard Pin Mode
  655. * @rmtoll CR2 SSNM FL_SPI_GetHardwareSSNMode
  656. * @param SPIx SPI instance
  657. * @retval Returned value can be one of the following values:
  658. * @arg @ref FL_SPI_HARDWARE_SSN_AUTO_HIGH
  659. * @arg @ref FL_SPI_HARDWARE_SSN_KEEP_LOW
  660. */
  661. __STATIC_INLINE uint32_t FL_SPI_GetHardwareSSNMode(SPI_Type *SPIx)
  662. {
  663. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_SSNM_Msk));
  664. }
  665. /**
  666. * @brief Enabel TX Only Mode Auto Disable
  667. * @rmtoll CR2 TXO_AC FL_SPI_EnableTXOnlyModeAutoDisable
  668. * @param SPIx SPI instance
  669. * @retval None
  670. */
  671. __STATIC_INLINE void FL_SPI_EnableTXOnlyModeAutoDisable(SPI_Type *SPIx)
  672. {
  673. SET_BIT(SPIx->CR2, SPI_CR2_TXO_AC_Msk);
  674. }
  675. /**
  676. * @brief Disable TX Only Mode Auto Disable
  677. * @rmtoll CR2 TXO_AC FL_SPI_DisableTXOnlyModeAutoDisable
  678. * @param SPIx SPI instance
  679. * @retval None
  680. */
  681. __STATIC_INLINE void FL_SPI_DisableTXOnlyModeAutoDisable(SPI_Type *SPIx)
  682. {
  683. CLEAR_BIT(SPIx->CR2, SPI_CR2_TXO_AC_Msk);
  684. }
  685. /**
  686. * @brief Get TX Only Mode Auto Disable Setting
  687. * @rmtoll CR2 TXO_AC FL_SPI_IsEnabledTXOnlyModeAutoDisable
  688. * @param SPIx SPI instance
  689. * @retval State of bit (1 or 0).
  690. */
  691. __STATIC_INLINE uint32_t FL_SPI_IsEnabledTXOnlyModeAutoDisable(SPI_Type *SPIx)
  692. {
  693. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_TXO_AC_Msk) == SPI_CR2_TXO_AC_Msk);
  694. }
  695. /**
  696. * @brief EnableSPI TX Only Mode
  697. * @rmtoll CR2 TXO FL_SPI_EnableTXOnlyMode
  698. * @param SPIx SPI instance
  699. * @retval None
  700. */
  701. __STATIC_INLINE void FL_SPI_EnableTXOnlyMode(SPI_Type *SPIx)
  702. {
  703. SET_BIT(SPIx->CR2, SPI_CR2_TXO_Msk);
  704. }
  705. /**
  706. * @brief Get SPI TX Only Mode Setting State
  707. * @rmtoll CR2 TXO FL_SPI_IsEnabledTXOnlyMode
  708. * @param SPIx SPI instance
  709. * @retval State of bit (1 or 0).
  710. */
  711. __STATIC_INLINE uint32_t FL_SPI_IsEnabledTXOnlyMode(SPI_Type *SPIx)
  712. {
  713. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_TXO_Msk) == SPI_CR2_TXO_Msk);
  714. }
  715. /**
  716. * @brief Set SSN Pin
  717. * @rmtoll CR2 SSN FL_SPI_SetSSNPin
  718. * @param SPIx SPI instance
  719. * @param state This parameter can be one of the following values:
  720. * @arg @ref FL_SPI_SSN_LOW
  721. * @arg @ref FL_SPI_SSN_HIGH
  722. * @retval None
  723. */
  724. __STATIC_INLINE void FL_SPI_SetSSNPin(SPI_Type *SPIx, uint32_t state)
  725. {
  726. MODIFY_REG(SPIx->CR2, SPI_CR2_SSN_Msk, state);
  727. }
  728. /**
  729. * @brief Reset SSN Pin
  730. * @rmtoll CR2 SSN FL_SPI_GetSSNPin
  731. * @param SPIx SPI instance
  732. * @retval Returned value can be one of the following values:
  733. * @arg @ref FL_SPI_SSN_LOW
  734. * @arg @ref FL_SPI_SSN_HIGH
  735. */
  736. __STATIC_INLINE uint32_t FL_SPI_GetSSNPin(SPI_Type *SPIx)
  737. {
  738. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_SSN_Msk));
  739. }
  740. /**
  741. * @brief Enable SNN Sofe Control Under Master Mode
  742. * @rmtoll CR2 SSNSEN FL_SPI_EnableSSNSoftControl
  743. * @param SPIx SPI instance
  744. * @retval None
  745. */
  746. __STATIC_INLINE void FL_SPI_EnableSSNSoftControl(SPI_Type *SPIx)
  747. {
  748. SET_BIT(SPIx->CR2, SPI_CR2_SSNSEN_Msk);
  749. }
  750. /**
  751. * @brief Get SNN Sofe Control State Under Master Mode
  752. * @rmtoll CR2 SSNSEN FL_SPI_IsEnabledSSNSoftControl
  753. * @param SPIx SPI instance
  754. * @retval State of bit (1 or 0).
  755. */
  756. __STATIC_INLINE uint32_t FL_SPI_IsEnabledSSNSoftControl(SPI_Type *SPIx)
  757. {
  758. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_SSNSEN_Msk) == SPI_CR2_SSNSEN_Msk);
  759. }
  760. /**
  761. * @brief Disable SNN Sofe Control Under Master Mode
  762. * @rmtoll CR2 SSNSEN FL_SPI_DisableSSNSoftControl
  763. * @param SPIx SPI instance
  764. * @retval None
  765. */
  766. __STATIC_INLINE void FL_SPI_DisableSSNSoftControl(SPI_Type *SPIx)
  767. {
  768. CLEAR_BIT(SPIx->CR2, SPI_CR2_SSNSEN_Msk);
  769. }
  770. /**
  771. * @brief Enable SPI
  772. * @rmtoll CR2 SPIEN FL_SPI_Enable
  773. * @param SPIx SPI instance
  774. * @retval None
  775. */
  776. __STATIC_INLINE void FL_SPI_Enable(SPI_Type *SPIx)
  777. {
  778. SET_BIT(SPIx->CR2, SPI_CR2_SPIEN_Msk);
  779. }
  780. /**
  781. * @brief Get SPI Enable Status
  782. * @rmtoll CR2 SPIEN FL_SPI_IsEnabled
  783. * @param SPIx SPI instance
  784. * @retval State of bit (1 or 0).
  785. */
  786. __STATIC_INLINE uint32_t FL_SPI_IsEnabled(SPI_Type *SPIx)
  787. {
  788. return (uint32_t)(READ_BIT(SPIx->CR2, SPI_CR2_SPIEN_Msk) == SPI_CR2_SPIEN_Msk);
  789. }
  790. /**
  791. * @brief Disable SPI
  792. * @rmtoll CR2 SPIEN FL_SPI_Disable
  793. * @param SPIx SPI instance
  794. * @retval None
  795. */
  796. __STATIC_INLINE void FL_SPI_Disable(SPI_Type *SPIx)
  797. {
  798. CLEAR_BIT(SPIx->CR2, SPI_CR2_SPIEN_Msk);
  799. }
  800. /**
  801. * @brief Clear SPI TX Buffer
  802. * @rmtoll CR3 TXBFC FL_SPI_ClearTXBuff
  803. * @param SPIx SPI instance
  804. * @retval None
  805. */
  806. __STATIC_INLINE void FL_SPI_ClearTXBuff(SPI_Type *SPIx)
  807. {
  808. WRITE_REG(SPIx->CR3, SPI_CR3_TXBFC_Msk);
  809. }
  810. /**
  811. * @brief Clear SPI RX Buffer
  812. * @rmtoll CR3 RXBFC FL_SPI_ClearRXBuff
  813. * @param SPIx SPI instance
  814. * @retval None
  815. */
  816. __STATIC_INLINE void FL_SPI_ClearRXBuff(SPI_Type *SPIx)
  817. {
  818. WRITE_REG(SPIx->CR3, SPI_CR3_RXBFC_Msk);
  819. }
  820. /**
  821. * @brief Clear SPI Master Error Flag
  822. * @rmtoll CR3 MERRC FL_SPI_ClearFlag_MasterError
  823. * @param SPIx SPI instance
  824. * @retval None
  825. */
  826. __STATIC_INLINE void FL_SPI_ClearFlag_MasterError(SPI_Type *SPIx)
  827. {
  828. WRITE_REG(SPIx->CR3, SPI_CR3_MERRC_Msk);
  829. }
  830. /**
  831. * @brief Clear SPI Slave Error Flag
  832. * @rmtoll CR3 SERRC FL_SPI_ClearFlag_SlaveError
  833. * @param SPIx SPI instance
  834. * @retval None
  835. */
  836. __STATIC_INLINE void FL_SPI_ClearFlag_SlaveError(SPI_Type *SPIx)
  837. {
  838. WRITE_REG(SPIx->CR3, SPI_CR3_SERRC_Msk);
  839. }
  840. /**
  841. * @brief Disable SPI Error Interrupt
  842. * @rmtoll IER ERRIE FL_SPI_DisableIT_Error
  843. * @param SPIx SPI instance
  844. * @retval None
  845. */
  846. __STATIC_INLINE void FL_SPI_DisableIT_Error(SPI_Type *SPIx)
  847. {
  848. CLEAR_BIT(SPIx->IER, SPI_IER_ERRIE_Msk);
  849. }
  850. /**
  851. * @brief Enable SPI Error Interrupt
  852. * @rmtoll IER ERRIE FL_SPI_EnableIT_Error
  853. * @param SPIx SPI instance
  854. * @retval None
  855. */
  856. __STATIC_INLINE void FL_SPI_EnableIT_Error(SPI_Type *SPIx)
  857. {
  858. SET_BIT(SPIx->IER, SPI_IER_ERRIE_Msk);
  859. }
  860. /**
  861. * @brief Get SPI Error Interrupt Enable Status
  862. * @rmtoll IER ERRIE FL_SPI_IsEnabledIT_Error
  863. * @param SPIx SPI instance
  864. * @retval State of bit (1 or 0).
  865. */
  866. __STATIC_INLINE uint32_t FL_SPI_IsEnabledIT_Error(SPI_Type *SPIx)
  867. {
  868. return (uint32_t)(READ_BIT(SPIx->IER, SPI_IER_ERRIE_Msk) == SPI_IER_ERRIE_Msk);
  869. }
  870. /**
  871. * @brief Disable SPI Transmit Complete Interrupt
  872. * @rmtoll IER TXIE FL_SPI_DisableIT_TXComplete
  873. * @param SPIx SPI instance
  874. * @retval None
  875. */
  876. __STATIC_INLINE void FL_SPI_DisableIT_TXComplete(SPI_Type *SPIx)
  877. {
  878. CLEAR_BIT(SPIx->IER, SPI_IER_TXIE_Msk);
  879. }
  880. /**
  881. * @brief Enable SPI Transmit Complete Interrupt
  882. * @rmtoll IER TXIE FL_SPI_EnableIT_TXComplete
  883. * @param SPIx SPI instance
  884. * @retval None
  885. */
  886. __STATIC_INLINE void FL_SPI_EnableIT_TXComplete(SPI_Type *SPIx)
  887. {
  888. SET_BIT(SPIx->IER, SPI_IER_TXIE_Msk);
  889. }
  890. /**
  891. * @brief Get SPI Transmit Complete Interrupt Enable Status
  892. * @rmtoll IER TXIE FL_SPI_IsEnabledIT_TXComplete
  893. * @param SPIx SPI instance
  894. * @retval State of bit (1 or 0).
  895. */
  896. __STATIC_INLINE uint32_t FL_SPI_IsEnabledIT_TXComplete(SPI_Type *SPIx)
  897. {
  898. return (uint32_t)(READ_BIT(SPIx->IER, SPI_IER_TXIE_Msk) == SPI_IER_TXIE_Msk);
  899. }
  900. /**
  901. * @brief Disable SPI Receive Complete Interrupt
  902. * @rmtoll IER RXIE FL_SPI_DisableIT_RXComplete
  903. * @param SPIx SPI instance
  904. * @retval None
  905. */
  906. __STATIC_INLINE void FL_SPI_DisableIT_RXComplete(SPI_Type *SPIx)
  907. {
  908. CLEAR_BIT(SPIx->IER, SPI_IER_RXIE_Msk);
  909. }
  910. /**
  911. * @brief Enable SPI Receive Complete Interrupt
  912. * @rmtoll IER RXIE FL_SPI_EnableIT_RXComplete
  913. * @param SPIx SPI instance
  914. * @retval None
  915. */
  916. __STATIC_INLINE void FL_SPI_EnableIT_RXComplete(SPI_Type *SPIx)
  917. {
  918. SET_BIT(SPIx->IER, SPI_IER_RXIE_Msk);
  919. }
  920. /**
  921. * @brief Get SPI Receive Complete Interrupt Enable Status
  922. * @rmtoll IER RXIE FL_SPI_IsEnabledIT_RXComplete
  923. * @param SPIx SPI instance
  924. * @retval State of bit (1 or 0).
  925. */
  926. __STATIC_INLINE uint32_t FL_SPI_IsEnabledIT_RXComplete(SPI_Type *SPIx)
  927. {
  928. return (uint32_t)(READ_BIT(SPIx->IER, SPI_IER_RXIE_Msk) == SPI_IER_RXIE_Msk);
  929. }
  930. /**
  931. * @brief Set SPI Output Data/Command Under Half-Duplex Mode
  932. * @rmtoll ISR DCN_TX FL_SPI_SetFrameMode
  933. * @param SPIx SPI instance
  934. * @param mode This parameter can be one of the following values:
  935. * @arg @ref FL_SPI_FRAME_MODE_CMD
  936. * @arg @ref FL_SPI_FRAME_MODE_DATA
  937. * @retval None
  938. */
  939. __STATIC_INLINE void FL_SPI_SetFrameMode(SPI_Type *SPIx, uint32_t mode)
  940. {
  941. MODIFY_REG(SPIx->ISR, SPI_ISR_DCN_TX_Msk, mode);
  942. }
  943. /**
  944. * @brief Get SPI Output Data/Command Under Half-Duplex Mode Setting
  945. * @rmtoll ISR DCN_TX FL_SPI_GetFrameMode
  946. * @param SPIx SPI instance
  947. * @retval Returned value can be one of the following values:
  948. * @arg @ref FL_SPI_FRAME_MODE_CMD
  949. * @arg @ref FL_SPI_FRAME_MODE_DATA
  950. */
  951. __STATIC_INLINE uint32_t FL_SPI_GetFrameMode(SPI_Type *SPIx)
  952. {
  953. return (uint32_t)(READ_BIT(SPIx->ISR, SPI_ISR_DCN_TX_Msk));
  954. }
  955. /**
  956. * @brief Get SPI Receive Collision Flag
  957. * @rmtoll ISR RXCOL FL_SPI_IsActiveFlag_RXBuffOverflow
  958. * @param SPIx SPI instance
  959. * @retval State of bit (1 or 0).
  960. */
  961. __STATIC_INLINE uint32_t FL_SPI_IsActiveFlag_RXBuffOverflow(SPI_Type *SPIx)
  962. {
  963. return (uint32_t)(READ_BIT(SPIx->ISR, SPI_ISR_RXCOL_Msk) == (SPI_ISR_RXCOL_Msk));
  964. }
  965. /**
  966. * @brief Clear SPI Receive Collision Flag
  967. * @rmtoll ISR RXCOL FL_SPI_ClearFlag_RXBuffOverflow
  968. * @param SPIx SPI instance
  969. * @retval None
  970. */
  971. __STATIC_INLINE void FL_SPI_ClearFlag_RXBuffOverflow(SPI_Type *SPIx)
  972. {
  973. WRITE_REG(SPIx->ISR, SPI_ISR_RXCOL_Msk);
  974. }
  975. /**
  976. * @brief Get SPI Transmit Collision Flag
  977. * @rmtoll ISR TXCOL FL_SPI_IsActiveFlag_TXBuffOverflow
  978. * @param SPIx SPI instance
  979. * @retval State of bit (1 or 0).
  980. */
  981. __STATIC_INLINE uint32_t FL_SPI_IsActiveFlag_TXBuffOverflow(SPI_Type *SPIx)
  982. {
  983. return (uint32_t)(READ_BIT(SPIx->ISR, SPI_ISR_TXCOL_Msk) == (SPI_ISR_TXCOL_Msk));
  984. }
  985. /**
  986. * @brief Clear SPI Transmit Collision Flag
  987. * @rmtoll ISR TXCOL FL_SPI_ClearFlag_TXBuffOverflow
  988. * @param SPIx SPI instance
  989. * @retval None
  990. */
  991. __STATIC_INLINE void FL_SPI_ClearFlag_TXBuffOverflow(SPI_Type *SPIx)
  992. {
  993. WRITE_REG(SPIx->ISR, SPI_ISR_TXCOL_Msk);
  994. }
  995. /**
  996. * @brief Get SPI Busy Flag
  997. * @rmtoll ISR BUSY FL_SPI_IsActiveFlag_Busy
  998. * @param SPIx SPI instance
  999. * @retval State of bit (1 or 0).
  1000. */
  1001. __STATIC_INLINE uint32_t FL_SPI_IsActiveFlag_Busy(SPI_Type *SPIx)
  1002. {
  1003. return (uint32_t)(READ_BIT(SPIx->ISR, SPI_ISR_BUSY_Msk) == (SPI_ISR_BUSY_Msk));
  1004. }
  1005. /**
  1006. * @brief Get SPI Master Error Flag
  1007. * @rmtoll ISR MERR FL_SPI_IsActiveFlag_MasterError
  1008. * @param SPIx SPI instance
  1009. * @retval State of bit (1 or 0).
  1010. */
  1011. __STATIC_INLINE uint32_t FL_SPI_IsActiveFlag_MasterError(SPI_Type *SPIx)
  1012. {
  1013. return (uint32_t)(READ_BIT(SPIx->ISR, SPI_ISR_MERR_Msk) == (SPI_ISR_MERR_Msk));
  1014. }
  1015. /**
  1016. * @brief Get SPI Slave Error Flag
  1017. * @rmtoll ISR SERR FL_SPI_IsActiveFlag_SlaveError
  1018. * @param SPIx SPI instance
  1019. * @retval State of bit (1 or 0).
  1020. */
  1021. __STATIC_INLINE uint32_t FL_SPI_IsActiveFlag_SlaveError(SPI_Type *SPIx)
  1022. {
  1023. return (uint32_t)(READ_BIT(SPIx->ISR, SPI_ISR_SERR_Msk) == (SPI_ISR_SERR_Msk));
  1024. }
  1025. /**
  1026. * @brief Get SPI TX Buffer Empty Flag
  1027. * @rmtoll ISR TXBE FL_SPI_IsActiveFlag_TXBuffEmpty
  1028. * @param SPIx SPI instance
  1029. * @retval State of bit (1 or 0).
  1030. */
  1031. __STATIC_INLINE uint32_t FL_SPI_IsActiveFlag_TXBuffEmpty(SPI_Type *SPIx)
  1032. {
  1033. return (uint32_t)(READ_BIT(SPIx->ISR, SPI_ISR_TXBE_Msk) == (SPI_ISR_TXBE_Msk));
  1034. }
  1035. /**
  1036. * @brief Get SPI RX Buffer Full Flag
  1037. * @rmtoll ISR RXBF FL_SPI_IsActiveFlag_RXBuffFull
  1038. * @param SPIx SPI instance
  1039. * @retval State of bit (1 or 0).
  1040. */
  1041. __STATIC_INLINE uint32_t FL_SPI_IsActiveFlag_RXBuffFull(SPI_Type *SPIx)
  1042. {
  1043. return (uint32_t)(READ_BIT(SPIx->ISR, SPI_ISR_RXBF_Msk) == (SPI_ISR_RXBF_Msk));
  1044. }
  1045. /**
  1046. * @brief Write SPI TX Buffer
  1047. * @rmtoll TXBUF FL_SPI_WriteTXBuff
  1048. * @param SPIx SPI instance
  1049. * @param data
  1050. * @retval None
  1051. */
  1052. __STATIC_INLINE void FL_SPI_WriteTXBuff(SPI_Type *SPIx, uint32_t data)
  1053. {
  1054. MODIFY_REG(SPIx->TXBUF, (0xffffffffU << 0U), (data << 0U));
  1055. }
  1056. /**
  1057. * @brief Read SPI TX Buffer
  1058. * @rmtoll RXBUF FL_SPI_ReadRXBuff
  1059. * @param SPIx SPI instance
  1060. * @retval
  1061. */
  1062. __STATIC_INLINE uint32_t FL_SPI_ReadRXBuff(SPI_Type *SPIx)
  1063. {
  1064. return (uint32_t)(READ_BIT(SPIx->RXBUF, (0xffffffffU << 0U)) >> 0U);
  1065. }
  1066. /**
  1067. * @}
  1068. */
  1069. /** @defgroup SPI_FL_EF_Init Initialization and de-initialization functions
  1070. * @{
  1071. */
  1072. FL_ErrorStatus FL_SPI_DeInit(SPI_Type *SPIx);
  1073. FL_ErrorStatus FL_SPI_Init(SPI_Type *SPIx, FL_SPI_InitTypeDef *initStruct);
  1074. void FL_SPI_StructInit(FL_SPI_InitTypeDef *initStruct);
  1075. /**
  1076. * @}
  1077. */
  1078. /**
  1079. * @}
  1080. */
  1081. /**
  1082. * @}
  1083. */
  1084. #ifdef __cplusplus
  1085. }
  1086. #endif
  1087. #endif /* __FM33LC0XX_FL_SPI_H*/
  1088. /*************************Py_Code_Generator Version: 0.1-0.14-0.1 @ 2020-10-20*************************/
  1089. /*************************(C) COPYRIGHT Fudan Microelectronics **** END OF FILE*************************/