HAL_SPI.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. /*
  2. ******************************************************************************
  3. * @file HAL_SPI.h
  4. * @version V1.0.0
  5. * @date 2020
  6. * @brief Header file of SPI HAL module.
  7. ******************************************************************************
  8. */
  9. #ifndef __HAL_SPI_H__
  10. #define __HAL_SPI_H__
  11. #include "ACM32Fxx_HAL.h"
  12. /**************** Bit definition for SPI_CTL register **************************/
  13. #define SPI_CTL_CS_TIME (BIT11|BIT12|BIT13|BIT14|BIT15|BIT16|BIT17|BIT18)
  14. #define SPI_CTL_CS_FILTER BIT10
  15. #define SPI_CTL_CS_RST BIT9
  16. #define SPI_CTL_SLAVE_EN BIT8
  17. #define SPI_CTL_IO_MODE BIT7
  18. #define SPI_CTL_X_MODE (BIT6|BIT5)
  19. #define SPI_CTL_LSB_FIRST BIT4
  20. #define SPI_CTL_CPOL BIT3
  21. #define SPI_CTL_CPHA BIT2
  22. #define SPI_CTL_SFILTER BIT1
  23. #define SPI_CTL_MST_MODE BIT0
  24. /**************** Bit definition for SPI_TX_CTL register ***********************/
  25. #define SPI_TX_CTL_DMA_LEVEL (BIT4|BIT5|BIT6|BIT7)
  26. #define SPI_TX_CTL_DMA_LEVEL_3 BIT7
  27. #define SPI_TX_CTL_DMA_LEVEL_2 BIT6
  28. #define SPI_TX_CTL_DMA_LEVEL_1 BIT5
  29. #define SPI_TX_CTL_DMA_LEVEL_0 BIT4
  30. #define SPI_TX_CTL_DMA_REQ_EN BIT3
  31. #define SPI_TX_CTL_MODE BIT2
  32. #define SPI_TX_CTL_FIFO_RESET BIT1
  33. #define SPI_TX_CTL_EN BIT0
  34. /**************** Bit definition for SPI_RX_CTL register ***********************/
  35. #define SPI_RX_CTL_DMA_LEVEL (BIT4|BIT5|BIT6|BIT7)
  36. #define SPI_RX_CTL_DMA_LEVEL_3 BIT7
  37. #define SPI_RX_CTL_DMA_LEVEL_2 BIT6
  38. #define SPI_RX_CTL_DMA_LEVEL_1 BIT5
  39. #define SPI_RX_CTL_DMA_LEVEL_0 BIT4
  40. #define SPI_RX_CTL_DMA_REQ_EN BIT3
  41. #define SPI_RX_CTL_FIFO_RESET BIT1
  42. #define SPI_RX_CTL_EN BIT0
  43. /**************** Bit definition for SPI_IE register ***************************/
  44. #define SPI_IE_RX_BATCH_DONE_EN BIT15
  45. #define SPI_IE_TX_BATCH_DONE_EN BIT14
  46. #define SPI_IE_RX_FIFO_FULL_OV_EN BIT13
  47. #define SPI_IE_RX_FIFO_EMPTY_OV_EN BIT12
  48. #define SPI_IE_RX_NOT_EMPTY_EN BIT11
  49. #define SPI_IE_CS_POS_EN BIT10
  50. #define SPI_IE_RX_FIFO_HALF_FULL_EN BIT9
  51. #define SPI_IE_RX_FIFO_HALF_EMPTY_EN BIT8
  52. #define SPI_IE_TX_FIFO_HALF_FULL_EN BIT7
  53. #define SPI_IE_TX_FIFO_HALF_EMPTY_EN BIT6
  54. #define SPI_IE_RX_FIFO_FULL_EN BIT5
  55. #define SPI_IE_RX_FIFO_EMPTY_EN BIT4
  56. #define SPI_IE_TX_FIFO_FULL_EN BIT3
  57. #define SPI_IE_TX_FIFO_EMPTY_EN BIT2
  58. #define SPI_IE_BATCH_DONE_EN BIT1
  59. /**************** Bit definition for SPI_STATUS register ***********************/
  60. #define SPI_STATUS_RX_BATCH_DONE BIT15
  61. #define SPI_STATUS_TX_BATCH_DONE BIT14
  62. #define SPI_STATUS_RX_FIFO_FULL_OV BIT13
  63. #define SPI_STATUS_RX_FIFO_EMPTY_OV BIT12
  64. #define SPI_STATUS_RX_NOT_EMPTY BIT11
  65. #define SPI_STATUS_CS_POS BIT10
  66. #define SPI_STATUS_RX_FIFO_HALF_FULL BIT9
  67. #define SPI_STATUS_RX_FIFO_HALF_EMPTY BIT8
  68. #define SPI_STATUS_TX_FIFO_HALF_FULL BIT7
  69. #define SPI_STATUS_TX_FIFO_HALF_EMPTY BIT6
  70. #define SPI_STATUS_RX_FIFO_FULL BIT5
  71. #define SPI_STATUS_RX_FIFO_EMPTY BIT4
  72. #define SPI_STATUS_TX_FIFO_FULL BIT3
  73. #define SPI_STATUS_TX_FIFO_EMPTY BIT2
  74. #define SPI_STATUS_BATCH_DONE BIT1
  75. #define SPI_STATUS_TX_BUSY BIT0
  76. /**************** Bit definition for SPI_CS register ***************************/
  77. #define SPI_CS_CSX BIT1
  78. #define SPI_CS_CS0 BIT0
  79. /**************** Bit definition for SPI_OUT_EN register ***********************/
  80. #define SPI_HOLD_EN BIT3
  81. #define SPI_HOLD_WP_EN BIT2
  82. #define SPI_HOLD_MISO_EN BIT1
  83. #define SPI_HOLD_MOSI_EN BIT0
  84. /**************** Bit definition for SPI_MEMO_ACC register ***********************/
  85. #define SPI_ADDR_WIDTH (BIT14|BIT15|BIT16|BIT17|BIT18)
  86. #define SPI_PARA_NO2 (BIT9|BIT10|BIT11|BIT12|BIT13)
  87. #define SPI_PARA_NO1 (BIT5|BIT6|BIT7|BIT8)
  88. #define SPI_CON_RD_EN BIT3
  89. #define SPI_PARA_ORD2 BIT2
  90. #define SPI_PARA_ORD1 BIT1
  91. #define SPI_ACC_EN BIT0
  92. /** @defgroup SLAVE State machine
  93. * @{
  94. */
  95. #define SPI_RX_STATE_IDLE (0U)
  96. #define SPI_RX_STATE_RECEIVING (1U)
  97. #define SPI_TX_STATE_IDLE (0U)
  98. #define SPI_TX_STATE_SENDING (1U)
  99. /**
  100. * @}
  101. */
  102. /** @defgroup SPI_MODE
  103. * @{
  104. */
  105. #define SPI_MODE_SLAVE (0U)
  106. #define SPI_MODE_MASTER (1U)
  107. /**
  108. * @}
  109. */
  110. /** @defgroup SPI_WORK_MODE
  111. * @{
  112. */
  113. #define SPI_WORK_MODE_0 (0x00000000)
  114. #define SPI_WORK_MODE_1 (0x00000004)
  115. #define SPI_WORK_MODE_2 (0x00000008)
  116. #define SPI_WORK_MODE_3 (0x0000000C)
  117. /**
  118. * @}
  119. */
  120. /** @defgroup SPI_CLOCK_PHASE SPI Clock Phase
  121. * @{
  122. */
  123. #define SPI_PHASE_1EDGE (0U)
  124. #define SPI_PHASE_2EDGE (1U)
  125. /**
  126. * @}
  127. */
  128. /** @defgroup X_MODE SPI Clock Phase
  129. * @{
  130. */
  131. #define SPI_1X_MODE (0x00000000)
  132. #define SPI_2X_MODE (0x00000020)
  133. #define SPI_4X_MODE (0x00000040)
  134. /**
  135. * @}
  136. */
  137. /** @defgroup SPI_MSB_LSB_FIRST
  138. * @{
  139. */
  140. #define SPI_FIRSTBIT_MSB (0U)
  141. #define SPI_FIRSTBIT_LSB (1U)
  142. /**
  143. * @}
  144. */
  145. /** @defgroup BAUDRATE_PRESCALER
  146. * @{
  147. */
  148. #define SPI_BAUDRATE_PRESCALER_4 (4U)
  149. #define SPI_BAUDRATE_PRESCALER_8 (8U)
  150. #define SPI_BAUDRATE_PRESCALER_16 (16U)
  151. #define SPI_BAUDRATE_PRESCALER_32 (32U)
  152. #define SPI_BAUDRATE_PRESCALER_64 (64U)
  153. #define SPI_BAUDRATE_PRESCALER_128 (128U)
  154. #define SPI_BAUDRATE_PRESCALER_254 (254U)
  155. /**
  156. * @}
  157. */
  158. /**
  159. * @brief SPI Configuration Structure definition
  160. */
  161. typedef struct
  162. {
  163. uint32_t SPI_Mode; /* This parameter can be a value of @ref SPI_MODE */
  164. uint32_t SPI_Work_Mode; /* This parameter can be a value of @ref SPI_WORK_MODE */
  165. uint32_t X_Mode; /* This parameter can be a value of @ref X_MODE */
  166. uint32_t First_Bit; /* This parameter can be a value of @ref SPI_MSB_LSB_FIRST */
  167. uint32_t BaudRate_Prescaler; /* This parameter can be a value of @ref BAUDRATE_PRESCALER */
  168. }SPI_InitTypeDef;
  169. /******************************** Check SPI Parameter *******************************/
  170. #define IS_SPI_ALL_MODE(SPI_Mode) (((SPI_Mode) == SPI_MODE_SLAVE) || \
  171. ((SPI_Mode) == SPI_MODE_MASTER))
  172. #define IS_SPI_WORK_MODE(WORK_MODE) (((WORK_MODE) == SPI_WORK_MODE_0) || \
  173. ((WORK_MODE) == SPI_WORK_MODE_1) || \
  174. ((WORK_MODE) == SPI_WORK_MODE_2) || \
  175. ((WORK_MODE) == SPI_WORK_MODE_3))
  176. #define IS_SPI_X_MODE(X_MODE) (((X_MODE) == SPI_1X_MODE) || \
  177. ((X_MODE) == SPI_2X_MODE) || \
  178. ((X_MODE) == SPI_4X_MODE))
  179. #define IS_SPI_FIRST_BIT(FIRST_BIT) (((FIRST_BIT) == SPI_FIRSTBIT_MSB) || \
  180. ((FIRST_BIT) == SPI_FIRSTBIT_LSB))
  181. #define IS_SPI_BAUDRATE_PRESCALER(BAUDRATE) (((BAUDRATE) == SPI_BAUDRATE_PRESCALER_4) || \
  182. ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_8) || \
  183. ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_16) || \
  184. ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_32) || \
  185. ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_64) || \
  186. ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_128) || \
  187. ((BAUDRATE) == SPI_BAUDRATE_PRESCALER_254))
  188. /**
  189. * @brief SPI handle Structure definition
  190. */
  191. typedef struct
  192. {
  193. SPI_TypeDef *Instance; /* SPI registers base address */
  194. SPI_InitTypeDef Init; /* SPI communication parameters */
  195. uint32_t RxState; /* SPI state machine */
  196. uint32_t TxState; /* SPI state machine */
  197. uint8_t *Rx_Buffer; /* SPI Rx Buffer */
  198. uint8_t *Tx_Buffer; /* SPI Tx Buffer */
  199. uint32_t Rx_Size; /* SPI Rx Size */
  200. uint32_t Tx_Size; /* SPI Tx Size */
  201. uint32_t Rx_Count; /* SPI RX Count */
  202. uint32_t Tx_Count; /* SPI TX Count */
  203. DMA_HandleTypeDef *HDMA_Rx; /* SPI Rx DMA handle parameters */
  204. DMA_HandleTypeDef *HDMA_Tx; /* SPI Tx DMA handle parameters */
  205. }SPI_HandleTypeDef;
  206. /******************************** SPI Instances *******************************/
  207. #define IS_SPI_ALL_INSTANCE(INSTANCE) (((INSTANCE) == SPI1) || ((INSTANCE) == SPI2))
  208. /* Function : HAL_SPI_IRQHandler */
  209. void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi);
  210. /* Function : HAL_SPI_MspInit */
  211. void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi);
  212. /* Function : HAL_SPI_MspDeInit */
  213. void HAL_SPI_MspDeInit(SPI_HandleTypeDef *hspi);
  214. /* Function : HAL_SPI_Init */
  215. HAL_StatusTypeDef HAL_SPI_Init(SPI_HandleTypeDef *hspi);
  216. /* Function : HAL_SPI_DeInit */
  217. HAL_StatusTypeDef HAL_SPI_DeInit(SPI_HandleTypeDef *hspi);
  218. /* Function : HAL_SPI_Transmit */
  219. HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size, uint32_t Timeout);
  220. /* Function : HAL_SPI_Transmit_DMA */
  221. HAL_StatusTypeDef HAL_SPI_Transmit_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size);
  222. /* Function : HAL_SPI_Receive */
  223. HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size, uint32_t Timeout);
  224. /* Function : HAL_SPI_Receive_DMA */
  225. HAL_StatusTypeDef HAL_SPI_Receive_DMA(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size);
  226. /* Function : HAL_SPI_Wire_Config */
  227. HAL_StatusTypeDef HAL_SPI_Wire_Config(SPI_HandleTypeDef *hspi, uint32_t X_Mode);
  228. /* Function : HAL_SPI_Transmit_IT */
  229. HAL_StatusTypeDef HAL_SPI_Transmit_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size);
  230. /* Function : HAL_SPI_Receive_IT */
  231. HAL_StatusTypeDef HAL_SPI_Receive_IT(SPI_HandleTypeDef *hspi, uint8_t *pData, uint32_t Size);
  232. /* Function : HAL_SPI_TransmitReceive */
  233. HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint32_t Size, uint32_t Timeout);
  234. /* Function : HAL_SPI_GetTxState */
  235. uint8_t HAL_SPI_GetTxState(SPI_HandleTypeDef *hspi);
  236. /* Function : HAL_SPI_GetRxState */
  237. uint8_t HAL_SPI_GetRxState(SPI_HandleTypeDef *hspi);
  238. #endif