HAL_spi.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. /**
  2. ******************************************************************************
  3. * @file HAL_spi.h
  4. * @author IC Applications Department
  5. * @version V0.8
  6. * @date 2019_08_02
  7. * @brief This file contains all the functions prototypes for the SPI firmware
  8. * library.
  9. ******************************************************************************
  10. * @copy
  11. *
  12. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  13. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  14. * TIME. AS A RESULT, HOLOCENE SHALL NOT BE HELD LIABLE FOR ANY
  15. * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  16. * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  17. * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  18. *
  19. * <h2><center>&copy; COPYRIGHT 2016 HOLOCENE</center></h2>
  20. */
  21. /* Define to prevent recursive inclusion -------------------------------------*/
  22. #ifndef __HAL_SPI_H
  23. #define __HAL_SPI_H
  24. /* Includes ------------------------------------------------------------------*/
  25. #include "HAL_device.h"
  26. /** @addtogroup StdPeriph_Driver
  27. * @{
  28. */
  29. /** @addtogroup SPI
  30. * @{
  31. */
  32. /** @defgroup SPI_Exported_Types
  33. * @{
  34. */
  35. /**
  36. * @brief SPI Init structure definition
  37. */
  38. typedef struct
  39. {
  40. uint16_t SPI_Mode;
  41. uint16_t SPI_DataSize;
  42. uint16_t SPI_DataWidth;
  43. uint16_t SPI_CPOL;
  44. uint16_t SPI_CPHA;
  45. uint16_t SPI_NSS;
  46. uint16_t SPI_BaudRatePrescaler;
  47. uint16_t SPI_FirstBit;
  48. }SPI_InitTypeDef;
  49. /**
  50. * @}
  51. */
  52. /** @defgroup SPI_Exported_Constants
  53. * @{
  54. */
  55. #define IS_SPI_ALL_PERIPH(PERIPH) (((*(uint32_t*)&(PERIPH)) == SPI0_BASE) || \
  56. ((*(uint32_t*)&(PERIPH)) == SPI1_BASE))
  57. #define IS_SPI_2_PERIPH(PERIPH) ((*(uint32_t*)&(PERIPH)) == SPI1_BASE)
  58. /**
  59. * @}
  60. */
  61. /** @defgroup SPI_master_slave_mode
  62. * @{
  63. */
  64. #define SPI_Mode_Master ((uint16_t)0x0004)
  65. #define SPI_Mode_Slave ((uint16_t)0x0000)
  66. #define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_Master) || \
  67. ((MODE) == SPI_Mode_Slave))
  68. /**
  69. * @}
  70. */
  71. /** @defgroup SPI_data_size
  72. * @{
  73. */
  74. #define SPI_DataSize_32b ((uint16_t)0x0800)
  75. #define SPI_DataSize_8b ((uint16_t)0x0000)
  76. #define IS_SPI_DATASIZE(DATASIZE) (((DATASIZE) == SPI_DataSize_32b) || \
  77. ((DATASIZE) == SPI_DataSize_8b))
  78. /**
  79. * @}
  80. */
  81. /** @defgroup SPI_7bit_8bit data width
  82. * @{
  83. */
  84. #define SPI_DataWidth_7b ((uint16_t)0x0000)
  85. #define SPI_DataWidth_8b ((uint16_t)0x0008)
  86. #define IS_SPI_DATAWIDRH(WIDTH) (((WIDTH) == SPI_DataWidth_7b) || \
  87. ((WIDTH) == SPI_DataWidth_8b))
  88. /**
  89. * @}
  90. */
  91. /** @defgroup SPI_Clock_Polarity
  92. * @{
  93. */
  94. #define SPI_CPOL_Low ((uint16_t)0x0000)
  95. #define SPI_CPOL_High ((uint16_t)0x0002)
  96. #define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \
  97. ((CPOL) == SPI_CPOL_High))
  98. /**
  99. * @}
  100. */
  101. /** @defgroup SPI_Clock_Phase
  102. * @{
  103. */
  104. #define SPI_CPHA_1Edge ((uint16_t)0x0001)
  105. #define SPI_CPHA_2Edge ((uint16_t)0x0000)
  106. #define IS_SPI_CPHA(CPHA) (((CPHA) == SPI_CPHA_1Edge) || \
  107. ((CPHA) == SPI_CPHA_2Edge))
  108. /**
  109. * @}
  110. */
  111. /** @defgroup SPI_Slave_Select_management
  112. * @{
  113. */
  114. #define SPI_NSS_Soft ((uint16_t)0x0000)
  115. #define SPI_NSS_Hard ((uint16_t)0x0400)
  116. #define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \
  117. ((NSS) == SPI_NSS_Hard))
  118. /**
  119. * @}
  120. */
  121. /** @defgroup SPI_NSS_internal_software_mangement
  122. * @{
  123. */
  124. #define SPI_NSSInternalSoft_Set ((uint16_t)0x0001)
  125. #define SPI_NSSInternalSoft_Reset ((uint16_t)0xFFFE)
  126. #define IS_SPI_NSS_INTERNAL(INTERNAL) (((INTERNAL) == SPI_NSSInternalSoft_Set) || \
  127. ((INTERNAL) == SPI_NSSInternalSoft_Reset))
  128. /**
  129. * @}
  130. */
  131. /**
  132. * @}
  133. */
  134. /** @defgroup SPI_BaudRate_Prescaler_
  135. * @{
  136. */
  137. #define SPI_BaudRatePrescaler_2 ((uint16_t)0x0002)
  138. #define SPI_BaudRatePrescaler_4 ((uint16_t)0x0004)
  139. #define SPI_BaudRatePrescaler_8 ((uint16_t)0x0008)
  140. #define SPI_BaudRatePrescaler_16 ((uint16_t)0x0010)
  141. #define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020)
  142. #define SPI_BaudRatePrescaler_64 ((uint16_t)0x0040)
  143. #define SPI_BaudRatePrescaler_128 ((uint16_t)0x0080)
  144. #define SPI_BaudRatePrescaler_256 ((uint16_t)0x0100)
  145. #define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \
  146. ((PRESCALER) == SPI_BaudRatePrescaler_4) || \
  147. ((PRESCALER) == SPI_BaudRatePrescaler_8) || \
  148. ((PRESCALER) == SPI_BaudRatePrescaler_16) || \
  149. ((PRESCALER) == SPI_BaudRatePrescaler_32) || \
  150. ((PRESCALER) == SPI_BaudRatePrescaler_64) || \
  151. ((PRESCALER) == SPI_BaudRatePrescaler_128) || \
  152. ((PRESCALER) == SPI_BaudRatePrescaler_256))
  153. /**
  154. * @}
  155. */
  156. /** @defgroup SPI_MSB_LSB_transmission
  157. * @{
  158. */
  159. #define SPI_FirstBit_MSB ((uint16_t)0x0000)
  160. #define SPI_FirstBit_LSB ((uint16_t)0x0004)
  161. #define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \
  162. ((BIT) == SPI_FirstBit_LSB))
  163. /**
  164. * @}
  165. */
  166. /** @defgroup SPI_DMA_transfer_requests
  167. * @{
  168. */
  169. #define SPI_DMAReq_EN ((uint16_t)0x0200)
  170. #define IS_SPI_DMAREQ(DMAREQ) ((DMAREQ) == SPI_DMAReq_EN)
  171. /**
  172. * @}
  173. */
  174. /** @defgroup SPI TX Fifo and RX Fifo trigger level
  175. * @{
  176. */
  177. #define SPI_TXTLF ((uint16_t)0x0080)
  178. #define SPI_RXTLF ((uint16_t)0x0020)
  179. #define IS_SPI_FIFOTRIGGER(TRIGGER) (((TRIGGER) == SPI_TXTLF) && ((TRIGGER) == SPI_RXTLF))
  180. /**
  181. * @}
  182. */
  183. /** @defgroup SPI_NSS_internal_software_mangement
  184. * @{
  185. */
  186. #define SPI_CS_BIT0 ((uint16_t)0xfffe)
  187. #define SPI_CS_BIT1 ((uint16_t)0xfffd)
  188. #define SPI_CS_BIT2 ((uint16_t)0xfffb)
  189. #define SPI_CS_BIT3 ((uint16_t)0xfff7)
  190. #define SPI_CS_BIT4 ((uint16_t)0xffef)
  191. #define SPI_CS_BIT5 ((uint16_t)0xffdf)
  192. #define SPI_CS_BIT6 ((uint16_t)0xffbf)
  193. #define SPI_CS_BIT7 ((uint16_t)0xff7f)
  194. #define IS_SPI_CS(CS) (((CS) == SPI_CS_BIT0) || ((CS) == SPI_CS_BIT1)||\
  195. ((CS) == SPI_CS_BIT2) || ((CS) == SPI_CS_BIT3)||\
  196. ((CS) == SPI_CS_BIT4) || ((CS) == SPI_CS_BIT5)||\
  197. ((CS) == SPI_CS_BIT6) || ((CS) == SPI_CS_BIT7))
  198. /**
  199. * @}
  200. */
  201. /** @defgroup SPI_direction_transmit_receive
  202. * @{
  203. */
  204. #define SPI_Direction_Rx ((uint16_t)0x0010)
  205. #define SPI_Direction_Tx ((uint16_t)0x0008)
  206. #define SPI_Disable_Tx ((uint16_t)0xfff7)
  207. #define SPI_Disable_Rx ((uint16_t)0xffef)
  208. #define IS_SPI_DIRECTION(DIRECTION) (((DIRECTION) == SPI_Direction_Rx) || \
  209. ((DIRECTION) == SPI_Direction_Tx) || \
  210. ((DIRECTION) == SPI_Disable_Tx) || \
  211. ((DIRECTION) == SPI_Disable_Rx))
  212. /**
  213. * @}
  214. */
  215. /** @defgroup SPI_interrupts_definition
  216. * @{
  217. */
  218. #define SPI_INT_EN ((uint16_t)0x0002)
  219. #define SPI_IT_TX ((uint8_t)0x01)
  220. #define SPI_IT_RX ((uint8_t)0x02)
  221. #define IS_SPI_CONFIG_IT(IT) (((IT) == SPI_IT_TX) || \
  222. ((IT) == SPI_IT_RX))
  223. #define SPI_IT_UNDERRUN ((uint8_t)0x04)
  224. #define SPI_IT_RXOVER ((uint8_t)0x08)
  225. #define SPI_IT_RXMATCH ((uint8_t)0x10)
  226. #define SPI_IT_RXFULL ((uint8_t)0x20)
  227. #define SPI_IT_TXEPT ((uint8_t)0x40)
  228. #define IS_SPI_GET_IT(IT) (((IT) == SPI_IT_TX) || ((IT) == SPI_IT_RX) || \
  229. ((IT) == SPI_IT_UNDERRUN) || ((IT) == SPI_IT_RXOVER) || \
  230. ((IT) == SPI_IT_RXMATCH) || ((IT) == SPI_IT_RXFULL) || \
  231. ((IT) == SPI_IT_TXEPT))
  232. /**
  233. * @}
  234. */
  235. /** @defgroup SPI_flags_definition
  236. * @{
  237. */
  238. #define SPI_FLAG_RXAVL ((uint16_t)0x0002)
  239. #define SPI_FLAG_TXEPT ((uint16_t)0x0001)
  240. #define IS_SPI_GET_FLAG(FLAG) (((FLAG) == SPI_FLAG_RXAVL) || \
  241. ((FLAG) == SPI_FLAG_TXEPT))
  242. /**
  243. * @}
  244. */
  245. /** @defgroup SPI mode tx data transmit phase adjust set
  246. *in slave mode according to txedge bit of CCTL register
  247. * @{
  248. */
  249. #define SPI_SlaveAdjust_FAST ((uint16_t)0x0020)
  250. #define SPI_SlaveAdjust_LOW ((uint16_t)0xffdf)
  251. #define IS_SPI_SlaveAdjust(ADJUST) (((ADJUST) == SPI_SlaveAdjust_FAST) || \
  252. ((ADJUST) == SPI_SlaveAdjust_LOW))
  253. /**
  254. * @}
  255. */
  256. /** @defgroup SPI_Exported_Macros
  257. * @{
  258. */
  259. /**
  260. * @}
  261. */
  262. /** @defgroup SPI_Exported_Functions
  263. * @{
  264. */
  265. void SPI_DeInit(SPI_TypeDef* SPIx);
  266. void SPI_Init(SPI_TypeDef* SPIx, SPI_InitTypeDef* SPI_InitStruct);
  267. void SPI_StructInit(SPI_InitTypeDef* SPI_InitStruct);
  268. void SPI_Cmd(SPI_TypeDef* SPIx, FunctionalState NewState);
  269. void SPI_ITConfig(SPI_TypeDef* SPIx, uint8_t SPI_IT, FunctionalState NewState);
  270. void SPI_DMACmd(SPI_TypeDef* SPIx, uint16_t SPI_DMAReq, FunctionalState NewState);
  271. void SPI_FifoTrigger(SPI_TypeDef* SPIx, uint16_t SPI_FifoTriggerValue, FunctionalState NewState);
  272. void SPI_SendData(SPI_TypeDef* SPIx, uint16_t Data);
  273. uint16_t SPI_ReceiveData(SPI_TypeDef* SPIx);
  274. void SPI_CSInternalSelected(SPI_TypeDef* SPIx, uint16_t SPI_CSInternalSelected,FunctionalState NewState);
  275. void SPI_NSSInternalSoftwareConfig(SPI_TypeDef* SPIx, uint16_t SPI_NSSInternalSoft);
  276. void SPI_DataSizeConfig(SPI_TypeDef* SPIx, uint16_t SPI_DataSize);
  277. void SPI_BiDirectionalLineConfig(SPI_TypeDef* SPIx, uint16_t SPI_Direction);
  278. FlagStatus SPI_GetFlagStatus(SPI_TypeDef* SPIx, uint16_t SPI_FLAG);
  279. ITStatus SPI_GetITStatus(SPI_TypeDef* SPIx, uint8_t SPI_IT);
  280. void SPI_ClearITPendingBit(SPI_TypeDef* SPIx, uint8_t SPI_IT);
  281. void SPI_RxBytes(SPI_TypeDef* SPIx, uint16_t Number);
  282. void SPI_SlaveAdjust(SPI_TypeDef* SPIx, uint16_t AdjustValue);
  283. #endif /*__HAL_SPI_H */
  284. /**
  285. * @}
  286. */
  287. /**
  288. * @}
  289. */
  290. /**
  291. * @}
  292. */
  293. /*-------------------------(C) COPYRIGHT 2016 HOLOCENE ----------------------*/