apm32f0xx_dma.h 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. /*!
  2. * @file apm32f0xx_dma.h
  3. *
  4. * @brief This file contains all the functions prototypes for the DMA firmware
  5. *
  6. * @version V1.0.3
  7. *
  8. * @date 2022-09-20
  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. /* Define to prevent recursive inclusion */
  26. #ifndef __APM32F0XX_DMA_H
  27. #define __APM32F0XX_DMA_H
  28. #ifdef __cplusplus
  29. extern "C" {
  30. #endif
  31. /* Includes */
  32. #include "apm32f0xx.h"
  33. /** @addtogroup APM32F0xx_StdPeriphDriver
  34. @{
  35. */
  36. /** @addtogroup DMA_Driver
  37. @{
  38. */
  39. /** @defgroup DMA_Macros Macros
  40. @{
  41. */
  42. /**@} end of group DMA_Macros*/
  43. /** @defgroup DMA_Enumerations Enumerations
  44. @{
  45. */
  46. /**
  47. * @brief DMA data transfer direction
  48. */
  49. typedef enum
  50. {
  51. DMA_DIR_PERIPHERAL = ((uint8_t)0), /*!< Peripheral to memory */
  52. DMA_DIR_MEMORY = ((uint8_t)1), /*!< Memory to peripheral */
  53. } DMA_DIR_T;
  54. /**
  55. * @brief DMA peripheral increment mode
  56. */
  57. typedef enum
  58. {
  59. DMA_PERIPHERAL_INC_DISABLE = ((uint8_t)0), /*!< Disable peripheral address increment mode */
  60. DMA_PERIPHERAL_INC_ENABLE = ((uint8_t)1), /*!< Enable peripheral address increment mode */
  61. } DMA_PERIPHERAL_INC_T;
  62. /**
  63. * @brief DMA memory increment mode
  64. */
  65. typedef enum
  66. {
  67. DMA_MEMORY_INC_DISABLE = ((uint8_t)0), /*!< Disable memory address increment mode */
  68. DMA_MEMORY_INC_ENABLE = ((uint8_t)1), /*!< Enable memory address increment mode */
  69. } DMA_MEMORY_INC_T;
  70. /**
  71. * @brief DMA peripheral data size
  72. */
  73. typedef enum
  74. {
  75. DMA_PERIPHERAL_DATASIZE_BYTE = ((uint8_t)0x00), /*!< Set peripheral data size to byte */
  76. DMA_PERIPHERAL_DATASIZE_HALFWORD = ((uint8_t)0x01), /*!< Set peripheral data size to half-word */
  77. DMA_PERIPHERAL_DATASIZE_WORD = ((uint8_t)0x02), /*!< Set peripheral data size to word */
  78. } DMA_PERIPHERAL_DATASIZE_T;
  79. /**
  80. * @brief DMA memory data size
  81. */
  82. typedef enum
  83. {
  84. DMA_MEMORY_DATASIZE_BYTE = ((uint8_t)0x00), /*!< Set memory data size to byte */
  85. DMA_MEMORY_DATASIZE_HALFWORD = ((uint8_t)0x01), /*!< Set memory data size to half-word */
  86. DMA_MEMORY_DATASIZE_WORD = ((uint8_t)0x02), /*!< Set memory data size to word */
  87. } DMA_MEMORY_DATASIZE_T;
  88. /**
  89. * @brief DMA circular mode
  90. */
  91. typedef enum
  92. {
  93. DMA_CIRCULAR_DISABLE = ((uint8_t)0), /*!< Disable circular mode */
  94. DMA_CIRCULAR_ENABLE = ((uint8_t)1), /*!< Enable circular mode */
  95. } DMA_CIRCULAR_T;
  96. /**
  97. * @brief DMA priority level
  98. */
  99. typedef enum
  100. {
  101. DMA_PRIORITY_LEVEL_LOW = ((uint8_t)0x00), /*!< Set priority level to low */
  102. DMA_PRIORITY_LEVEL_MEDIUM = ((uint8_t)0x01), /*!< Set priority level to medium */
  103. DMA_PRIORITY_LEVEL_HIGHT = ((uint8_t)0x02), /*!< Set priority level to high */
  104. DMA_PRIORITY_LEVEL_VERYHIGH = ((uint8_t)0x03), /*!< Set priority level to very high */
  105. } DMA_PRIORITY_LEVEL_T;
  106. /**
  107. * @brief DMA memory to memory
  108. */
  109. typedef enum
  110. {
  111. DMA_M2M_DISABLE = ((uint8_t)0), /*!< Disable memory to memory mode */
  112. DMA_M2M_ENABLE = ((uint8_t)1), /*!< Enable memory to memory mode */
  113. } DMA_M2M_T;
  114. /**
  115. * @brief DMA channels remapping definition
  116. */
  117. typedef enum
  118. {
  119. DMA1_CHANNEL1_DEFAULT = (uint32_t)0x00000000, /*!< DMA1 channel1 remapping DEFAULT */
  120. DMA1_CHANNEL1_ADC = (uint32_t)0x00000001, /*!< DMA1 channel1 remapping ADC */
  121. DMA1_CHANNEL1_TMR17_CH1 = (uint32_t)0x00000007, /*!< DMA1 channel1 remapping TMR17_CH1 */
  122. DMA1_CHANNEL1_TMR17_UP = (uint32_t)0x00000007, /*!< DMA1 channel1 remapping TMR17_UP */
  123. DMA1_CHANNEL1_USART1_RX = (uint32_t)0x00000008, /*!< DMA1 channel1 remapping USART1_RX */
  124. DMA1_CHANNEL1_USART2_RX = (uint32_t)0x00000009, /*!< DMA1 channel1 remapping USART2_RX */
  125. DMA1_CHANNEL1_USART3_RX = (uint32_t)0x0000000A, /*!< DMA1 channel1 remapping USART3_RX */
  126. DMA1_CHANNEL1_USART4_RX = (uint32_t)0x0000000B, /*!< DMA1 channel1 remapping USART4_RX */
  127. DMA1_CHANNEL1_USART5_RX = (uint32_t)0x0000000C, /*!< DMA1 channel1 remapping USART5_RX */
  128. DMA1_CHANNEL1_USART6_RX = (uint32_t)0x0000000D, /*!< DMA1 channel1 remapping USART6_RX */
  129. DMA1_CHANNEL1_USART7_RX = (uint32_t)0x0000000E, /*!< DMA1 channel1 remapping USART7_RX */
  130. DMA1_CHANNEL1_USART8_RX = (uint32_t)0x0000000F, /*!< DMA1 channel1 remapping USART8_RX */
  131. DMA1_CHANNEL2_DEFAULT = (uint32_t)0x10000000, /*!< DMA1 channel2 remapping DEFAULT */
  132. DMA1_CHANNEL2_ADC = (uint32_t)0x10000010, /*!< DMA1 channel2 remapping ADC */
  133. DMA1_CHANNEL2_I2C1_TX = (uint32_t)0x10000020, /*!< DMA1 channel2 remapping I2C1_TX */
  134. DMA1_CHANNEL2_SPI1_RX = (uint32_t)0x10000030, /*!< DMA1 channel2 remapping SPI1_RX */
  135. DMA1_CHANNEL2_TMR1_CH1 = (uint32_t)0x10000040, /*!< DMA1 channel2 remapping TMR1_CH1 */
  136. DMA1_CHANNEL2_TMR17_CH1 = (uint32_t)0x10000070, /*!< DMA1 channel2 remapping TMR17_CH1 */
  137. DMA1_CHANNEL2_TMR17_UP = (uint32_t)0x10000070, /*!< DMA1 channel2 remapping TMR17_UP */
  138. DMA1_CHANNEL2_USART1_TX = (uint32_t)0x10000080, /*!< DMA1 channel2 remapping USART1_TX */
  139. DMA1_CHANNEL2_USART2_TX = (uint32_t)0x10000090, /*!< DMA1 channel2 remapping USART2_TX */
  140. DMA1_CHANNEL2_USART3_TX = (uint32_t)0x100000A0, /*!< DMA1 channel2 remapping USART3_TX */
  141. DMA1_CHANNEL2_USART4_TX = (uint32_t)0x100000B0, /*!< DMA1 channel2 remapping USART4_TX */
  142. DMA1_CHANNEL2_USART5_TX = (uint32_t)0x100000C0, /*!< DMA1 channel2 remapping USART5_TX */
  143. DMA1_CHANNEL2_USART6_TX = (uint32_t)0x100000D0, /*!< DMA1 channel2 remapping USART6_TX */
  144. DMA1_CHANNEL2_USART7_TX = (uint32_t)0x100000E0, /*!< DMA1 channel2 remapping USART7_TX */
  145. DMA1_CHANNEL2_USART8_TX = (uint32_t)0x100000F0, /*!< DMA1 channel2 remapping USART8_TX */
  146. DMA1_CHANNEL3_DEFAULT = (uint32_t)0x20000000, /*!< DMA1 channel3 remapping DEFAULT */
  147. DMA1_CHANNEL3_TMR6_UP = (uint32_t)0x20000100, /*!< DMA1 channel3 remapping TMR6_UP */
  148. DMA1_CHANNEL3_DAC_CH1 = (uint32_t)0x20000100, /*!< DMA1 channel3 remapping DAC_CH1 */
  149. DMA1_CHANNEL3_I2C1_RX = (uint32_t)0x20000200, /*!< DMA1 channel3 remapping I2C1_RX */
  150. DMA1_CHANNEL3_SPI1_TX = (uint32_t)0x20000300, /*!< DMA1 channel3 remapping SPI1_TX */
  151. DMA1_CHANNEL3_TMR1_CH2 = (uint32_t)0x20000400, /*!< DMA1 channel3 remapping TMR1_CH2 */
  152. DMA1_CHANNEL3_TMR2_CH2 = (uint32_t)0x20000500, /*!< DMA1 channel3 remapping TMR2_CH2 */
  153. DMA1_CHANNEL3_TMR16_CH1 = (uint32_t)0x20000700, /*!< DMA1 channel3 remapping TMR16_CH1 */
  154. DMA1_CHANNEL3_TMR16_UP = (uint32_t)0x20000700, /*!< DMA1 channel3 remapping TMR16_UP */
  155. DMA1_CHANNEL3_USART1_RX = (uint32_t)0x20000800, /*!< DMA1 channel3 remapping USART1_RX */
  156. DMA1_CHANNEL3_USART2_RX = (uint32_t)0x20000900, /*!< DMA1 channel3 remapping USART2_RX */
  157. DMA1_CHANNEL3_USART3_RX = (uint32_t)0x20000A00, /*!< DMA1 channel3 remapping USART3_RX */
  158. DMA1_CHANNEL3_USART4_RX = (uint32_t)0x20000B00, /*!< DMA1 channel3 remapping USART4_RX */
  159. DMA1_CHANNEL3_USART5_RX = (uint32_t)0x20000C00, /*!< DMA1 channel3 remapping USART5_RX */
  160. DMA1_CHANNEL3_USART6_RX = (uint32_t)0x20000D00, /*!< DMA1 channel3 remapping USART6_RX */
  161. DMA1_CHANNEL3_USART7_RX = (uint32_t)0x20000E00, /*!< DMA1 channel3 remapping USART7_RX */
  162. DMA1_CHANNEL3_USART8_RX = (uint32_t)0x20000F00, /*!< DMA1 channel3 remapping USART8_RX */
  163. DMA1_CHANNEL4_DEFAULT = (uint32_t)0x30000000, /*!< DMA1 channel4 remapping DEFAULT */
  164. DMA1_CHANNEL4_TMR7_UP = (uint32_t)0x30001000, /*!< DMA1 channel4 remapping TMR7_UP */
  165. DMA1_CHANNEL4_DAC_CH2 = (uint32_t)0x30001000, /*!< DMA1 channel4 remapping DAC_CH2 */
  166. DMA1_CHANNEL4_I2C2_TX = (uint32_t)0x30002000, /*!< DMA1 channel4 remapping I2C2_TX */
  167. DMA1_CHANNEL4_SPI2_RX = (uint32_t)0x30003000, /*!< DMA1 channel4 remapping SPI2_RX */
  168. DMA1_CHANNEL4_TMR2_CH4 = (uint32_t)0x30005000, /*!< DMA1 channel4 remapping TMR2_CH4 */
  169. DMA1_CHANNEL4_TMR3_CH1 = (uint32_t)0x30006000, /*!< DMA1 channel4 remapping TMR3_CH1 */
  170. DMA1_CHANNEL4_TMR3_TRIG = (uint32_t)0x30006000, /*!< DMA1 channel4 remapping TMR3_TRIG */
  171. DMA1_CHANNEL4_TMR16_CH1 = (uint32_t)0x30007000, /*!< DMA1 channel4 remapping TMR16_CH1 */
  172. DMA1_CHANNEL4_TMR16_UP = (uint32_t)0x30007000, /*!< DMA1 channel4 remapping TMR16_UP */
  173. DMA1_CHANNEL4_USART1_TX = (uint32_t)0x30008000, /*!< DMA1 channel4 remapping USART1_TX */
  174. DMA1_CHANNEL4_USART2_TX = (uint32_t)0x30009000, /*!< DMA1 channel4 remapping USART2_TX */
  175. DMA1_CHANNEL4_USART3_TX = (uint32_t)0x3000A000, /*!< DMA1 channel4 remapping USART3_TX */
  176. DMA1_CHANNEL4_USART4_TX = (uint32_t)0x3000B000, /*!< DMA1 channel4 remapping USART4_TX */
  177. DMA1_CHANNEL4_USART5_TX = (uint32_t)0x3000C000, /*!< DMA1 channel4 remapping USART5_TX */
  178. DMA1_CHANNEL4_USART6_TX = (uint32_t)0x3000D000, /*!< DMA1 channel4 remapping USART6_TX */
  179. DMA1_CHANNEL4_USART7_TX = (uint32_t)0x3000E000, /*!< DMA1 channel4 remapping USART7_TX */
  180. DMA1_CHANNEL4_USART8_TX = (uint32_t)0x3000F000, /*!< DMA1 channel4 remapping USART8_TX */
  181. DMA1_CHANNEL5_DEFAULT = (uint32_t)0x40000000, /*!< DMA1 channel5 remapping DEFAULT */
  182. DMA1_CHANNEL5_I2C2_RX = (uint32_t)0x40020000, /*!< DMA1 channel5 remapping I2C2_RX */
  183. DMA1_CHANNEL5_SPI2_TX = (uint32_t)0x40030000, /*!< DMA1 channel5 remapping SPI2_TX */
  184. DMA1_CHANNEL5_TMR1_CH3 = (uint32_t)0x40040000, /*!< DMA1 channel5 remapping TMR1_CH3 */
  185. DMA1_CHANNEL5_USART1_RX = (uint32_t)0x40080000, /*!< DMA1 channel5 remapping USART1_RX */
  186. DMA1_CHANNEL5_USART2_RX = (uint32_t)0x40090000, /*!< DMA1 channel5 remapping USART2_RX */
  187. DMA1_CHANNEL5_USART3_RX = (uint32_t)0x400A0000, /*!< DMA1 channel5 remapping USART3_RX */
  188. DMA1_CHANNEL5_USART4_RX = (uint32_t)0x400B0000, /*!< DMA1 channel5 remapping USART4_RX */
  189. DMA1_CHANNEL5_USART5_RX = (uint32_t)0x400C0000, /*!< DMA1 channel5 remapping USART5_RX */
  190. DMA1_CHANNEL5_USART6_RX = (uint32_t)0x400D0000, /*!< DMA1 channel5 remapping USART6_RX */
  191. DMA1_CHANNEL5_USART7_RX = (uint32_t)0x400E0000, /*!< DMA1 channel5 remapping USART7_RX */
  192. DMA1_CHANNEL5_USART8_RX = (uint32_t)0x400F0000, /*!< DMA1 channel5 remapping USART8_RX */
  193. DMA1_CHANNEL6_DEFAULT = (uint32_t)0x50000000, /*!< DMA1 channel6 remapping DEFAULT */
  194. DMA1_CHANNEL6_I2C1_TX = (uint32_t)0x50200000, /*!< DMA1 channel6 remapping I2C1_TX */
  195. DMA1_CHANNEL6_SPI2_RX = (uint32_t)0x50300000, /*!< DMA1 channel6 remapping SPI2_RX */
  196. DMA1_CHANNEL6_TMR1_CH1 = (uint32_t)0x50400000, /*!< DMA1 channel6 remapping TMR1_CH1 */
  197. DMA1_CHANNEL6_TMR1_CH2 = (uint32_t)0x50400000, /*!< DMA1 channel6 remapping TMR1_CH2 */
  198. DMA1_CHANNEL6_TMR1_CH3 = (uint32_t)0x50400000, /*!< DMA1 channel6 remapping TMR1_CH3 */
  199. DMA1_CHANNEL6_TMR3_CH1 = (uint32_t)0x50600000, /*!< DMA1 channel6 remapping TMR3_CH1 */
  200. DMA1_CHANNEL6_TMR3_TRIG = (uint32_t)0x50600000, /*!< DMA1 channel6 remapping TMR3_TRIG */
  201. DMA1_CHANNEL6_TMR16_CH1 = (uint32_t)0x50700000, /*!< DMA1 channel6 remapping TMR16_CH1 */
  202. DMA1_CHANNEL6_TMR16_UP = (uint32_t)0x50700000, /*!< DMA1 channel6 remapping TMR16_UP */
  203. DMA1_CHANNEL6_USART1_RX = (uint32_t)0x50800000, /*!< DMA1 channel6 remapping USART1_RX */
  204. DMA1_CHANNEL6_USART2_RX = (uint32_t)0x50900000, /*!< DMA1 channel6 remapping USART2_RX */
  205. DMA1_CHANNEL6_USART3_RX = (uint32_t)0x50A00000, /*!< DMA1 channel6 remapping USART3_RX */
  206. DMA1_CHANNEL6_USART4_RX = (uint32_t)0x50B00000, /*!< DMA1 channel6 remapping USART4_RX */
  207. DMA1_CHANNEL6_USART5_RX = (uint32_t)0x50C00000, /*!< DMA1 channel6 remapping USART5_RX */
  208. DMA1_CHANNEL6_USART6_RX = (uint32_t)0x50D00000, /*!< DMA1 channel6 remapping USART6_RX */
  209. DMA1_CHANNEL6_USART7_RX = (uint32_t)0x50E00000, /*!< DMA1 channel6 remapping USART7_RX */
  210. DMA1_CHANNEL6_USART8_RX = (uint32_t)0x50F00000, /*!< DMA1 channel6 remapping USART8_RX */
  211. DMA1_CHANNEL7_DEFAULT = (uint32_t)0x60000000, /*!< DMA1 channel7 remapping DEFAULT */
  212. DMA1_CHANNEL7_I2C1_RX = (uint32_t)0x62000000, /*!< DMA1 channel7 remapping I2C1_RX */
  213. DMA1_CHANNEL7_SPI2_TX = (uint32_t)0x63000000, /*!< DMA1 channel7 remapping SPI2_TX */
  214. DMA1_CHANNEL7_TMR2_CH2 = (uint32_t)0x65000000, /*!< DMA1 channel7 remapping TMR2_CH2 */
  215. DMA1_CHANNEL7_TMR2_CH4 = (uint32_t)0x65000000, /*!< DMA1 channel7 remapping TMR2_CH4 */
  216. DMA1_CHANNEL7_TMR17_CH1 = (uint32_t)0x67000000, /*!< DMA1 channel7 remapping TMR17_CH1 */
  217. DMA1_CHANNEL7_TMR17_UP = (uint32_t)0x67000000, /*!< DMA1 channel7 remapping TMR17_UP */
  218. DMA1_CHANNEL7_USART1_TX = (uint32_t)0x68000000, /*!< DMA1 channel7 remapping USART1_TX */
  219. DMA1_CHANNEL7_USART2_TX = (uint32_t)0x69000000, /*!< DMA1 channel7 remapping USART2_TX */
  220. DMA1_CHANNEL7_USART3_TX = (uint32_t)0x6A000000, /*!< DMA1 channel7 remapping USART3_TX */
  221. DMA1_CHANNEL7_USART4_TX = (uint32_t)0x6B000000, /*!< DMA1 channel7 remapping USART4_TX */
  222. DMA1_CHANNEL7_USART5_TX = (uint32_t)0x6C000000, /*!< DMA1 channel7 remapping USART5_TX */
  223. DMA1_CHANNEL7_USART6_TX = (uint32_t)0x6D000000, /*!< DMA1 channel7 remapping USART6_TX */
  224. DMA1_CHANNEL7_USART7_TX = (uint32_t)0x6E000000, /*!< DMA1 channel7 remapping USART7_TX */
  225. DMA1_CHANNEL7_USART8_TX = (uint32_t)0x6F000000, /*!< DMA1 channel7 remapping USART8_TX */
  226. DMA2_CHANNEL1_DEFAULT = (uint32_t)0x00000000, /*!< DMA2 channel1 remapping DEFAULT */
  227. DMA2_CHANNEL1_I2C2_TX = (uint32_t)0x00000002, /*!< DMA2 channel1 remapping I2C2_TX */
  228. DMA2_CHANNEL1_USART1_TX = (uint32_t)0x00000008, /*!< DMA2 channel1 remapping USART1_TX */
  229. DMA2_CHANNEL1_USART2_TX = (uint32_t)0x00000009, /*!< DMA2 channel1 remapping USART2_TX */
  230. DMA2_CHANNEL1_USART3_TX = (uint32_t)0x0000000A, /*!< DMA2 channel1 remapping USART3_TX */
  231. DMA2_CHANNEL1_USART4_TX = (uint32_t)0x0000000B, /*!< DMA2 channel1 remapping USART4_TX */
  232. DMA2_CHANNEL1_USART5_TX = (uint32_t)0x0000000C, /*!< DMA2 channel1 remapping USART5_TX */
  233. DMA2_CHANNEL1_USART6_TX = (uint32_t)0x0000000D, /*!< DMA2 channel1 remapping USART6_TX */
  234. DMA2_CHANNEL1_USART7_TX = (uint32_t)0x0000000E, /*!< DMA2 channel1 remapping USART7_TX */
  235. DMA2_CHANNEL1_USART8_TX = (uint32_t)0x0000000F, /*!< DMA2 channel1 remapping USART8_TX */
  236. DMA2_CHANNEL2_DEFAULT = (uint32_t)0x00000000, /*!< DMA2 channel2 remapping DEFAULT */
  237. DMA2_CHANNEL2_I2C2_RX = (uint32_t)0x00000020, /*!< DMA2 channel2 remapping I2C2_RX */
  238. DMA2_CHANNEL2_USART1_RX = (uint32_t)0x00000080, /*!< DMA2 channel2 remapping USART1_RX */
  239. DMA2_CHANNEL2_USART2_RX = (uint32_t)0x00000090, /*!< DMA2 channel2 remapping USART2_RX */
  240. DMA2_CHANNEL2_USART3_RX = (uint32_t)0x000000A0, /*!< DMA2 channel2 remapping USART3_RX */
  241. DMA2_CHANNEL2_USART4_RX = (uint32_t)0x000000B0, /*!< DMA2 channel2 remapping USART4_RX */
  242. DMA2_CHANNEL2_USART5_RX = (uint32_t)0x000000C0, /*!< DMA2 channel2 remapping USART5_RX */
  243. DMA2_CHANNEL2_USART6_RX = (uint32_t)0x000000D0, /*!< DMA2 channel2 remapping USART6_RX */
  244. DMA2_CHANNEL2_USART7_RX = (uint32_t)0x000000E0, /*!< DMA2 channel2 remapping USART7_RX */
  245. DMA2_CHANNEL2_USART8_RX = (uint32_t)0x000000F0, /*!< DMA2 channel2 remapping USART8_RX */
  246. DMA2_CHANNEL3_DEFAULT = (uint32_t)0x00000000, /*!< DMA2 channel3 remapping DEFAULT */
  247. DMA2_CHANNEL3_TMR6_UP = (uint32_t)0x00000100, /*!< DMA2 channel3 remapping TMR6_UP */
  248. DMA2_CHANNEL3_DAC_CH1 = (uint32_t)0x00000100, /*!< DMA2 channel3 remapping DAC_CH1 */
  249. DMA2_CHANNEL3_SPI1_RX = (uint32_t)0x00000300, /*!< DMA2 channel3 remapping SPI1_RX */
  250. DMA2_CHANNEL3_USART1_RX = (uint32_t)0x00000800, /*!< DMA2 channel3 remapping USART1_RX */
  251. DMA2_CHANNEL3_USART2_RX = (uint32_t)0x00000900, /*!< DMA2 channel3 remapping USART2_RX */
  252. DMA2_CHANNEL3_USART3_RX = (uint32_t)0x00000A00, /*!< DMA2 channel3 remapping USART3_RX */
  253. DMA2_CHANNEL3_USART4_RX = (uint32_t)0x00000B00, /*!< DMA2 channel3 remapping USART4_RX */
  254. DMA2_CHANNEL3_USART5_RX = (uint32_t)0x00000C00, /*!< DMA2 channel3 remapping USART5_RX */
  255. DMA2_CHANNEL3_USART6_RX = (uint32_t)0x00000D00, /*!< DMA2 channel3 remapping USART6_RX */
  256. DMA2_CHANNEL3_USART7_RX = (uint32_t)0x00000E00, /*!< DMA2 channel3 remapping USART7_RX */
  257. DMA2_CHANNEL3_USART8_RX = (uint32_t)0x00000F00, /*!< DMA2 channel3 remapping USART8_RX */
  258. DMA2_CHANNEL4_DEFAULT = (uint32_t)0x00000000, /*!< DMA2 channel4 remapping DEFAULT */
  259. DMA2_CHANNEL4_TMR7_UP = (uint32_t)0x00001000, /*!< DMA2 channel4 remapping TMR7_UP */
  260. DMA2_CHANNEL4_DAC_CH2 = (uint32_t)0x00001000, /*!< DMA2 channel4 remapping DAC_CH2 */
  261. DMA2_CHANNEL4_SPI1_TX = (uint32_t)0x00003000, /*!< DMA2 channel4 remapping SPI1_TX */
  262. DMA2_CHANNEL4_USART1_TX = (uint32_t)0x00008000, /*!< DMA2 channel4 remapping USART1_TX */
  263. DMA2_CHANNEL4_USART2_TX = (uint32_t)0x00009000, /*!< DMA2 channel4 remapping USART2_TX */
  264. DMA2_CHANNEL4_USART3_TX = (uint32_t)0x0000A000, /*!< DMA2 channel4 remapping USART3_TX */
  265. DMA2_CHANNEL4_USART4_TX = (uint32_t)0x0000B000, /*!< DMA2 channel4 remapping USART4_TX */
  266. DMA2_CHANNEL4_USART5_TX = (uint32_t)0x0000C000, /*!< DMA2 channel4 remapping USART5_TX */
  267. DMA2_CHANNEL4_USART6_TX = (uint32_t)0x0000D000, /*!< DMA2 channel4 remapping USART6_TX */
  268. DMA2_CHANNEL4_USART7_TX = (uint32_t)0x0000E000, /*!< DMA2 channel4 remapping USART7_TX */
  269. DMA2_CHANNEL4_USART8_TX = (uint32_t)0x0000F000, /*!< DMA2 channel4 remapping USART8_TX */
  270. DMA2_CHANNEL5_DEFAULT = (uint32_t)0x00000000, /*!< DMA2 channel5 remapping DEFAULT */
  271. DMA2_CHANNEL5_ADC = (uint32_t)0x00010000, /*!< DMA2 channel5 remapping ADC */
  272. DMA2_CHANNEL5_USART1_TX = (uint32_t)0x00080000, /*!< DMA2 channel5 remapping USART1_TX */
  273. DMA2_CHANNEL5_USART2_TX = (uint32_t)0x00090000, /*!< DMA2 channel5 remapping USART2_TX */
  274. DMA2_CHANNEL5_USART3_TX = (uint32_t)0x000A0000, /*!< DMA2 channel5 remapping USART3_TX */
  275. DMA2_CHANNEL5_USART4_TX = (uint32_t)0x000B0000, /*!< DMA2 channel5 remapping USART4_TX */
  276. DMA2_CHANNEL5_USART5_TX = (uint32_t)0x000C0000, /*!< DMA2 channel5 remapping USART5_TX */
  277. DMA2_CHANNEL5_USART6_TX = (uint32_t)0x000D0000, /*!< DMA2 channel5 remapping USART6_TX */
  278. DMA2_CHANNEL5_USART7_TX = (uint32_t)0x000E0000, /*!< DMA2 channel5 remapping USART7_TX */
  279. DMA2_CHANNEL5_USART8_TX = (uint32_t)0x000F0000, /*!< DMA2 channel5 remapping USART8_TX */
  280. } DMA_CHANNEL_REMAP_T;
  281. /**
  282. * @brief DMA flag definition
  283. */
  284. typedef enum
  285. {
  286. DMA1_FLAG_AL1 = ((uint32_t)0x00000001), /*!< Channel 1 All flag */
  287. DMA1_FLAG_TF1 = ((uint32_t)0X00000002), /*!< Channel 1 Transfer Complete flag */
  288. DMA1_FLAG_HT1 = ((uint32_t)0X00000004), /*!< Channel 1 Half Transfer Complete flag */
  289. DMA1_FLAG_TE1 = ((uint32_t)0X00000008), /*!< Channel 1 Transfer Error flag */
  290. DMA1_FLAG_AL2 = ((uint32_t)0x00000010), /*!< Channel 2 All flag */
  291. DMA1_FLAG_TF2 = ((uint32_t)0x00000020), /*!< Channel 2 Transfer Complete flag */
  292. DMA1_FLAG_HT2 = ((uint32_t)0x00000040), /*!< Channel 2 Half Transfer Complete flag */
  293. DMA1_FLAG_TE2 = ((uint32_t)0x00000080), /*!< Channel 2 Transfer Error flag */
  294. DMA1_FLAG_AL3 = ((uint32_t)0x00000100), /*!< Channel 3 All flag */
  295. DMA1_FLAG_TF3 = ((uint32_t)0x00000200), /*!< Channel 3 Transfer Complete flag */
  296. DMA1_FLAG_HT3 = ((uint32_t)0x00000400), /*!< Channel 3 Half Transfer Complete flag */
  297. DMA1_FLAG_TE3 = ((uint32_t)0x00000800), /*!< Channel 3 Transfer Error flag */
  298. DMA1_FLAG_AL4 = ((uint32_t)0x00001000), /*!< Channel 4 All flag */
  299. DMA1_FLAG_TF4 = ((uint32_t)0x00002000), /*!< Channel 4 Transfer Complete flag */
  300. DMA1_FLAG_HT4 = ((uint32_t)0x00004000), /*!< Channel 4 Half Transfer Complete flag */
  301. DMA1_FLAG_TE4 = ((uint32_t)0x00008000), /*!< Channel 4 Transfer Error flag */
  302. DMA1_FLAG_AL5 = ((uint32_t)0x00010000), /*!< Channel 5 All flag */
  303. DMA1_FLAG_TF5 = ((uint32_t)0x00020000), /*!< Channel 5 Transfer Complete flag */
  304. DMA1_FLAG_HT5 = ((uint32_t)0x00040000), /*!< Channel 5 Half Transfer Complete flag */
  305. DMA1_FLAG_TE5 = ((uint32_t)0x00080000), /*!< Channel 5 Transfer Error flag */
  306. /* Only for APM32F072 and APM32F091 devices */
  307. DMA1_FLAG_AL6 = ((uint32_t)0x00100000), /*!< Channel 6 All flag */
  308. DMA1_FLAG_TF6 = ((uint32_t)0x00200000), /*!< Channel 6 Transfer Complete flag */
  309. DMA1_FLAG_HT6 = ((uint32_t)0x00400000), /*!< Channel 6 Half Transfer Complete flag */
  310. DMA1_FLAG_TE6 = ((uint32_t)0x00800000), /*!< Channel 6 Transfer Error flag */
  311. /* Only for APM32F072 and APM32F091 devices */
  312. DMA1_FLAG_AL7 = ((uint32_t)0x01000000), /*!< Channel 7 All flag */
  313. DMA1_FLAG_TF7 = ((uint32_t)0x02000000), /*!< Channel 7 Transfer Complete flag */
  314. DMA1_FLAG_HT7 = ((uint32_t)0x04000000), /*!< Channel 7 Half Transfer Complete flag */
  315. DMA1_FLAG_TE7 = ((uint32_t)0x08000000), /*!< Channel 7 Transfer Error flag */
  316. /* Only for APM32F091 devices */
  317. DMA2_FLAG_AL1 = ((uint32_t)0x10000001), /*!< Channel 1 All flag */
  318. DMA2_FLAG_TF1 = ((uint32_t)0X00000002), /*!< Channel 1 Transfer Complete flag */
  319. DMA2_FLAG_HT1 = ((uint32_t)0X00000004), /*!< Channel 1 Half Transfer Complete flag */
  320. DMA2_FLAG_TE1 = ((uint32_t)0X00000008), /*!< Channel 1 Transfer Error flag */
  321. /* Only for APM32F091 devices */
  322. DMA2_FLAG_AL2 = ((uint32_t)0x10000010), /*!< Channel 2 All flag */
  323. DMA2_FLAG_TF2 = ((uint32_t)0x10000020), /*!< Channel 2 Transfer Complete flag */
  324. DMA2_FLAG_HT2 = ((uint32_t)0x10000040), /*!< Channel 2 Half Transfer Complete flag */
  325. DMA2_FLAG_TE2 = ((uint32_t)0x10000080), /*!< Channel 2 Transfer Error flag */
  326. /* Only for APM32F091 devices */
  327. DMA2_FLAG_AL3 = ((uint32_t)0x10000100), /*!< Channel 3 All flag */
  328. DMA2_FLAG_TF3 = ((uint32_t)0x10000200), /*!< Channel 3 Transfer Complete flag */
  329. DMA2_FLAG_HT3 = ((uint32_t)0x10000400), /*!< Channel 3 Half Transfer Complete flag */
  330. DMA2_FLAG_TE3 = ((uint32_t)0x10000800), /*!< Channel 3 Transfer Error flag */
  331. /* Only for APM32F091 devices */
  332. DMA2_FLAG_AL4 = ((uint32_t)0x10001000), /*!< Channel 4 All flag */
  333. DMA2_FLAG_TF4 = ((uint32_t)0x10002000), /*!< Channel 4 Transfer Complete flag */
  334. DMA2_FLAG_HT4 = ((uint32_t)0x10004000), /*!< Channel 4 Half Transfer Complete flag */
  335. DMA2_FLAG_TE4 = ((uint32_t)0x10008000), /*!< Channel 4 Transfer Error flag */
  336. /* Only for APM32F091 devices */
  337. DMA2_FLAG_AL5 = ((uint32_t)0x10010000), /*!< Channel 5 All flag */
  338. DMA2_FLAG_TF5 = ((uint32_t)0x10020000), /*!< Channel 5 Transfer Complete flag */
  339. DMA2_FLAG_HT5 = ((uint32_t)0x10040000), /*!< Channel 5 Half Transfer Complete flag */
  340. DMA2_FLAG_TE5 = ((uint32_t)0x10080000), /*!< Channel 5 Transfer Error flag */
  341. } DMA_FLAG_T;
  342. /**
  343. * @brief DMA interrupt flag definition
  344. */
  345. typedef enum
  346. {
  347. DMA1_INT_FLAG_AL1 = ((uint32_t)0x00000001), /*!< Channel 1 All interrupt flag */
  348. DMA1_INT_FLAG_TF1 = ((uint32_t)0x00000002), /*!< Channel 1 Transfer Complete interrupt flag */
  349. DMA1_INT_FLAG_HT1 = ((uint32_t)0x00000004), /*!< Channel 1 Half Transfer Complete interrupt flag */
  350. DMA1_INT_FLAG_TE1 = ((uint32_t)0x00000008), /*!< Channel 1 Transfer Error interrupt flag */
  351. DMA1_INT_FLAG_AL2 = ((uint32_t)0x00000010), /*!< Channel 2 All interrupt flag */
  352. DMA1_INT_FLAG_TF2 = ((uint32_t)0x00000020), /*!< Channel 2 Transfer Complete interrupt flag */
  353. DMA1_INT_FLAG_HT2 = ((uint32_t)0x00000040), /*!< Channel 2 Half Transfer Complete interrupt flag */
  354. DMA1_INT_FLAG_TE2 = ((uint32_t)0x00000080), /*!< Channel 2 Transfer Error interrupt flag */
  355. DMA1_INT_FLAG_AL3 = ((uint32_t)0x00000100), /*!< Channel 3 All interrupt flag */
  356. DMA1_INT_FLAG_TF3 = ((uint32_t)0x00000200), /*!< Channel 3 Transfer Complete interrupt flag */
  357. DMA1_INT_FLAG_HT3 = ((uint32_t)0x00000400), /*!< Channel 3 Half Transfer Complete interrupt flag */
  358. DMA1_INT_FLAG_TE3 = ((uint32_t)0x00000800), /*!< Channel 3 Transfer Error interrupt flag */
  359. DMA1_INT_FLAG_AL4 = ((uint32_t)0x00001000), /*!< Channel 4 All interrupt flag */
  360. DMA1_INT_FLAG_TF4 = ((uint32_t)0x00002000), /*!< Channel 4 Transfer Complete interrupt flag */
  361. DMA1_INT_FLAG_HT4 = ((uint32_t)0x00004000), /*!< Channel 4 Half Transfer Complete interrupt flag */
  362. DMA1_INT_FLAG_TE4 = ((uint32_t)0x00008000), /*!< Channel 4 Transfer Error interrupt flag */
  363. DMA1_INT_FLAG_AL5 = ((uint32_t)0x00010000), /*!< Channel 5 All interrupt flag */
  364. DMA1_INT_FLAG_TF5 = ((uint32_t)0x00020000), /*!< Channel 5 Transfer Complete interrupt flag */
  365. DMA1_INT_FLAG_HT5 = ((uint32_t)0x00040000), /*!< Channel 5 Half Transfer Complete interrupt flag */
  366. DMA1_INT_FLAG_TE5 = ((uint32_t)0x00080000), /*!< Channel 5 Transfer Error interrupt flag */
  367. /* Only for APM32F072 and APM32F091 devices */
  368. DMA1_INT_FLAG_AL6 = ((uint32_t)0x00100000), /*!< Channel 6 All interrupt flag */
  369. DMA1_INT_FLAG_TF6 = ((uint32_t)0x00200000), /*!< Channel 6 Transfer Complete interrupt flag */
  370. DMA1_INT_FLAG_HT6 = ((uint32_t)0x00400000), /*!< Channel 6 Half Transfer Complete interrupt flag */
  371. DMA1_INT_FLAG_TE6 = ((uint32_t)0x00800000), /*!< Channel 6 Transfer Error interrupt flag */
  372. /* Only for APM32F072 and APM32F091 devices */
  373. DMA1_INT_FLAG_AL7 = ((uint32_t)0x01000000), /*!< Channel 7 All interrupt flag */
  374. DMA1_INT_FLAG_TF7 = ((uint32_t)0x02000000), /*!< Channel 7 Transfer Complete interrupt flag */
  375. DMA1_INT_FLAG_HT7 = ((uint32_t)0x04000000), /*!< Channel 7 Half Transfer Complete interrupt flag */
  376. DMA1_INT_FLAG_TE7 = ((uint32_t)0x08000000), /*!< Channel 7 Transfer Error interrupt flag */
  377. /* Only for APM32F091 devices */
  378. DMA2_INT_FLAG_AL1 = ((uint32_t)0x10000001), /*!< Channel 1 All interrupt flag */
  379. DMA2_INT_FLAG_TF1 = ((uint32_t)0x10000002), /*!< Channel 1 Transfer Complete interrupt flag */
  380. DMA2_INT_FLAG_HT1 = ((uint32_t)0x10000004), /*!< Channel 1 Half Transfer Complete interrupt flag */
  381. DMA2_INT_FLAG_TE1 = ((uint32_t)0x10000008), /*!< Channel 1 Transfer Error interrupt flag */
  382. /* Only for APM32F091 devices */
  383. DMA2_INT_FLAG_AL2 = ((uint32_t)0x10000010), /*!< Channel 2 All interrupt flag */
  384. DMA2_INT_FLAG_TF2 = ((uint32_t)0x10000020), /*!< Channel 2 Transfer Complete interrupt flag */
  385. DMA2_INT_FLAG_HT2 = ((uint32_t)0x10000040), /*!< Channel 2 Half Transfer Complete interrupt flag */
  386. DMA2_INT_FLAG_TE2 = ((uint32_t)0x10000080), /*!< Channel 2 Transfer Error interrupt flag */
  387. /* Only for APM32F091 devices */
  388. DMA2_INT_FLAG_AL3 = ((uint32_t)0x10000100), /*!< Channel 3 All interrupt flag */
  389. DMA2_INT_FLAG_TF3 = ((uint32_t)0x10000200), /*!< Channel 3 Transfer Complete interrupt flag */
  390. DMA2_INT_FLAG_HT3 = ((uint32_t)0x10000400), /*!< Channel 3 Half Transfer Complete interrupt flag */
  391. DMA2_INT_FLAG_TE3 = ((uint32_t)0x10000800), /*!< Channel 3 Transfer Error interrupt flag */
  392. /* Only for APM32F091 devices */
  393. DMA2_INT_FLAG_AL4 = ((uint32_t)0x10001000), /*!< Channel 4 All interrupt flag */
  394. DMA2_INT_FLAG_TF4 = ((uint32_t)0x10002000), /*!< Channel 4 Transfer Complete interrupt flag */
  395. DMA2_INT_FLAG_HT4 = ((uint32_t)0x10004000), /*!< Channel 4 Half Transfer Complete interrupt flag */
  396. DMA2_INT_FLAG_TE4 = ((uint32_t)0x10008000), /*!< Channel 4 Transfer Error interrupt flag */
  397. /* Only for APM32F091 devices */
  398. DMA2_INT_FLAG_AL5 = ((uint32_t)0x10010000), /*!< Channel 5 All interrupt flag */
  399. DMA2_INT_FLAG_TF5 = ((uint32_t)0x10020000), /*!< Channel 5 Transfer Complete interrupt flag */
  400. DMA2_INT_FLAG_HT5 = ((uint32_t)0x10040000), /*!< Channel 5 Half Transfer Complete interrupt flag */
  401. DMA2_INT_FLAG_TE5 = ((uint32_t)0x10080000), /*!< Channel 5 Transfer Error interrupt flag */
  402. } DMA_INT_FLAG_T;
  403. /**
  404. * @brief DMA interrupt source
  405. */
  406. typedef enum
  407. {
  408. DMA_INT_TFIE = BIT1, /*!< Transfer complete interrupt enable */
  409. DMA_INT_HTIE = BIT2, /*!< Half Transfer interrupt enable */
  410. DMA_INT_TEIE = BIT3, /*!< Transfer error interrupt enable */
  411. } DMA_INT_T;
  412. /**@} end of group DMA_Enumerations */
  413. /** @defgroup DMA_Structures Structures
  414. @{
  415. */
  416. /**
  417. * @brief DMA Config struct definition
  418. */
  419. typedef struct
  420. {
  421. uint32_t memoryAddress; /*!< Specifies the DMA memory base address */
  422. uint32_t peripheralAddress; /*!< Specifies the DMA peripheral base address */
  423. DMA_DIR_T direction; /*!< Specifies the DMA data transfer direction */
  424. uint32_t bufferSize; /*!< Specifies the DMA buffer size */
  425. DMA_MEMORY_DATASIZE_T memoryDataSize; /*!< Specifies the DMA memory data size */
  426. DMA_PERIPHERAL_DATASIZE_T peripheralDataSize; /*!< Specifies the DMA peripheral data size */
  427. DMA_MEMORY_INC_T memoryInc; /*!< Specifies the DMA memory address increment */
  428. DMA_PERIPHERAL_INC_T peripheralInc; /*!< Specifies the DMA peripheral address increment */
  429. DMA_CIRCULAR_T circular; /*!< Specifies the DMA circular mode */
  430. DMA_PRIORITY_LEVEL_T priority; /*!< Specifies the DMA software priority */
  431. DMA_M2M_T memoryTomemory; /*!< Specifies the DMA memory-to-memory transfer */
  432. } DMA_Config_T;
  433. /**@} end of group DMA_Structures */
  434. /** @defgroup DMA_Variables Variables
  435. @{
  436. */
  437. /**@} end of group DMA_Variables*/
  438. /** @defgroup DMA_Functions Functions
  439. @{
  440. */
  441. /* Reset and configuration */
  442. void DMA_Reset(DMA_CHANNEL_T* channel);
  443. void DMA_Config(DMA_CHANNEL_T* channel, DMA_Config_T* dmaConfig);
  444. void DMA_ConfigStructInit(DMA_Config_T* dmaConfig);
  445. void DMA_Enable(DMA_CHANNEL_T* channel);
  446. void DMA_Disable(DMA_CHANNEL_T* channel);
  447. /* Data number */
  448. void DMA_SetDataNumber(DMA_CHANNEL_T* channel, uint32_t dataNumber);
  449. uint32_t DMA_ReadDataNumber(DMA_CHANNEL_T* channel);
  450. /* Channel remap (Only for APM32F091 devices) */
  451. void DMA_ConfigRemap(DMA_T* dma, DMA_CHANNEL_REMAP_T remap);
  452. /* interrupt */
  453. void DMA_EnableInterrupt(DMA_CHANNEL_T* channel, uint32_t interrupt);
  454. void DMA_DisableInterrupt(DMA_CHANNEL_T* channel, uint32_t interrupt);
  455. /* Flag */
  456. uint8_t DMA_ReadStatusFlag(DMA_FLAG_T flag);
  457. void DMA_ClearStatusFlag(uint32_t flag);
  458. uint8_t DMA_ReadIntFlag(DMA_INT_FLAG_T flag);
  459. void DMA_ClearIntFlag(uint32_t flag);
  460. #ifdef __cplusplus
  461. }
  462. #endif
  463. #endif /* __APM32F0XX_DMA_H */
  464. /**@} end of group DMA_Functions */
  465. /**@} end of group DMA_Driver */
  466. /**@} end of group APM32F0xx_StdPeriphDriver */