apm32f10x_dma.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. /*!
  2. * @file apm32f10x_dma.h
  3. *
  4. * @brief This file contains all the functions prototypes for the DMA firmware library
  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_DMA_H
  26. #define __APM32F10X_DMA_H
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30. #include "apm32f10x.h"
  31. /** @addtogroup Peripherals_Library Standard Peripheral Library
  32. @{
  33. */
  34. /** @addtogroup DMA_Driver DMA Driver
  35. @{
  36. */
  37. /** @addtogroup DMA_Enumerations Enumerations
  38. @{
  39. */
  40. /**
  41. * @brief DMA Transmission direction
  42. */
  43. typedef enum
  44. {
  45. DMA_DIR_PERIPHERAL_SRC,
  46. DMA_DIR_PERIPHERAL_DST
  47. } DMA_DIR_T;
  48. /**
  49. * @brief DMA Peripheral address increment
  50. */
  51. typedef enum
  52. {
  53. DMA_PERIPHERAL_INC_DISABLE,
  54. DMA_PERIPHERAL_INC_ENABLE
  55. } DMA_PERIPHERAL_INC_T;
  56. /**
  57. * @brief DMA Memory address increment
  58. */
  59. typedef enum
  60. {
  61. DMA_MEMORY_INC_DISABLE,
  62. DMA_MEMORY_INC_ENABLE
  63. } DMA_MEMORY_INC_T;
  64. /**
  65. * @brief DMA Peripheral Data Size
  66. */
  67. typedef enum
  68. {
  69. DMA_PERIPHERAL_DATA_SIZE_BYTE,
  70. DMA_PERIPHERAL_DATA_SIZE_HALFWORD,
  71. DMA_PERIPHERAL_DATA_SIZE_WOED
  72. } DMA_PERIPHERAL_DATA_SIZE_T;
  73. /**
  74. * @brief DMA Memory Data Size
  75. */
  76. typedef enum
  77. {
  78. DMA_MEMORY_DATA_SIZE_BYTE,
  79. DMA_MEMORY_DATA_SIZE_HALFWORD,
  80. DMA_MEMORY_DATA_SIZE_WOED
  81. } DMA_MEMORY_DATA_SIZE_T;
  82. /**
  83. * @brief DMA Mode
  84. */
  85. typedef enum
  86. {
  87. DMA_MODE_NORMAL,
  88. DMA_MODE_CIRCULAR
  89. } DMA_LOOP_MODE_T;
  90. /**
  91. * @brief DMA priority level
  92. */
  93. typedef enum
  94. {
  95. DMA_PRIORITY_LOW,
  96. DMA_PRIORITY_MEDIUM,
  97. DMA_PRIORITY_HIGH,
  98. DMA_PRIORITY_VERYHIGH
  99. } DMA_PRIORITY_T;
  100. /**
  101. * @brief DMA Memory to Memory
  102. */
  103. typedef enum
  104. {
  105. DMA_M2MEN_DISABLE,
  106. DMA_M2MEN_ENABLE
  107. } DMA_M2MEN_T;
  108. /**
  109. * @brief DMA interrupt
  110. */
  111. typedef enum
  112. {
  113. DMA_INT_TC = 0x00000002,
  114. DMA_INT_HT = 0x00000004,
  115. DMA_INT_TERR = 0x00000008
  116. } DMA_INT_T;
  117. /**
  118. * @brief DMA Flag
  119. */
  120. typedef enum
  121. {
  122. DMA1_FLAG_GINT1 = 0x00000001,
  123. DMA1_FLAG_TC1 = 0x00000002,
  124. DMA1_FLAG_HT1 = 0x00000004,
  125. DMA1_FLAG_TERR1 = 0x00000008,
  126. DMA1_FLAG_GINT2 = 0x00000010,
  127. DMA1_FLAG_TC2 = 0x00000020,
  128. DMA1_FLAG_HT2 = 0x00000040,
  129. DMA1_FLAG_TERR2 = 0x00000080,
  130. DMA1_FLAG_GINT3 = 0x00000100,
  131. DMA1_FLAG_TC3 = 0x00000200,
  132. DMA1_FLAG_HT3 = 0x00000400,
  133. DMA1_FLAG_TERR3 = 0x00000800,
  134. DMA1_FLAG_GINT4 = 0x00001000,
  135. DMA1_FLAG_TC4 = 0x00002000,
  136. DMA1_FLAG_HT4 = 0x00004000,
  137. DMA1_FLAG_TERR4 = 0x00008000,
  138. DMA1_FLAG_GINT5 = 0x00010000,
  139. DMA1_FLAG_TC5 = 0x00020000,
  140. DMA1_FLAG_HT5 = 0x00040000,
  141. DMA1_FLAG_TERR5 = 0x00080000,
  142. DMA1_FLAG_GINT6 = 0x00100000,
  143. DMA1_FLAG_TC6 = 0x00200000,
  144. DMA1_FLAG_HT6 = 0x00400000,
  145. DMA1_FLAG_TERR6 = 0x00800000,
  146. DMA1_FLAG_GINT7 = 0x01000000,
  147. DMA1_FLAG_TC7 = 0x02000000,
  148. DMA1_FLAG_HT7 = 0x04000000,
  149. DMA1_FLAG_TERR7 = 0x08000000,
  150. DMA2_FLAG_GINT1 = 0x10000001,
  151. DMA2_FLAG_TC1 = 0x10000002,
  152. DMA2_FLAG_HT1 = 0x10000004,
  153. DMA2_FLAG_TERR1 = 0x10000008,
  154. DMA2_FLAG_GINT2 = 0x10000010,
  155. DMA2_FLAG_TC2 = 0x10000020,
  156. DMA2_FLAG_HT2 = 0x10000040,
  157. DMA2_FLAG_TERR2 = 0x10000080,
  158. DMA2_FLAG_GINT3 = 0x10000100,
  159. DMA2_FLAG_TC3 = 0x10000200,
  160. DMA2_FLAG_HT3 = 0x10000400,
  161. DMA2_FLAG_TERR3 = 0x10000800,
  162. DMA2_FLAG_GINT4 = 0x10001000,
  163. DMA2_FLAG_TC4 = 0x10002000,
  164. DMA2_FLAG_HT4 = 0x10004000,
  165. DMA2_FLAG_TERR4 = 0x10008000,
  166. DMA2_FLAG_GINT5 = 0x10010000,
  167. DMA2_FLAG_TC5 = 0x10020000,
  168. DMA2_FLAG_HT5 = 0x10040000,
  169. DMA2_FLAG_TERR5 = 0x10080000
  170. } DMA_FLAG_T;
  171. /**
  172. * @brief DMA Interrupt Flag
  173. */
  174. typedef enum
  175. {
  176. DMA1_INT_FLAG_GINT1 = 0x00000001,
  177. DMA1_INT_FLAG_TC1 = 0x00000002,
  178. DMA1_INT_FLAG_HT1 = 0x00000004,
  179. DMA1_INT_FLAG_TERR1 = 0x00000008,
  180. DMA1_INT_FLAG_GINT2 = 0x00000010,
  181. DMA1_INT_FLAG_TC2 = 0x00000020,
  182. DMA1_INT_FLAG_HT2 = 0x00000040,
  183. DMA1_INT_FLAG_TERR2 = 0x00000080,
  184. DMA1_INT_FLAG_GINT3 = 0x00000100,
  185. DMA1_INT_FLAG_TC3 = 0x00000200,
  186. DMA1_INT_FLAG_HT3 = 0x00000400,
  187. DMA1_INT_FLAG_TERR3 = 0x00000800,
  188. DMA1_INT_FLAG_GINT4 = 0x00001000,
  189. DMA1_INT_FLAG_TC4 = 0x00002000,
  190. DMA1_INT_FLAG_HT4 = 0x00004000,
  191. DMA1_INT_FLAG_TERR4 = 0x00008000,
  192. DMA1_INT_FLAG_GINT5 = 0x00010000,
  193. DMA1_INT_FLAG_TC5 = 0x00020000,
  194. DMA1_INT_FLAG_HT5 = 0x00040000,
  195. DMA1_INT_FLAG_TERR5 = 0x00080000,
  196. DMA1_INT_FLAG_GINT6 = 0x00100000,
  197. DMA1_INT_FLAG_TC6 = 0x00200000,
  198. DMA1_INT_FLAG_HT6 = 0x00400000,
  199. DMA1_INT_FLAG_TERR6 = 0x00800000,
  200. DMA1_INT_FLAG_GINT7 = 0x01000000,
  201. DMA1_INT_FLAG_TC7 = 0x02000000,
  202. DMA1_INT_FLAG_HT7 = 0x04000000,
  203. DMA1_INT_FLAG_TERR7 = 0x08000000,
  204. DMA2_INT_FLAG_GINT1 = 0x10000001,
  205. DMA2_INT_FLAG_TC1 = 0x10000002,
  206. DMA2_INT_FLAG_HT1 = 0x10000004,
  207. DMA2_INT_FLAG_TERR1 = 0x10000008,
  208. DMA2_INT_FLAG_GINT2 = 0x10000010,
  209. DMA2_INT_FLAG_TC2 = 0x10000020,
  210. DMA2_INT_FLAG_HT2 = 0x10000040,
  211. DMA2_INT_FLAG_TERR2 = 0x10000080,
  212. DMA2_INT_FLAG_GINT3 = 0x10000100,
  213. DMA2_INT_FLAG_TC3 = 0x10000200,
  214. DMA2_INT_FLAG_HT3 = 0x10000400,
  215. DMA2_INT_FLAG_TERR3 = 0x10000800,
  216. DMA2_INT_FLAG_GINT4 = 0x10001000,
  217. DMA2_INT_FLAG_TC4 = 0x10002000,
  218. DMA2_INT_FLAG_HT4 = 0x10004000,
  219. DMA2_INT_FLAG_TERR4 = 0x10008000,
  220. DMA2_INT_FLAG_GINT5 = 0x10010000,
  221. DMA2_INT_FLAG_TC5 = 0x10020000,
  222. DMA2_INT_FLAG_HT5 = 0x10040000,
  223. DMA2_INT_FLAG_TERR5 = 0x10080000
  224. } DMA_INT_FLAG_T;
  225. /**@} end of group DMA_Enumerations*/
  226. /** @addtogroup DMA_Structure Data Structure
  227. @{
  228. */
  229. /**
  230. * @brief DMA Config struct definition
  231. */
  232. typedef struct
  233. {
  234. uint32_t peripheralBaseAddr;
  235. uint32_t memoryBaseAddr;
  236. DMA_DIR_T dir;
  237. uint32_t bufferSize;
  238. DMA_PERIPHERAL_INC_T peripheralInc;
  239. DMA_MEMORY_INC_T memoryInc;
  240. DMA_PERIPHERAL_DATA_SIZE_T peripheralDataSize;
  241. DMA_MEMORY_DATA_SIZE_T memoryDataSize;
  242. DMA_LOOP_MODE_T loopMode;
  243. DMA_PRIORITY_T priority;
  244. DMA_M2MEN_T M2M;
  245. } DMA_Config_T;
  246. /**@} end of group DMA_Structure*/
  247. /** @addtogroup DMA_Fuctions Fuctions
  248. @{
  249. */
  250. /** Reset and configuration */
  251. void DMA_Reset(DMA_Channel_T *channel);
  252. void DMA_Config(DMA_Channel_T* channel, DMA_Config_T* dmaConfig);
  253. void DMA_ConfigStructInit( DMA_Config_T* dmaConfig);
  254. void DMA_Enable(DMA_Channel_T *channel);
  255. void DMA_Disable(DMA_Channel_T *channel);
  256. /** Data number */
  257. void DMA_ConfigDataNumber(DMA_Channel_T *channel, uint16_t dataNumber);
  258. uint16_t DMA_ReadDataNumber(DMA_Channel_T *channel);
  259. /** Interrupt and flag */
  260. void DMA_EnableInterrupt(DMA_Channel_T *channel, uint32_t interrupt);
  261. void DMA_DisableInterrupt(DMA_Channel_T *channel, uint32_t interrupt);
  262. uint8_t DMA_ReadStatusFlag(DMA_FLAG_T flag);
  263. void DMA_ClearStatusFlag(uint32_t flag);
  264. uint8_t DMA_ReadIntFlag(DMA_INT_FLAG_T flag);
  265. void DMA_ClearIntFlag(uint32_t flag);
  266. /**@} end of group DMA_Fuctions*/
  267. /**@} end of group DMA_Driver*/
  268. /**@} end of group Peripherals_Library*/
  269. #ifdef __cplusplus
  270. }
  271. #endif
  272. #endif /* __APM32F10X_DMA_H */