HAL_DMA.h 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. /*
  2. ******************************************************************************
  3. * @file HAL_DMA.h
  4. * @version V1.0.0
  5. * @date 2020
  6. * @brief Header file of DMA HAL module.
  7. ******************************************************************************
  8. */
  9. #ifndef __HAL_DMA_H__
  10. #define __HAL_DMA_H__
  11. #include "ACM32Fxx_HAL.h"
  12. #define DMA_CHANNEL_NUM (5)
  13. /** @defgroup DMA_DATA_FLOW
  14. * @{
  15. */
  16. #define DMA_DATA_FLOW_M2M (0x00000000)
  17. #define DMA_DATA_FLOW_M2P (0x00000800)
  18. #define DMA_DATA_FLOW_P2M (0x00001000)
  19. /**
  20. * @}
  21. */
  22. /** @defgroup REQUEST_ID
  23. * @{
  24. */
  25. #define REG_M2M (0)
  26. #define REQ0_ADC (0)
  27. #define REQ1_SPI1_SEND (1)
  28. #define REQ2_SPI1_RECV (2)
  29. #define REQ3_SPI2_SEND (3)
  30. #define REQ4_SPI2_RECV (4)
  31. #define REQ5_UART1_SEND (5)
  32. #define REQ6_UART1_RECV (6)
  33. #define REQ7_UART2_SEND (7)
  34. #define REQ8_UART2_RECV (8)
  35. #define REQ9_I2C1_SEND (9)
  36. #define REQ10_I2C1_RECV (10)
  37. #define REQ11_I2C2_SEND (11)
  38. #define REQ12_I2C2_RECV (12)
  39. #define REQ13_TIM1_CH1 (13)
  40. #define REQ14_TIM1_CH2 (14)
  41. #define REQ15_TIM1_CH3 (15)
  42. #define REQ16_TIM1_CH4 (16)
  43. #define REQ17_TIM1_UP (17)
  44. #define REQ18_TIM1_TRIG_COM (18)
  45. #define REQ19_TIM3_CH3 (19)
  46. #define REQ20_TIM3_CH4_OR_UP (20)
  47. #define REQ21_TIM3_CH1_OR_TRIG (21)
  48. #define REQ22_TIM3_CH2_LCDFRAME (22)
  49. #define REQ23_TIM6_UP (23)
  50. #define REQ24_TIM15_CH1_UP_TRIG_COM (24)
  51. #define REQ25_TIM15_CH2 (25)
  52. #define REQ26_TIM16_CH1_UP (26)
  53. #define REQ27_UART3_SEND (27)
  54. #define REQ28_TIM17_CH1_UP (28)
  55. #define REQ29_UART3_RECV (29)
  56. #define REQ30_LPUART_SEND (30)
  57. #define REQ31_LPUART_RECV (31)
  58. #define REQ_MAX_LIMIT (32)
  59. /**
  60. * @}
  61. */
  62. /** @defgroup DMA_SOURCE_ADDR_INCREASE
  63. * @{
  64. */
  65. #define DMA_SOURCE_ADDR_INCREASE_DISABLE (0x00000000)
  66. #define DMA_SOURCE_ADDR_INCREASE_ENABLE (0x04000000)
  67. /**
  68. * @}
  69. */
  70. /** @defgroup DMA_DST_ADDR_INCREASE
  71. * @{
  72. */
  73. #define DMA_DST_ADDR_INCREASE_DISABLE (0x00000000)
  74. #define DMA_DST_ADDR_INCREASE_ENABLE (0x08000000)
  75. /**
  76. * @}
  77. */
  78. /** @defgroup DMA_SRC_WIDTH
  79. * @{
  80. */
  81. #define DMA_SRC_WIDTH_BYTE (0x00000000) /* 8bit */
  82. #define DMA_SRC_WIDTH_HALF_WORD (0x00040000) /* 16bit */
  83. #define DMA_SRC_WIDTH_WORD (0x00080000) /* 36bit */
  84. /**
  85. * @}
  86. */
  87. /** @defgroup DMA_DST_WIDTH
  88. * @{
  89. */
  90. #define DMA_DST_WIDTH_BYTE (0x00000000) /* 8bit */
  91. #define DMA_DST_WIDTH_HALF_WORD (0x00200000) /* 16bit */
  92. #define DMA_DST_WIDTH_WORD (0x00400000) /* 36bit */
  93. /**
  94. * @}
  95. */
  96. /** @defgroup DMA_MODE DMA MODE
  97. * @{
  98. */
  99. #define DMA_NORMAL 0x00000000U /*!< Normal mode */
  100. #define DMA_CIRCULAR 0x00000001U /*!< Circular mode */
  101. /**
  102. * @}
  103. */
  104. /**
  105. * @brief DMA burst length Structure definition
  106. */
  107. typedef enum
  108. {
  109. DMA_BURST_LENGTH_1 = 0,
  110. DMA_BURST_LENGTH_4 = 1,
  111. DMA_BURST_LENGTH_8 = 2,
  112. DMA_BURST_LENGTH_16 = 3,
  113. DMA_BURST_LENGTH_32 = 4,
  114. DMA_BURST_LENGTH_64 = 5,
  115. DMA_BURST_LENGTH_128 = 6,
  116. DMA_BURST_LENGTH_256 = 7,
  117. }DMA_BURST_LENGTH;
  118. /**
  119. * @brief DMA Configuration Structure definition
  120. */
  121. typedef struct
  122. {
  123. uint32_t Mode; /* This parameter can be a value of @ref DMA_MODE */
  124. uint32_t Data_Flow; /* This parameter can be a value of @ref DMA_DATA_FLOW */
  125. uint32_t Request_ID; /* This parameter can be a value of @ref REQUEST_ID */
  126. uint32_t Source_Inc; /* This parameter can be a value of @ref DMA_SOURCE_ADDR_INCREASE */
  127. uint32_t Desination_Inc; /* This parameter can be a value of @ref DMA_DST_ADDR_INCREASE */
  128. uint32_t Source_Width; /* This parameter can be a value of @ref DMA_SRC_WIDTH */
  129. uint32_t Desination_Width; /* This parameter can be a value of @ref DMA_DST_WIDTH */
  130. }DMA_InitParaTypeDef;
  131. /**
  132. * @brief DMA handle Structure definition
  133. */
  134. typedef struct
  135. {
  136. DMA_Channel_TypeDef *Instance; /* DMA registers base address */
  137. DMA_InitParaTypeDef Init; /* DMA initialization parameters */
  138. void (*DMA_ITC_Callback)(void); /* DMA transfer complete callback */
  139. void (*DMA_IE_Callback)(void); /* DMA error complete callback */
  140. }DMA_HandleTypeDef;
  141. /**
  142. * @brief DMA Link List Item Structure
  143. */
  144. typedef struct DMA_NextLink
  145. {
  146. uint32_t SrcAddr; /* source address */
  147. uint32_t DstAddr; /* desination address */
  148. struct DMA_NextLink *Next; /* Next Link */
  149. uint32_t Control; /* Control */
  150. }DMA_LLI_InitTypeDef;
  151. /** @defgroup GPIO Private Macros
  152. * @{
  153. */
  154. #define IS_DMA_MODE(MODE) (((MODE) == DMA_NORMAL ) || \
  155. ((MODE) == DMA_CIRCULAR))
  156. #define IS_DMA_ALL_INSTANCE(INSTANCE) (((INSTANCE) == DMA_Channel0) || \
  157. ((INSTANCE) == DMA_Channel1) || \
  158. ((INSTANCE) == DMA_Channel2) || \
  159. ((INSTANCE) == DMA_Channel3) || \
  160. ((INSTANCE) == DMA_Channel4))
  161. #define IS_DMA_DATA_FLOW(DATA_FLOW) (((DATA_FLOW) == DMA_DATA_FLOW_M2M) || \
  162. ((DATA_FLOW) == DMA_DATA_FLOW_M2P) || \
  163. ((DATA_FLOW) == DMA_DATA_FLOW_P2M))
  164. #define IS_DMA_REQUEST_ID(REQUEST_ID) ((REQUEST_ID < REQ_MAX_LIMIT) ? true : false)
  165. #define IS_DMA_SRC_WIDTH(WIDTH) (((WIDTH) == DMA_SRC_WIDTH_BYTE) || \
  166. ((WIDTH) == DMA_SRC_WIDTH_HALF_WORD) || \
  167. ((WIDTH) == DMA_SRC_WIDTH_WORD))
  168. #define IS_DMA_DST_WIDTH(WIDTH) (((WIDTH) == DMA_DST_WIDTH_BYTE) || \
  169. ((WIDTH) == DMA_DST_WIDTH_HALF_WORD) || \
  170. ((WIDTH) == DMA_DST_WIDTH_WORD))
  171. /**
  172. * @}
  173. */
  174. /******************************************************************************/
  175. /* Peripheral Registers Bits Definition */
  176. /******************************************************************************/
  177. /******************************************************************************/
  178. /* (DMA) */
  179. /******************************************************************************/
  180. /**************** Bit definition for DMA CONFIG register ***********************/
  181. #define DMA_CONFIG_M2ENDIAN BIT2
  182. #define DMA_CONFIG_M1ENDIAN BIT1
  183. #define DMA_CONFIG_EN BIT0
  184. /**************** Bit definition for DMA Channel CTRL register ***********************/
  185. #define DMA_CHANNEL_CTRL_ITC BIT31
  186. #define DMA_CHANNEL_CTRL_DI BIT27
  187. #define DMA_CHANNEL_CTRL_SI BIT26
  188. /**************** Bit definition for DMA Channel CONFIG register ***********************/
  189. #define DMA_CHANNEL_CONFIG_HALT BIT18
  190. #define DMA_CHANNEL_CONFIG_ACTIVE BIT17
  191. #define DMA_CHANNEL_CONFIG_LOCK BIT16
  192. #define DMA_CHANNEL_CONFIG_ITC BIT15
  193. #define DMA_CHANNEL_CONFIG_IE BIT14
  194. #define DMA_CHANNEL_CONFIG_FLOW_CTRL (BIT11|BIT12|BIT13)
  195. #define DMA_CHANNEL_CONFIG_DEST_PERIPH (BIT6|BIT7|BIT8|BIT9|BIT10)
  196. #define DMA_CHANNEL_CONFIG_DEST_PERIPH_POS (6)
  197. #define DMA_CHANNEL_CONFIG_SRC_PERIPH (BIT1|BIT2|BIT3|BIT4|BIT5)
  198. #define DMA_CHANNEL_CONFIG_SRC_PERIPH_POS (1)
  199. #define DMA_CHANNEL_CONFIG_EN BIT0
  200. /* Exported functions --------------------------------------------------------*/
  201. #define __HAL_LINK_DMA(_HANDLE_, _DMA_LINK_, _DMA_HANDLE_) (_HANDLE_._DMA_LINK_ = &_DMA_HANDLE_)
  202. /* HAL_DMA_IRQHandler */
  203. void HAL_DMA_IRQHandler(DMA_HandleTypeDef *hdma);
  204. /* HAL_DMA_Init */
  205. HAL_StatusTypeDef HAL_DMA_Init(DMA_HandleTypeDef *hdma);
  206. /* HAL_DMA_DeInit */
  207. HAL_StatusTypeDef HAL_DMA_DeInit(DMA_HandleTypeDef *hdma);
  208. /* HAL_DMA_Start */
  209. HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t fu32_SrcAddr, uint32_t fu32_DstAddr, uint32_t fu32_Size);
  210. /* HAL_DMA_Start */
  211. HAL_StatusTypeDef HAL_DMA_Start_IT(DMA_HandleTypeDef *hdma, uint32_t fu32_SrcAddr, uint32_t fu32_DstAddr, uint32_t fu32_Size);
  212. /* HAL_DMA_Abort */
  213. HAL_StatusTypeDef HAL_DMA_Abort(DMA_HandleTypeDef *hdma);
  214. /* HAL_DMA_GetState */
  215. HAL_StatusTypeDef HAL_DMA_GetState(DMA_HandleTypeDef *hdma);
  216. #endif