lib_dma.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. /**
  2. ******************************************************************************
  3. * @file lib_dma.h
  4. * @author Application Team
  5. * @version V1.1.0
  6. * @date 2019-10-28
  7. * @brief DMA library.
  8. ******************************************************************************
  9. * @attention
  10. *
  11. ******************************************************************************
  12. */
  13. #ifndef __LIB_DMA_H
  14. #define __LIB_DMA_H
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #include "target.h"
  19. //Channel
  20. #define DMA_CHANNEL_0 (0)
  21. #define DMA_CHANNEL_1 (1)
  22. #define DMA_CHANNEL_2 (2)
  23. #define DMA_CHANNEL_3 (3)
  24. typedef struct
  25. {
  26. uint32_t DestAddr; /* destination address */
  27. uint32_t SrcAddr; /* source address */
  28. uint8_t FrameLen; /* Frame length */
  29. uint8_t PackLen; /* Package length */
  30. uint32_t ContMode; /* Continuous mode */
  31. uint32_t TransMode; /* Transfer mode */
  32. uint32_t ReqSrc; /* DMA request source */
  33. uint32_t DestAddrMode; /* Destination address mode */
  34. uint32_t SrcAddrMode; /* Source address mode */
  35. uint32_t TransSize; /* Transfer size mode */
  36. } DMA_InitType;
  37. /************** Bits definition for DMA_CxCTL register ******************/
  38. /************** Bits definition for DMA_AESCTL register ******************/
  39. /****************************** DMA Instances *********************************/
  40. #define IS_DMA_ALL_INSTANCE(INSTANCE) ((INSTANCE) == DMA)
  41. //ContMode
  42. #define DMA_CONTMODE_ENABLE DMA_CCTL_CONT
  43. #define DMA_CONTMODE_DISABLE 0
  44. #define IS_DMA_CONTMOD(__CONTMOD__) (((__CONTMOD__) == DMA_CONTMODE_ENABLE) ||\
  45. ((__CONTMOD__) == DMA_CONTMODE_DISABLE))
  46. //TransMode
  47. #define DMA_TRANSMODE_SINGLE 0
  48. #define DMA_TRANSMODE_PACK DMA_CCTL_TMODE
  49. #define IS_DMA_TRANSMOD(__TRANSMOD__) (((__TRANSMOD__) == DMA_TRANSMODE_SINGLE) ||\
  50. ((__TRANSMOD__) == DMA_TRANSMODE_PACK))
  51. //ReqSrc
  52. #define DMA_REQSRC_SOFT (0x0U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000000 */
  53. #define DMA_REQSRC_ADC (0x1U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000080 */
  54. #define DMA_REQSRC_UART0TX (0x2U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000100 */
  55. #define DMA_REQSRC_UART0RX (0x3U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000180 */
  56. #define DMA_REQSRC_UART1TX (0x4U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000200 */
  57. #define DMA_REQSRC_UART1RX (0x5U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000280 */
  58. #define DMA_REQSRC_UART2TX (0x6U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000300 */
  59. #define DMA_REQSRC_UART2RX (0x7U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000380 */
  60. #define DMA_REQSRC_UART3TX (0x8U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000400 */
  61. #define DMA_REQSRC_UART3RX (0x9U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000480 */
  62. #define DMA_REQSRC_UART4TX (0xAU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000500 */
  63. #define DMA_REQSRC_UART4RX (0xBU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000580 */
  64. #define DMA_REQSRC_UART5TX (0xCU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000600 */
  65. #define DMA_REQSRC_UART5RX (0xDU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000680 */
  66. #define DMA_REQSRC_ISO78160TX (0xEU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000700 */
  67. #define DMA_REQSRC_ISO78160RX (0xFU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000780 */
  68. #define DMA_REQSRC_ISO78161TX (0x10U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000800 */
  69. #define DMA_REQSRC_ISO78161RX (0x11U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000880 */
  70. #define DMA_REQSRC_TIMER0 (0x12U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000900 */
  71. #define DMA_REQSRC_TIMER1 (0x13U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000980 */
  72. #define DMA_REQSRC_TIMER2 (0x14U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000A00 */
  73. #define DMA_REQSRC_TIMER3 (0x15U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000A80 */
  74. #define DMA_REQSRC_SPI1TX (0x16U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000B00 */
  75. #define DMA_REQSRC_SPI1RX (0x17U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000B80 */
  76. #define DMA_REQSRC_U32K0 (0x18U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000C00 */
  77. #define DMA_REQSRC_U32K1 (0x19U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000C80 */
  78. #define DMA_REQSRC_CMP1 (0x1AU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000D00 */
  79. #define DMA_REQSRC_CMP2 (0x1BU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000D80 */
  80. #define DMA_REQSRC_SPI3TX (0x1CU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000E00 */
  81. #define DMA_REQSRC_SPI3RX (0x1DU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000E80 */
  82. #define DMA_REQSRC_SPI2TX (0x1EU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000F00 */
  83. #define DMA_REQSRC_SPI2RX (0x1FU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000F80 */
  84. #define IS_DMA_REQSRC(__REQSRC__) (((__REQSRC__) == DMA_REQSRC_SOFT) ||\
  85. ((__REQSRC__) == DMA_REQSRC_ADC) ||\
  86. ((__REQSRC__) == DMA_REQSRC_UART0TX) ||\
  87. ((__REQSRC__) == DMA_REQSRC_UART0RX) ||\
  88. ((__REQSRC__) == DMA_REQSRC_UART1TX) ||\
  89. ((__REQSRC__) == DMA_REQSRC_UART1RX) ||\
  90. ((__REQSRC__) == DMA_REQSRC_UART2TX) ||\
  91. ((__REQSRC__) == DMA_REQSRC_UART2RX) ||\
  92. ((__REQSRC__) == DMA_REQSRC_UART3TX) ||\
  93. ((__REQSRC__) == DMA_REQSRC_UART3RX) ||\
  94. ((__REQSRC__) == DMA_REQSRC_UART4TX) ||\
  95. ((__REQSRC__) == DMA_REQSRC_UART4RX) ||\
  96. ((__REQSRC__) == DMA_REQSRC_UART5TX) ||\
  97. ((__REQSRC__) == DMA_REQSRC_UART5RX) ||\
  98. ((__REQSRC__) == DMA_REQSRC_ISO78160TX) ||\
  99. ((__REQSRC__) == DMA_REQSRC_ISO78160RX) ||\
  100. ((__REQSRC__) == DMA_REQSRC_ISO78161TX) ||\
  101. ((__REQSRC__) == DMA_REQSRC_ISO78161RX) ||\
  102. ((__REQSRC__) == DMA_REQSRC_TIMER0) ||\
  103. ((__REQSRC__) == DMA_REQSRC_TIMER1) ||\
  104. ((__REQSRC__) == DMA_REQSRC_TIMER2) ||\
  105. ((__REQSRC__) == DMA_REQSRC_TIMER3) ||\
  106. ((__REQSRC__) == DMA_REQSRC_SPI1TX) ||\
  107. ((__REQSRC__) == DMA_REQSRC_SPI1RX) ||\
  108. ((__REQSRC__) == DMA_REQSRC_U32K0) ||\
  109. ((__REQSRC__) == DMA_REQSRC_U32K1) ||\
  110. ((__REQSRC__) == DMA_REQSRC_CMP1) ||\
  111. ((__REQSRC__) == DMA_REQSRC_CMP2) ||\
  112. ((__REQSRC__) == DMA_REQSRC_SPI3TX) ||\
  113. ((__REQSRC__) == DMA_REQSRC_SPI3RX) ||\
  114. ((__REQSRC__) == DMA_REQSRC_SPI2TX) ||\
  115. ((__REQSRC__) == DMA_REQSRC_SPI2RX))
  116. //DestAddrMode
  117. #define DMA_DESTADDRMODE_FIX (0x0U << DMA_CCTL_DMODE_Pos) /*!< 0x00000000 */
  118. #define DMA_DESTADDRMODE_PEND (0x1U << DMA_CCTL_DMODE_Pos) /*!< 0x00000020 */
  119. #define DMA_DESTADDRMODE_FEND (0x2U << DMA_CCTL_DMODE_Pos) /*!< 0x00000040 */
  120. #define IS_DMA_DESTADDRMOD(__DAM__) (((__DAM__) == DMA_DESTADDRMODE_FIX) ||\
  121. ((__DAM__) == DMA_DESTADDRMODE_PEND) ||\
  122. ((__DAM__) == DMA_DESTADDRMODE_FEND))
  123. //SrcAddrMode
  124. #define DMA_SRCADDRMODE_FIX (0x0U << DMA_CCTL_SMODE_Pos) /*!< 0x00000000 */
  125. #define DMA_SRCADDRMODE_PEND (0x1U << DMA_CCTL_SMODE_Pos) /*!< 0x00000008 */
  126. #define DMA_SRCADDRMODE_FEND (0x2U << DMA_CCTL_SMODE_Pos) /*!< 0x00000010 */
  127. #define IS_DMA_SRCADDRMOD(__SAM__) (((__SAM__) == DMA_SRCADDRMODE_FIX) ||\
  128. ((__SAM__) == DMA_SRCADDRMODE_PEND) ||\
  129. ((__SAM__) == DMA_SRCADDRMODE_FEND))
  130. //TransSize
  131. #define DMA_TRANSSIZE_BYTE (0x0U << DMA_CCTL_SIZE_Pos)
  132. #define DMA_TRANSSIZE_HWORD (0x1U << DMA_CCTL_SIZE_Pos)
  133. #define DMA_TRANSSIZE_WORD (0x2U << DMA_CCTL_SIZE_Pos)
  134. #define IS_DMA_TRANSSIZE(__TSIZE__) (((__TSIZE__) == DMA_TRANSSIZE_BYTE) ||\
  135. ((__TSIZE__) == DMA_TRANSSIZE_HWORD) ||\
  136. ((__TSIZE__) == DMA_TRANSSIZE_WORD))
  137. #define IS_DMA_ALIGNEDADDR_WORD(__ADDRW__) (((__ADDRW__) & 0x3U) == 0U)
  138. #define IS_DMA_ALIGNEDADDR_HWORD(__ADDRHW__) (((__ADDRHW__) & 0x1U) == 0U)
  139. typedef struct
  140. {
  141. uint32_t Mode; /* AES mode */
  142. uint32_t Direction; /* Direction */
  143. uint32_t *KeyStr; /* AES key */
  144. } DMA_AESInitType;
  145. //AES MODE
  146. #define DMA_AESMODE_128 (0x0U << DMA_AESCTL_MODE_Pos) /*!< 0x00000000 */
  147. #define DMA_AESMODE_192 (0x1U << DMA_AESCTL_MODE_Pos) /*!< 0x00000004 */
  148. #define DMA_AESMODE_256 (0x2U << DMA_AESCTL_MODE_Pos) /*!< 0x00000008 */
  149. #define IS_DMA_AESMOD(__AESMOD__) (((__AESMOD__) == DMA_AESMODE_128) ||\
  150. ((__AESMOD__) == DMA_AESMODE_192) ||\
  151. ((__AESMOD__) == DMA_AESMODE_256))
  152. //AES Direction
  153. #define DMA_AESDIRECTION_ENCODE DMA_AESCTL_ENC
  154. #define DMA_AESDIRECTION_DECODE 0
  155. #define IS_DMA_AESDIR(__AESDIR__) (((__AESDIR__) == DMA_AESDIRECTION_ENCODE) ||\
  156. ((__AESDIR__) == DMA_AESDIRECTION_DECODE))
  157. //INT
  158. #define DMA_INT_C3DA DMA_IE_C3DAIE
  159. #define DMA_INT_C2DA DMA_IE_C2DAIE
  160. #define DMA_INT_C1DA DMA_IE_C1DAIE
  161. #define DMA_INT_C0DA DMA_IE_C0DAIE
  162. #define DMA_INT_C3FE DMA_IE_C3FEIE
  163. #define DMA_INT_C2FE DMA_IE_C2FEIE
  164. #define DMA_INT_C1FE DMA_IE_C1FEIE
  165. #define DMA_INT_C0FE DMA_IE_C0FEIE
  166. #define DMA_INT_C3PE DMA_IE_C3PEIE
  167. #define DMA_INT_C2PE DMA_IE_C2PEIE
  168. #define DMA_INT_C1PE DMA_IE_C1PEIE
  169. #define DMA_INT_C0PE DMA_IE_C0PEIE
  170. #define DMA_INT_Msk (0xFFFUL)
  171. #define IS_DMA_INT(__INT__) ((((__INT__) & DMA_INT_Msk) != 0U) &&\
  172. (((__INT__) & ~DMA_INT_Msk) == 0U))
  173. //INTSTS
  174. #define DMA_INTSTS_C3DA DMA_STS_C3DA
  175. #define DMA_INTSTS_C2DA DMA_STS_C2DA
  176. #define DMA_INTSTS_C1DA DMA_STS_C1DA
  177. #define DMA_INTSTS_C0DA DMA_STS_C0DA
  178. #define DMA_INTSTS_C3FE DMA_STS_C3FE
  179. #define DMA_INTSTS_C2FE DMA_STS_C2FE
  180. #define DMA_INTSTS_C1FE DMA_STS_C1FE
  181. #define DMA_INTSTS_C0FE DMA_STS_C0FE
  182. #define DMA_INTSTS_C3PE DMA_STS_C3PE
  183. #define DMA_INTSTS_C2PE DMA_STS_C2PE
  184. #define DMA_INTSTS_C1PE DMA_STS_C1PE
  185. #define DMA_INTSTS_C0PE DMA_STS_C0PE
  186. #define DMA_INTSTS_C3BUSY DMA_STS_C3BUSY
  187. #define DMA_INTSTS_C2BUSY DMA_STS_C2BUSY
  188. #define DMA_INTSTS_C1BUSY DMA_STS_C1BUSY
  189. #define DMA_INTSTS_C0BUSY DMA_STS_C0BUSY
  190. #define DMA_INTSTS_Msk (0xFFF0UL)
  191. #define IS_DMA_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == DMA_INTSTS_C3DA) ||\
  192. ((__INTFLAGR__) == DMA_INTSTS_C2DA) ||\
  193. ((__INTFLAGR__) == DMA_INTSTS_C1DA) ||\
  194. ((__INTFLAGR__) == DMA_INTSTS_C0DA) ||\
  195. ((__INTFLAGR__) == DMA_INTSTS_C3FE) ||\
  196. ((__INTFLAGR__) == DMA_INTSTS_C2FE) ||\
  197. ((__INTFLAGR__) == DMA_INTSTS_C1FE) ||\
  198. ((__INTFLAGR__) == DMA_INTSTS_C0FE) ||\
  199. ((__INTFLAGR__) == DMA_INTSTS_C3PE) ||\
  200. ((__INTFLAGR__) == DMA_INTSTS_C2PE) ||\
  201. ((__INTFLAGR__) == DMA_INTSTS_C1PE) ||\
  202. ((__INTFLAGR__) == DMA_INTSTS_C0PE) ||\
  203. ((__INTFLAGR__) == DMA_INTSTS_C3BUSY) ||\
  204. ((__INTFLAGR__) == DMA_INTSTS_C2BUSY) ||\
  205. ((__INTFLAGR__) == DMA_INTSTS_C1BUSY) ||\
  206. ((__INTFLAGR__) == DMA_INTSTS_C0BUSY))
  207. #define IS_DMA_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & DMA_INTSTS_Msk) != 0U) &&\
  208. (((__INTFLAGC__) & ~DMA_INTSTS_Msk) == 0U))
  209. #define IS_DMA_CHANNEL(__CH__) (((__CH__) == DMA_CHANNEL_0) ||\
  210. ((__CH__) == DMA_CHANNEL_1) ||\
  211. ((__CH__) == DMA_CHANNEL_2) ||\
  212. ((__CH__) == DMA_CHANNEL_3))
  213. /* Exported Functions ------------------------------------------------------- */
  214. /* DMA Exported Functions Group1:
  215. (De)Initialization ------------------------*/
  216. void DMA_DeInit(uint32_t Channel);
  217. void DMA_Init(DMA_InitType *InitStruct, uint32_t Channel);
  218. void DMA_StructInit(DMA_InitType *InitStruct);
  219. void DMA_ASEDeInit(void);
  220. void DMA_AESInit(DMA_AESInitType *InitStruct);
  221. /* DMA Exported Functions Group2:
  222. Interrupt (flag) --------------------------*/
  223. void DMA_INTConfig(uint32_t INTMask, uint32_t NewState);
  224. uint8_t DMA_GetINTStatus(uint32_t INTMask);
  225. void DMA_ClearINTStatus(uint32_t INTMask);
  226. /* DMA Exported Functions Group3:
  227. MISC Configuration ------------------------*/
  228. void DMA_Cmd(uint32_t Channel, uint32_t NewState);
  229. void DMA_AESCmd(uint32_t NewState);
  230. void DMA_StopTransmit(uint32_t Channel, uint32_t NewState);
  231. uint8_t DMA_GetFrameLenTransferred(uint32_t Channel);
  232. uint8_t DMA_GetPackLenTransferred(uint32_t Channel);
  233. #ifdef __cplusplus
  234. }
  235. #endif
  236. #endif /* __LIB_DMA_H */
  237. /*********************************** END OF FILE ******************************/