air105_hspim.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  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_HSPIM_H
  22. #define __AIR105_HSPIM_H
  23. #ifdef __cplusplus
  24. extern "C"
  25. {
  26. #endif
  27. #include "air105.h"
  28. typedef struct
  29. {
  30. uint8_t HSPIM_Enable;
  31. uint8_t HSPIM_Mode;
  32. uint8_t HSPIM_FirstBit;
  33. uint8_t HSPIM_CPOL;
  34. uint8_t HSPIM_CPHA;
  35. uint8_t HSPIM_DivideEnable;
  36. uint8_t HSPIM_BaudRatePrescaler;
  37. uint8_t HSPIM_ReceiveDataLength;
  38. uint8_t HSPIM_RXFIFOFullThreshold;
  39. uint8_t HSPIM_TXFIFOEmptyThreshold;
  40. }HSPIM_InitTypeDef;
  41. typedef struct
  42. {
  43. uint8_t HSPIM_DMAReceiveEnable;
  44. uint8_t HSPIM_DMATransmitEnable;
  45. uint8_t HSPIM_DMAReceiveLevel;
  46. uint8_t HSPIM_DMATransmitLevel;
  47. }HSPIM_DMAInitTypeDef;
  48. /** @defgroup HSPIM_Mode
  49. * @{
  50. */
  51. #define HSPIM_MODE_STANDARD (0x01)
  52. #define HSPIM_MODE_DUAL_RECEIVE (0x02)
  53. #define HSPIM_MODE_DUAL_TRANSMIT (0x03)
  54. #define HSPIM_MODE_QUAD_RECEIVE (0x04)
  55. #define HSPIM_MODE_QUAD_TRANSMIT (0x05)
  56. #define IS_HSPIM_MODE(MODE) (((MODE) == HSPIM_MODE_STANDARD) || \
  57. ((MODE) == HSPIM_MODE_DUAL_RECEIVE) || \
  58. ((MODE) == HSPIM_MODE_DUAL_TRANSMIT) || \
  59. ((MODE) == HSPIM_MODE_QUAD_RECEIVE) || \
  60. ((MODE) == HSPIM_MODE_QUAD_TRANSMIT))
  61. /**
  62. * @}
  63. */
  64. /** @defgroup HSPIM_Clock_Polarity
  65. * @{
  66. */
  67. #define HSPIM_CPOL_LOW (0x00)
  68. #define HSPIM_CPOL_HIGH (0x01)
  69. #define IS_HSPIM_CPOL(CPOL) (((CPOL) == HSPIM_CPOL_LOW)|| \
  70. ((CPOL) == HSPIM_CPOL_HIGH))
  71. /**
  72. * @}
  73. */
  74. /** @defgroup HSPIM_Clock_Phase
  75. * @{
  76. */
  77. #define HSPIM_CPHA_1EDGE (0x00)
  78. #define HSPIM_CPHA_2EDGE (0x01)
  79. #define IS_HSPIM_CPHA(CPHA) (((CPHA) == HSPIM_CPHA_1EDGE) || \
  80. (CPHA) == HSPIM_CPHA_2EDGE)
  81. /**
  82. * @}
  83. */
  84. /** @defgroup HSPIM_First_Bit
  85. * @{
  86. */
  87. #define HSPIM_FIRST_BIT_MSB (0x00)
  88. #define HSPIM_FIRST_BIT_LSB (0x01)
  89. #define IS_HSPIM_FIRST_BIT(BIT) (((BIT) == HSPIM_FIRST_BIT_MSB) || \
  90. ((BIT) == HSPIM_FIRST_BIT_LSB))
  91. /**
  92. * @}
  93. */
  94. /** @defgroup HSPIM_BaudRate_Prescaler
  95. * @{
  96. */
  97. #define HSPIM_BAUDRATE_PRESCALER_2 (0x01)
  98. #define HSPIM_BAUDRATE_PRESCALER_4 (0x02)
  99. #define HSPIM_BAUDRATE_PRESCALER_8 (0x04)
  100. #define HSPIM_BAUDRATE_PRESCALER_16 (0x08)
  101. #define HSPIM_BAUDRATE_PRESCALER_32 (0x10)
  102. #define IS_HSPIM_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == HSPIM_BAUDRATE_PRESCALER_2) || \
  103. ((PRESCALER) == HSPIM_BAUDRATE_PRESCALER_4) || \
  104. ((PRESCALER) == HSPIM_BAUDRATE_PRESCALER_8) || \
  105. ((PRESCALER) == HSPIM_BAUDRATE_PRESCALER_16) || \
  106. ((PRESCALER) == HSPIM_BAUDRATE_PRESCALER_32))
  107. /**
  108. * @}
  109. */
  110. /** @defgroup HSPIM_Receive_Data_Length
  111. * @{
  112. */
  113. #define HSPIM_RECEIVE_DATA_LENGTH_1_BYTE (0x00)
  114. #define HSPIM_RECEIVE_DATA_LENGTH_2_BYTE (0x01)
  115. #define HSPIM_RECEIVE_DATA_LENGTH_3_BYTE (0x02)
  116. #define HSPIM_RECEIVE_DATA_LENGTH_4_BYTE (0x03)
  117. #define HSPIM_RECEIVE_DATA_LENGTH_5_BYTE (0x04)
  118. #define HSPIM_RECEIVE_DATA_LENGTH_6_BYTE (0x05)
  119. #define HSPIM_RECEIVE_DATA_LENGTH_7_BYTE (0x06)
  120. #define HSPIM_RECEIVE_DATA_LENGTH_8_BYTE (0x07)
  121. #define HSPIM_RECEIVE_DATA_LENGTH_9_BYTE (0x08)
  122. #define HSPIM_RECEIVE_DATA_LENGTH_10_BYTE (0x09
  123. #define HSPIM_RECEIVE_DATA_LENGTH_11_BYTE (0x0A)
  124. #define HSPIM_RECEIVE_DATA_LENGTH_12_BYTE (0x0B)
  125. #define HSPIM_RECEIVE_DATA_LENGTH_13_BYTE (0x0C)
  126. #define HSPIM_RECEIVE_DATA_LENGTH_14_BYTE (0x0D)
  127. #define HSPIM_RECEIVE_DATA_LENGTH_15_BYTE (0x0E)
  128. #define HSPIM_RECEIVE_DATA_LENGTH_16_BYTE (0x0F)
  129. #define HSPIM_RECEIVE_DATA_LENGTH_32_BYTE (0x1F)
  130. /**
  131. * @}
  132. */
  133. /** @defgroup HSPIM_TXFIFOEmptyThreshold
  134. * @{
  135. */
  136. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_1 ((uint32_t)0x0001)
  137. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_2 ((uint32_t)0x0002)
  138. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_3 ((uint32_t)0x0003)
  139. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_4 ((uint32_t)0x0004)
  140. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_5 ((uint32_t)0x0005)
  141. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_6 ((uint32_t)0x0006)
  142. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_7 ((uint32_t)0x0007)
  143. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_8 ((uint32_t)0x0008)
  144. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_9 ((uint32_t)0x0009)
  145. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_10 ((uint32_t)0x000A)
  146. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_11 ((uint32_t)0x000B)
  147. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_12 ((uint32_t)0x000C)
  148. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_13 ((uint32_t)0x000D)
  149. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_14 ((uint32_t)0x000E)
  150. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_15 ((uint32_t)0x000F)
  151. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_31 ((uint32_t)0x001F)
  152. #define HSPIM_TX_FIFO_EMPTY_THRESHOLD_63 ((uint32_t)0x003F)
  153. #define IS_HSPIM_TX_FIFO_EMPTY_THRESHOLD(THRESHOLD) ((((int32_t)(THRESHOLD)) >= HSPIM_TX_FIFO_EMPTY_THRESHOLD_1) && \
  154. (((uint32_t)(THRESHOLD)) <= HSPIM_TX_FIFO_EMPTY_THRESHOLD_63))
  155. /**
  156. * @}
  157. */
  158. /** @defgroup HSPIM_RXFIFOFullThreshold
  159. * @{
  160. */
  161. #define HSPIM_RX_FIFO_FULL_THRESHOLD_1 ((uint32_t)0x0001)
  162. #define HSPIM_RX_FIFO_FULL_THRESHOLD_2 ((uint32_t)0x0002)
  163. #define HSPIM_RX_FIFO_FULL_THRESHOLD_3 ((uint32_t)0x0003)
  164. #define HSPIM_RX_FIFO_FULL_THRESHOLD_4 ((uint32_t)0x0004)
  165. #define HSPIM_RX_FIFO_FULL_THRESHOLD_5 ((uint32_t)0x0005)
  166. #define HSPIM_RX_FIFO_FULL_THRESHOLD_6 ((uint32_t)0x0006)
  167. #define HSPIM_RX_FIFO_FULL_THRESHOLD_7 ((uint32_t)0x0007)
  168. #define HSPIM_RX_FIFO_FULL_THRESHOLD_8 ((uint32_t)0x0008)
  169. #define HSPIM_RX_FIFO_FULL_THRESHOLD_9 ((uint32_t)0x0009)
  170. #define HSPIM_RX_FIFO_FULL_THRESHOLD_10 ((uint32_t)0x000A)
  171. #define HSPIM_RX_FIFO_FULL_THRESHOLD_11 ((uint32_t)0x000B)
  172. #define HSPIM_RX_FIFO_FULL_THRESHOLD_12 ((uint32_t)0x000C)
  173. #define HSPIM_RX_FIFO_FULL_THRESHOLD_13 ((uint32_t)0x000D)
  174. #define HSPIM_RX_FIFO_FULL_THRESHOLD_14 ((uint32_t)0x000E)
  175. #define HSPIM_RX_FIFO_FULL_THRESHOLD_15 ((uint32_t)0x000F)
  176. #define HSPIM_RX_FIFO_FULL_THRESHOLD_16 ((uint32_t)0x0010)
  177. #define HSPIM_RX_FIFO_FULL_THRESHOLD_32 ((uint32_t)0x0020)
  178. #define HSPIM_RX_FIFO_FULL_THRESHOLD_63 ((uint32_t)0x003F)
  179. #define IS_HSPIM_RX_FIFO_FULL_THRESHOLD(THRESHOLD) ((((uint32_t)(THRESHOLD)) >= HSPIM_RX_FIFO_FULL_THRESHOLD_1) && \
  180. (((uint32_t)(THRESHOLD)) <= HSPIM_RX_FIFO_FULL_THRESHOLD_63))
  181. /**
  182. * @}
  183. */
  184. /** @defgroup SPI_DMAReceiveLevel
  185. * @{
  186. */
  187. #define HSPIM_DMA_RECEIVE_LEVEL_1 ((uint32_t)0x0001)
  188. #define HSPIM_DMA_RECEIVE_LEVEL_2 ((uint32_t)0x0002)
  189. #define HSPIM_DMA_RECEIVE_LEVEL_3 ((uint32_t)0x0003)
  190. #define HSPIM_DMA_RECEIVE_LEVEL_4 ((uint32_t)0x0004)
  191. #define HSPIM_DMA_RECEIVE_LEVEL_5 ((uint32_t)0x0005)
  192. #define HSPIM_DMA_RECEIVE_LEVEL_6 ((uint32_t)0x0006)
  193. #define HSPIM_DMA_RECEIVE_LEVEL_7 ((uint32_t)0x0007)
  194. #define HSPIM_DMA_RECEIVE_LEVEL_8 ((uint32_t)0x0008)
  195. #define HSPIM_DMA_RECEIVE_LEVEL_9 ((uint32_t)0x0009)
  196. #define HSPIM_DMA_RECEIVE_LEVEL_10 ((uint32_t)0x000A)
  197. #define HSPIM_DMA_RECEIVE_LEVEL_11 ((uint32_t)0x000B)
  198. #define HSPIM_DMA_RECEIVE_LEVEL_12 ((uint32_t)0x000C)
  199. #define HSPIM_DMA_RECEIVE_LEVEL_13 ((uint32_t)0x000D)
  200. #define HSPIM_DMA_RECEIVE_LEVEL_14 ((uint32_t)0x000E)
  201. #define HSPIM_DMA_RECEIVE_LEVEL_15 ((uint32_t)0x000F)
  202. #define HSPIM_DMA_RECEIVE_LEVEL_16 ((uint32_t)0x0010)
  203. #define HSPIM_DMA_RECEIVE_LEVEL_32 ((uint32_t)0x0020)
  204. #define HSPIM_DMA_RECEIVE_LEVEL_64 ((uint32_t)0x0040)
  205. #define IS_HSPIM_DMA_RECEIVE_LEVEL(LEVEL) ((((uint32_t)(LEVEL)) >= HSPIM_DMA_RECEIVE_LEVEL_1) && \
  206. (((uint32_t)(LEVEL)) <= HSPIM_DMA_RECEIVE_LEVEL_64))
  207. /**
  208. * @}
  209. */
  210. /** @defgroup SPI_DMATransmitLevel
  211. * @{
  212. */
  213. #define HSPIM_DMA_TRANSMIT_LEVEL_1 ((uint32_t)0x0001)
  214. #define HSPIM_DMA_TRANSMIT_LEVEL_2 ((uint32_t)0x0002)
  215. #define HSPIM_DMA_TRANSMIT_LEVEL_3 ((uint32_t)0x0003)
  216. #define HSPIM_DMA_TRANSMIT_LEVEL_4 ((uint32_t)0x0004)
  217. #define HSPIM_DMA_TRANSMIT_LEVEL_5 ((uint32_t)0x0005)
  218. #define HSPIM_DMA_TRANSMIT_LEVEL_6 ((uint32_t)0x0006)
  219. #define HSPIM_DMA_TRANSMIT_LEVEL_7 ((uint32_t)0x0007)
  220. #define HSPIM_DMA_TRANSMIT_LEVEL_8 ((uint32_t)0x0008)
  221. #define HSPIM_DMA_TRANSMIT_LEVEL_9 ((uint32_t)0x0009)
  222. #define HSPIM_DMA_TRANSMIT_LEVEL_10 ((uint32_t)0x000A)
  223. #define HSPIM_DMA_TRANSMIT_LEVEL_11 ((uint32_t)0x000B)
  224. #define HSPIM_DMA_TRANSMIT_LEVEL_12 ((uint32_t)0x000C)
  225. #define HSPIM_DMA_TRANSMIT_LEVEL_13 ((uint32_t)0x000D)
  226. #define HSPIM_DMA_TRANSMIT_LEVEL_14 ((uint32_t)0x000E)
  227. #define HSPIM_DMA_TRANSMIT_LEVEL_15 ((uint32_t)0x000F)
  228. #define HSPIM_DMA_TRANSMIT_LEVEL_31 ((uint32_t)0x001F)
  229. #define HSPIM_DMA_TRANSMIT_LEVEL_63 ((uint32_t)0x003F)
  230. #define IS_HSPIM_DMA_TRANSMIT_LEVEL(LEVEL) ((((uint32_t)(LEVEL)) >= HSPIM_DMA_TRANSMIT_LEVEL_1) && \
  231. (((uint32_t)(LEVEL)) <= HSPIM_DMA_TRANSMIT_LEVEL_63))
  232. /**
  233. * @}
  234. */
  235. /** @defgroup HSPIM_Interrupt Mask and Status Flag
  236. * @{
  237. */
  238. #define HSPIM_IT_RX ((uint32_t)0x8000)
  239. #define HSPIM_IT_TX ((uint32_t)0x4000)
  240. #define HSPIM_IT_EN ((uint32_t)0x2000)
  241. #define HSPIM_IT_ID_RXF ((uint32_t)0x0080)
  242. #define HSPIM_IT_ID_RXTF ((uint32_t)0x0040)
  243. #define HSPIM_IT_ID_RXE ((uint32_t)0x0020)
  244. #define HSPIM_IT_ID_TXF ((uint32_t)0x0008)
  245. #define HSPIM_IT_ID_TXE ((uint32_t)0x0002)
  246. #define HSPIM_IT_ID_TXTF ((uint32_t)0x0001)
  247. #define HSPIM_FLAG_TXE ((uint32_t)0x0004)
  248. #define HSPIM_FLAG_TXF ((uint32_t)0x0010)
  249. #define HSPIM_FLAG_TXTF ((uint32_t)0x0020)
  250. #define HSPIM_FLAG_RXE ((uint32_t)0x0400)
  251. #define HSPIM_FLAG_RXF ((uint32_t)0x1000)
  252. #define HSPIM_FLAG_RXTF ((uint32_t)0x2000)
  253. #define HSPIM_FIFO_TX ((uint32_t)0x0080)
  254. #define HSPIM_FIFO_RX ((uint32_t)0x0040)
  255. /**
  256. * @}
  257. */
  258. void HSPIM_Init(HSPIM_InitTypeDef* HSPIM_InitStruct);
  259. void HSPIM_DMAInit(HSPIM_DMAInitTypeDef* HSPIM_DMAInitStruct);
  260. void HSPIM_Cmd(FunctionalState NewState);
  261. void HSPIM_TransmitCmd(FunctionalState NewState);
  262. void HSPIM_DualQuadReceiveCmd(FunctionalState NewState);
  263. void HSPIM_SendData(uint8_t Data);
  264. uint8_t HSPIM_ReceiveData(void);
  265. void HSPIM_ITConfig(uint32_t HSPIM_IT, FunctionalState NewState);
  266. void HSPIM_FIFOReset(uint32_t HSPIM_IT);
  267. FlagStatus HSPIM_IsTransmitDone(void);
  268. FlagStatus HSPIM_IsReady(void);
  269. FlagStatus HSPIM_GetFlagStatus(uint32_t HSPIM_Flag);
  270. ITStatus HSPIM_GetITStatus(uint32_t HSPIM_IT);
  271. void HSPIM_ModeSwitch(uint8_t Mode);
  272. void HSPIM_WriteBuff(uint8_t Mode, uint16_t Size, uint8_t* Buff);
  273. void HSPIM_ReadBuff(uint8_t Mode, uint16_t Size, uint8_t* Buff);
  274. #ifdef __cplusplus
  275. }
  276. #endif
  277. #endif
  278. /************************** (C) COPYRIGHT Megahunt *****END OF FILE***********************************************************************/