apm32f10x_qspi.h 7.9 KB

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