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