apm32f10x_dmc.h 8.2 KB

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