apm32f10x_qspi.h 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. /*!
  2. * @file apm32f10x_qspi.h
  3. *
  4. * @brief This file contains all the prototypes,enumeration and macros for the QSPI peripheral
  5. *
  6. * @version V1.0.4
  7. *
  8. * @date 2022-12-01
  9. *
  10. * @attention
  11. *
  12. * Copyright (C) 2020-2022 Geehy Semiconductor
  13. *
  14. * You may not use this file except in compliance with the
  15. * GEEHY COPYRIGHT NOTICE (GEEHY SOFTWARE PACKAGE LICENSE).
  16. *
  17. * The program is only for reference, which is distributed in the hope
  18. * that it will be useful and instructional for customers to develop
  19. * their software. Unless required by applicable law or agreed to in
  20. * writing, the program is distributed on an "AS IS" BASIS, WITHOUT
  21. * ANY WARRANTY OR CONDITIONS OF ANY KIND, either express or implied.
  22. * See the GEEHY SOFTWARE PACKAGE LICENSE for the governing permissions
  23. * and limitations under the License.
  24. */
  25. /* Define to prevent recursive inclusion */
  26. #ifndef __APM32F10X_QSPI_H
  27. #define __APM32F10X_QSPI_H
  28. /* Includes */
  29. #include "apm32f10x.h"
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. /** @addtogroup APM32F10x_StdPeriphDriver
  34. @{
  35. */
  36. /** @addtogroup QSPI_Driver QSPI Driver
  37. @{
  38. */
  39. /** @defgroup QSPI_Macros Macros
  40. @{
  41. */
  42. /* CTRL1 register reset value */
  43. #define QSPI_CTRL1_RESET_VALUE ((uint32_t)0x4007)
  44. /* CTRL2 register reset value */
  45. #define QSPI_CTRL2_RESET_VALUE ((uint32_t)0x00)
  46. /* SSIEN register reset value */
  47. #define QSPI_SSIEN_RESET_VALUE ((uint32_t)0x00)
  48. /* SLAEN register reset value */
  49. #define QSPI_SLAEN_RESET_VALUE ((uint32_t)0x00)
  50. /* BR register reset value */
  51. #define QSPI_BR_RESET_VALUE ((uint32_t)0x00)
  52. /* TFTL register reset value */
  53. #define QSPI_TFTL_RESET_VALUE ((uint32_t)0x00)
  54. /* RFTL register reset value */
  55. #define QSPI_RFTL_RESET_VALUE ((uint32_t)0x00)
  56. /* TFL register reset value */
  57. #define QSPI_TFL_RESET_VALUE ((uint32_t)0x00)
  58. /* RFL register reset value */
  59. #define QSPI_RFL_RESET_VALUE ((uint32_t)0x00)
  60. /* STS register reset value */
  61. #define QSPI_STS_RESET_VALUE ((uint32_t)0x06)
  62. /* INTEN register reset value */
  63. #define QSPI_INTEN_RESET_VALUE ((uint32_t)0x7F)
  64. /* RSD register reset value */
  65. #define QSPI_RSD_RESET_VALUE ((uint32_t)0x00)
  66. /* CTRL3 register reset value */
  67. #define QSPI_CTRL3_RESET_VALUE ((uint32_t)0x200)
  68. /* IOSW register reset value */
  69. #define QSPI_IOSW_RESET_VALUE ((uint32_t)0x00)
  70. /**@} end of group QSPI_Macros*/
  71. /** @defgroup QSPI_Enumerations Enumerations
  72. @{
  73. */
  74. /**
  75. * @brief Frame format
  76. */
  77. typedef enum
  78. {
  79. QSPI_FRF_STANDARD, /*!< Standard mode */
  80. QSPI_FRF_DUAL, /*!< Dual SPI */
  81. QSPI_FRF_QUAD /*!< QUAD SPI */
  82. } QSPI_FRF_T;
  83. /**
  84. * @brief Transmission mode
  85. */
  86. typedef enum
  87. {
  88. QSPI_TRANS_MODE_TX_RX, /*!< TX and RX mode */
  89. QSPI_TRANS_MODE_TX, /*!< TX mode only */
  90. QSPI_TRANS_MODE_RX, /*!< RX mode only */
  91. QSPI_TRANS_MODE_EEPROM_READ /*!< EEPROM read mode */
  92. } QSPI_TRANS_MODE_T;
  93. /**
  94. * @brief Clock polarity
  95. */
  96. typedef enum
  97. {
  98. QSPI_CLKPOL_LOW,
  99. QSPI_CLKPOL_HIGH
  100. } QSPI_CLKPOL_T;
  101. /**
  102. * @brief Clock phase
  103. */
  104. typedef enum
  105. {
  106. QSPI_CLKPHA_1EDGE,
  107. QSPI_CLKPHA_2EDGE
  108. } QSPI_CLKPHA_T;
  109. /**
  110. * @brief Data format size
  111. */
  112. typedef enum
  113. {
  114. QSPI_DFS_4BIT = 3,
  115. QSPI_DFS_5BIT,
  116. QSPI_DFS_6BIT,
  117. QSPI_DFS_7BIT,
  118. QSPI_DFS_8BIT,
  119. QSPI_DFS_9BIT,
  120. QSPI_DFS_10BIT,
  121. QSPI_DFS_11BIT,
  122. QSPI_DFS_12BIT,
  123. QSPI_DFS_13BIT,
  124. QSPI_DFS_14BIT,
  125. QSPI_DFS_15BIT,
  126. QSPI_DFS_16BIT,
  127. QSPI_DFS_17BIT,
  128. QSPI_DFS_18BIT,
  129. QSPI_DFS_19BIT,
  130. QSPI_DFS_20BIT,
  131. QSPI_DFS_21BIT,
  132. QSPI_DFS_22BIT,
  133. QSPI_DFS_23BIT,
  134. QSPI_DFS_24BIT,
  135. QSPI_DFS_25BIT,
  136. QSPI_DFS_26BIT,
  137. QSPI_DFS_27BIT,
  138. QSPI_DFS_28BIT,
  139. QSPI_DFS_29BIT,
  140. QSPI_DFS_30BIT,
  141. QSPI_DFS_31BIT,
  142. QSPI_DFS_32BIT
  143. } QSPI_DFS_T;
  144. /**
  145. * @brief QSPI flag
  146. */
  147. typedef enum
  148. {
  149. QSPI_FLAG_BUSY = BIT0, /*!< Busy flag */
  150. QSPI_FLAG_TFNF = BIT1, /*!< TX FIFO not full flag */
  151. QSPI_FLAG_TFE = BIT2, /*!< TX FIFO empty flag */
  152. QSPI_FLAG_RFNE = BIT3, /*!< RX FIFO not empty flag */
  153. QSPI_FLAG_RFF = BIT4, /*!< RX FIFO full flag */
  154. QSPI_FLAG_DCE = BIT6 /*!< Data collision error */
  155. } QSPI_FLAG_T;
  156. /**
  157. * @brief QSPI interrupt source
  158. */
  159. typedef enum
  160. {
  161. QSPI_INT_TFE = BIT0, /*!< TX FIFO empty interrupt */
  162. QSPI_INT_TFO = BIT1, /*!< TX FIFO overflow interrupt */
  163. QSPI_INT_RFU = BIT2, /*!< RX FIFO underflow interrupt */
  164. QSPI_INT_RFO = BIT3, /*!< RX FIFO overflow interrupt */
  165. QSPI_INT_RFF = BIT4, /*!< RX FIFO full interrupt */
  166. QSPI_INT_MST = BIT5 /*!< Master interrupt */
  167. } QSPI_INT_T;
  168. /**
  169. * @brief QSPI interrupt flag
  170. */
  171. typedef enum
  172. {
  173. QSPI_INT_FLAG_TFE = BIT0, /*!< TX FIFO empty interrupt flag */
  174. QSPI_INT_FLAG_TFO = BIT1, /*!< TX FIFO overflow interrupt flag */
  175. QSPI_INT_FLAG_RFU = BIT2, /*!< RX FIFO underflow interrupt flag */
  176. QSPI_INT_FLAG_RFO = BIT3, /*!< RX FIFO overflow interrupt flag */
  177. QSPI_INT_FLAG_RFF = BIT4, /*!< RX FIFO full interrupt flag */
  178. QSPI_INT_FLAG_MST = BIT5 /*!< Master interrupt flag */
  179. } QSPI_INT_FLAG_T;
  180. /**
  181. * @brief Reception sample edge
  182. */
  183. typedef enum
  184. {
  185. QSPI_RSE_RISING,
  186. QSPI_RSE_FALLING
  187. } QSPI_RSE_T;
  188. /**
  189. * @brief Instruction length
  190. */
  191. typedef enum
  192. {
  193. QSPI_INST_LEN_0,
  194. QSPI_INST_LEN_4BIT,
  195. QSPI_INST_LEN_8BIT,
  196. QSPI_INST_LEN_16BIT
  197. } QSPI_INST_LEN_T;
  198. /**
  199. * @brief QSPI address length
  200. */
  201. typedef enum
  202. {
  203. QSPI_ADDR_LEN_0,
  204. QSPI_ADDR_LEN_4BIT,
  205. QSPI_ADDR_LEN_8BIT,
  206. QSPI_ADDR_LEN_12BIT,
  207. QSPI_ADDR_LEN_16BIT,
  208. QSPI_ADDR_LEN_20BIT,
  209. QSPI_ADDR_LEN_24BIT,
  210. QSPI_ADDR_LEN_28BIT,
  211. QSPI_ADDR_LEN_32BIT,
  212. QSPI_ADDR_LEN_36BIT,
  213. QSPI_ADDR_LEN_40BIT,
  214. QSPI_ADDR_LEN_44BIT,
  215. QSPI_ADDR_LEN_48BIT,
  216. QSPI_ADDR_LEN_52BIT,
  217. QSPI_ADDR_LEN_56BIT,
  218. QSPI_ADDR_LEN_60BIT
  219. } QSPI_ADDR_LEN_T;
  220. /**
  221. * @brief Instruction and address transmission mode
  222. */
  223. typedef enum
  224. {
  225. QSPI_INST_ADDR_TYPE_STANDARD,
  226. QSPI_INST_TYPE_STANDARD,
  227. QSPI_INST_ADDR_TYPE_FRF
  228. } QSPI_INST_ADDR_TYPE_T;
  229. /**
  230. * @brief Slave Select Toggle
  231. */
  232. typedef enum
  233. {
  234. QSPI_SST_DISABLE,
  235. QSPI_SST_ENABLE
  236. } QSPI_SST_T;
  237. /**@} end of group QSPI_Enumerations*/
  238. /** @defgroup QSPI_Structure Data Structure
  239. @{
  240. */
  241. typedef struct
  242. {
  243. QSPI_SST_T selectSlaveToggle; /*!< Slave Select Toggle */
  244. QSPI_FRF_T frameFormat; /*!< Frame format */
  245. uint16_t clockDiv; /*!< Clock divider */
  246. QSPI_CLKPOL_T clockPolarity; /*!< Clock polarity */
  247. QSPI_CLKPHA_T clockPhase; /*!< Clock phase */
  248. QSPI_DFS_T dataFrameSize; /*!< Data frame size */
  249. } QSPI_Config_T;
  250. /**@} end of group QSPI_Structure*/
  251. /** @defgroup QSPI_Functions Functions
  252. @{
  253. */
  254. /* Reset */
  255. void QSPI_Reset(void);
  256. /* Configuration */
  257. void QSPI_Config(QSPI_Config_T* qspiConfig);
  258. void QSPI_ConfigStructInit(QSPI_Config_T* qspiConfig);
  259. /* Data frame size, frame number, frame format */
  260. void QSPI_ConfigFrameNum(uint16_t num);
  261. void QSPI_ConfigDataFrameSize(QSPI_DFS_T dfs);
  262. void QSPI_ConfigFrameFormat(QSPI_FRF_T frameFormat);
  263. /* Disable or Enable */
  264. void QSPI_Enable(void);
  265. void QSPI_Disable(void);
  266. /* TX and RX FIFO */
  267. uint8_t QSPI_ReadTxFifoDataNum(void);
  268. uint8_t QSPI_ReadRxFifoDataNum(void);
  269. void QSPI_ConfigRxFifoThreshold(uint8_t threshold);
  270. void QSPI_ConfigTxFifoThreshold(uint8_t threshold);
  271. void QSPI_ConfigTxFifoEmptyThreshold(uint8_t threshold);
  272. /* RX Sample */
  273. void QSPI_ConfigRxSampleEdge(QSPI_RSE_T rse);
  274. void QSPI_ConfigRxSampleDelay(uint8_t delay);
  275. /* Clock stretch */
  276. void QSPI_EnableClockStretch(void);
  277. void QSPI_DisableClockStretch(void);
  278. /* Instruction, address, Wait cycle */
  279. void QSPI_ConfigInstLen(QSPI_INST_LEN_T len);
  280. void QSPI_ConfigAddrLen(QSPI_ADDR_LEN_T len);
  281. void QSPI_ConfigInstAddrType(QSPI_INST_ADDR_TYPE_T type);
  282. void QSPI_ConfigWaitCycle(uint8_t cycle);
  283. /* IO */
  284. void QSPI_OpenIO(void);
  285. void QSPI_CloseIO(void);
  286. /* Transmission mode */
  287. void QSPI_ConfigTansMode(QSPI_TRANS_MODE_T mode);
  288. /* Rx and Tx data */
  289. uint32_t QSPI_RxData(void);
  290. void QSPI_TxData(uint32_t data);
  291. /* Slave */
  292. void QSPI_EnableSlave(void);
  293. void QSPI_DisableSlave(void);
  294. /* Interrupt */
  295. void QSPI_EnableInterrupt(uint32_t interrupt);
  296. void QSPI_DisableInterrupt(uint32_t interrupt);
  297. /* Flag */
  298. uint8_t QSPI_ReadStatusFlag(QSPI_FLAG_T flag);
  299. void QSPI_ClearStatusFlag(void);
  300. uint8_t QSPI_ReadIntFlag(QSPI_INT_FLAG_T flag);
  301. void QSPI_ClearIntFlag(uint32_t flag);
  302. /**@} end of group QSPI_Functions*/
  303. /**@} end of group QSPI_Driver*/
  304. /**@} end of group APM32F10x_StdPeriphDriver*/
  305. #ifdef __cplusplus
  306. }
  307. #endif
  308. #endif /* __APM32F10X_QSPI_H */