apm32e10x_dmc.h 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379
  1. /*!
  2. * @file apm32e10x_dmc.h
  3. *
  4. * @brief This file contains all the prototypes,enumeration and macros for the DMC peripheral
  5. *
  6. * @version V1.0.2
  7. *
  8. * @date 2022-12-31
  9. *
  10. * @attention
  11. *
  12. * Copyright (C) 2021-2023 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 __APM32E10X_DMC_H
  27. #define __APM32E10X_DMC_H
  28. /* Includes */
  29. #include "apm32e10x.h"
  30. #ifdef __cplusplus
  31. extern "C" {
  32. #endif
  33. /** @addtogroup APM32E10x_StdPeriphDriver
  34. @{
  35. */
  36. /** @addtogroup DMC_Driver
  37. @{
  38. */
  39. /** @defgroup DMC_Enumerations Enumerations
  40. @{
  41. */
  42. /**
  43. * @brief Bank Address Width
  44. */
  45. typedef enum
  46. {
  47. DMC_BANK_WIDTH_1,
  48. DMC_BANK_WIDTH_2
  49. }DMC_BANK_WIDTH_T;
  50. /**
  51. * @brief Row Address Width
  52. */
  53. typedef enum
  54. {
  55. DMC_ROW_WIDTH_11 = 0x0A,
  56. DMC_ROW_WIDTH_12,
  57. DMC_ROW_WIDTH_13,
  58. DMC_ROW_WIDTH_14,
  59. DMC_ROW_WIDTH_15,
  60. DMC_ROW_WIDTH_16
  61. }DMC_ROW_WIDTH_T;
  62. /**
  63. * @brief Column Address Width
  64. */
  65. typedef enum
  66. {
  67. DMC_COL_WIDTH_8 = 0x07,
  68. DMC_COL_WIDTH_9,
  69. DMC_COL_WIDTH_10,
  70. DMC_COL_WIDTH_11,
  71. DMC_COL_WIDTH_12,
  72. DMC_COL_WIDTH_13,
  73. DMC_COL_WIDTH_14,
  74. DMC_COL_WIDTH_15
  75. }DMC_COL_WIDTH_T;
  76. /**
  77. * @brief CAS Latency Select
  78. */
  79. typedef enum
  80. {
  81. DMC_CAS_LATENCY_1,
  82. DMC_CAS_LATENCY_2,
  83. DMC_CAS_LATENCY_3,
  84. DMC_CAS_LATENCY_4
  85. }DMC_CAS_LATENCY_T;
  86. /**
  87. * @brief RAS Minimun Time Select
  88. */
  89. typedef enum
  90. {
  91. DMC_RAS_MINIMUM_1,
  92. DMC_RAS_MINIMUM_2,
  93. DMC_RAS_MINIMUM_3,
  94. DMC_RAS_MINIMUM_4,
  95. DMC_RAS_MINIMUM_5,
  96. DMC_RAS_MINIMUM_6,
  97. DMC_RAS_MINIMUM_7,
  98. DMC_RAS_MINIMUM_8,
  99. DMC_RAS_MINIMUM_9,
  100. DMC_RAS_MINIMUM_10,
  101. DMC_RAS_MINIMUM_11,
  102. DMC_RAS_MINIMUM_12,
  103. DMC_RAS_MINIMUM_13,
  104. DMC_RAS_MINIMUM_14,
  105. DMC_RAS_MINIMUM_15,
  106. DMC_RAS_MINIMUM_16
  107. }DMC_RAS_MINIMUM_T;
  108. /**
  109. * @brief RAS To CAS Delay Time Select
  110. */
  111. typedef enum
  112. {
  113. DMC_DELAY_TIME_1,
  114. DMC_DELAY_TIME_2,
  115. DMC_DELAY_TIME_3,
  116. DMC_DELAY_TIME_4,
  117. DMC_DELAY_TIME_5,
  118. DMC_DELAY_TIME_6,
  119. DMC_DELAY_TIME_7,
  120. DMC_DELAY_TIME_8
  121. }DMC_DELAY_TIME_T;
  122. /**
  123. * @brief Precharge Period Select
  124. */
  125. typedef enum
  126. {
  127. DMC_PRECHARGE_1,
  128. DMC_PRECHARGE_2,
  129. DMC_PRECHARGE_3,
  130. DMC_PRECHARGE_4,
  131. DMC_PRECHARGE_5,
  132. DMC_PRECHARGE_6,
  133. DMC_PRECHARGE_7,
  134. DMC_PRECHARGE_8
  135. }DMC_PRECHARGE_T;
  136. /**
  137. * @brief Last Data Next Precharge For Write Time Select
  138. */
  139. typedef enum
  140. {
  141. DMC_NEXT_PRECHARGE_1,
  142. DMC_NEXT_PRECHARGE_2,
  143. DMC_NEXT_PRECHARGE_3,
  144. DMC_NEXT_PRECHARGE_4
  145. }DMC_NEXT_PRECHARGE_T;
  146. /**
  147. * @brief Auto-Refresh Period Select
  148. */
  149. typedef enum
  150. {
  151. DMC_AUTO_REFRESH_1,
  152. DMC_AUTO_REFRESH_2,
  153. DMC_AUTO_REFRESH_3,
  154. DMC_AUTO_REFRESH_4,
  155. DMC_AUTO_REFRESH_5,
  156. DMC_AUTO_REFRESH_6,
  157. DMC_AUTO_REFRESH_7,
  158. DMC_AUTO_REFRESH_8,
  159. DMC_AUTO_REFRESH_9,
  160. DMC_AUTO_REFRESH_10,
  161. DMC_AUTO_REFRESH_11,
  162. DMC_AUTO_REFRESH_12,
  163. DMC_AUTO_REFRESH_13,
  164. DMC_AUTO_REFRESH_14,
  165. DMC_AUTO_REFRESH_15,
  166. DMC_AUTO_REFRESH_16
  167. }DMC_AUTO_REFRESH_T;
  168. /**
  169. * @brief Active-to-active Command Period Select
  170. */
  171. typedef enum
  172. {
  173. DMC_ATA_CMD_1,
  174. DMC_ATA_CMD_2,
  175. DMC_ATA_CMD_3,
  176. DMC_ATA_CMD_4,
  177. DMC_ATA_CMD_5,
  178. DMC_ATA_CMD_6,
  179. DMC_ATA_CMD_7,
  180. DMC_ATA_CMD_8,
  181. DMC_ATA_CMD_9,
  182. DMC_ATA_CMD_10,
  183. DMC_ATA_CMD_11,
  184. DMC_ATA_CMD_12,
  185. DMC_ATA_CMD_13,
  186. DMC_ATA_CMD_14,
  187. DMC_ATA_CMD_15,
  188. DMC_ATA_CMD_16
  189. }DMC_ATA_CMD_T;
  190. /**
  191. * @brief Clock PHASE
  192. */
  193. typedef enum
  194. {
  195. DMC_CLK_PHASE_NORMAL,
  196. DMC_CLK_PHASE_REVERSE
  197. }DMC_CLK_PHASE_T;
  198. /**
  199. * @brief DMC Memory Size
  200. */
  201. typedef enum
  202. {
  203. DMC_MEMORY_SIZE_0,
  204. DMC_MEMORY_SIZE_64KB,
  205. DMC_MEMORY_SIZE_128KB,
  206. DMC_MEMORY_SIZE_256KB,
  207. DMC_MEMORY_SIZE_512KB,
  208. DMC_MEMORY_SIZE_1MB,
  209. DMC_MEMORY_SIZE_2MB,
  210. DMC_MEMORY_SIZE_4MB,
  211. DMC_MEMORY_SIZE_8MB,
  212. DMC_MEMORY_SIZE_16MB,
  213. DMC_MEMORY_SIZE_32MB,
  214. DMC_MEMORY_SIZE_64MB,
  215. DMC_MEMORY_SIZE_128MB,
  216. DMC_MEMORY_SIZE_256MB
  217. }DMC_MEMORY_SIZE_T;
  218. /**
  219. * @brief Open Banks Of Number
  220. */
  221. typedef enum
  222. {
  223. DMC_BANK_NUMBER_1,
  224. DMC_BANK_NUMBER_2,
  225. DMC_BANK_NUMBER_3,
  226. DMC_BANK_NUMBER_4,
  227. DMC_BANK_NUMBER_5,
  228. DMC_BANK_NUMBER_6,
  229. DMC_BANK_NUMBER_7,
  230. DMC_BANK_NUMBER_8,
  231. DMC_BANK_NUMBER_9,
  232. DMC_BANK_NUMBER_10,
  233. DMC_BANK_NUMBER_11,
  234. DMC_BANK_NUMBER_12,
  235. DMC_BANK_NUMBER_13,
  236. DMC_BANK_NUMBER_14,
  237. DMC_BANK_NUMBER_15,
  238. DMC_BANK_NUMBER_16
  239. }DMC_BANK_NUMBER_T;
  240. /**
  241. * @brief Full refresh type
  242. */
  243. typedef enum
  244. {
  245. DMC_REFRESH_ROW_ONE, /*!< Refresh one row */
  246. DMC_REFRESH_ROW_ALL /*!< Refresh all row */
  247. }DMC_REFRESH_T;
  248. /**
  249. * @brief Precharge type
  250. */
  251. typedef enum
  252. {
  253. DMC_PRECHARGE_IM, /*!< Immediate precharge */
  254. DMC_PRECHARGE_DELAY /*!< Delayed precharge */
  255. }DMC_PRECHARE_T;
  256. /**
  257. * @brief WRAP Burst Type
  258. */
  259. typedef enum
  260. {
  261. DMC_WRAPB_4,
  262. DMC_WRAPB_8
  263. }DMC_WRPB_T;
  264. /**@} end of group DMC_Enumerations */
  265. /** @defgroup DMC_Structures Structures
  266. @{
  267. */
  268. /**
  269. * @brief Timing config definition
  270. */
  271. typedef struct
  272. {
  273. uint32_t latencyCAS : 2; /*!< DMC_CAS_LATENCY_T */
  274. uint32_t tRAS : 4; /*!< DMC_RAS_MINIMUM_T */
  275. uint32_t tRCD : 3; /*!< DMC_DELAY_TIME_T */
  276. uint32_t tRP : 3; /*!< DMC_PRECHARGE_T */
  277. uint32_t tWR : 2; /*!< DMC_NEXT_PRECHARGE_T */
  278. uint32_t tARP : 4; /*!< DMC_AUTO_REFRESH_T */
  279. uint32_t tCMD : 4; /*!< DMC_ATA_CMD_T */
  280. uint32_t tXSR : 9; /*!< auto-refresh commands, can be 0x000 to 0x1FF */
  281. uint16_t tRFP : 16; /*!< Refresh period, can be 0x0000 to 0xFFFF */
  282. }DMC_TimingConfig_T;
  283. /**
  284. * @brief Config struct definition
  285. */
  286. typedef struct
  287. {
  288. DMC_MEMORY_SIZE_T memorySize; /*!< Memory size(byte) */
  289. DMC_BANK_WIDTH_T bankWidth; /*!< Number of bank bits */
  290. DMC_ROW_WIDTH_T rowWidth; /*!< Number of row address bits */
  291. DMC_COL_WIDTH_T colWidth; /*!< Number of col address bits */
  292. DMC_CLK_PHASE_T clkPhase; /*!< Clock phase */
  293. DMC_TimingConfig_T timing; /*!< Timing */
  294. }DMC_Config_T;
  295. /**@} end of group DMC_Structures */
  296. /** @defgroup DMC_Functions
  297. @{
  298. */
  299. /* Enable / Disable */
  300. void DMC_Enable(void);
  301. void DMC_Disable(void);
  302. void DMC_EnableInit(void);
  303. /* Global config */
  304. void DMC_Config(DMC_Config_T *dmcConfig);
  305. void DMC_ConfigStructInit(DMC_Config_T *dmcConfig);
  306. /* Address */
  307. void DMC_ConfigBankWidth(DMC_BANK_WIDTH_T bankWidth);
  308. void DMC_ConfigAddrWidth(DMC_ROW_WIDTH_T rowWidth, DMC_COL_WIDTH_T colWidth);
  309. /* Timing */
  310. void DMC_ConfigTiming(DMC_TimingConfig_T *timingConfig);
  311. void DMC_ConfigTimingStructInit(DMC_TimingConfig_T *timingConfig);
  312. void DMC_ConfigStableTimePowerup(uint16_t stableTime);
  313. void DMC_ConfigAutoRefreshNumDuringInit(DMC_AUTO_REFRESH_T num);
  314. void DMC_ConfigRefreshPeriod(uint16_t period);
  315. /* Refresh mode */
  316. void DMC_EixtSlefRefreshMode(void);
  317. void DMC_EnterSlefRefreshMode(void);
  318. /* Accelerate Module */
  319. void DMC_EnableAccelerateModule(void);
  320. void DMC_DisableAccelerateModule(void);
  321. /* Config */
  322. void DMC_ConfigOpenBank(DMC_BANK_NUMBER_T num);
  323. void DMC_EnableUpdateMode(void);
  324. void DMC_EnterPowerdownMode(void);
  325. void DMC_ConfigFullRefreshBeforeSR(DMC_REFRESH_T refresh);
  326. void DMC_ConfigFullRefreshAfterSR(DMC_REFRESH_T refresh);
  327. void DMC_ConfigPrechargeType(DMC_PRECHARE_T precharge);
  328. void DMC_ConfigMemorySize(DMC_MEMORY_SIZE_T memorySize);
  329. void DMC_ConfigClockPhase(DMC_CLK_PHASE_T clkPhase);
  330. void DMC_ConfigWRAPB(DMC_WRPB_T burst);
  331. /* read flag */
  332. uint8_t DMC_ReadSelfRefreshStatus(void);
  333. /**@} end of group DMC_Functions */
  334. /**@} end of group DMC_Driver*/
  335. /**@} end of group APM32E10x_StdPeriphDriver*/
  336. #ifdef __cplusplus
  337. }
  338. #endif
  339. #endif /* __APM32E10X_DMC_H */