lib_dma.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. /**
  2. ******************************************************************************
  3. * @file lib_dma.h
  4. * @author Application Team
  5. * @version V4.4.0
  6. * @date 2018-09-27
  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. //ContMode
  38. #define DMA_CONTMODE_ENABLE DMA_CTL_CONT
  39. #define DMA_CONTMODE_DISABLE 0
  40. //TransMode
  41. #define DMA_TRANSMODE_SINGLE 0
  42. #define DMA_TRANSMODE_PACK DMA_CTL_TMODE
  43. //ReqSrc
  44. #define DMA_REQSRC_SOFT DMA_CTL_DMASEL_SOFT
  45. #define DMA_REQSRC_UART0TX DMA_CTL_DMASEL_UART0TX
  46. #define DMA_REQSRC_UART0RX DMA_CTL_DMASEL_UART0RX
  47. #define DMA_REQSRC_UART1TX DMA_CTL_DMASEL_UART1TX
  48. #define DMA_REQSRC_UART1RX DMA_CTL_DMASEL_UART1RX
  49. #define DMA_REQSRC_UART2TX DMA_CTL_DMASEL_UART2TX
  50. #define DMA_REQSRC_UART2RX DMA_CTL_DMASEL_UART2RX
  51. #define DMA_REQSRC_UART3TX DMA_CTL_DMASEL_UART3TX
  52. #define DMA_REQSRC_UART3RX DMA_CTL_DMASEL_UART3RX
  53. #define DMA_REQSRC_UART4TX DMA_CTL_DMASEL_UART4TX
  54. #define DMA_REQSRC_UART4RX DMA_CTL_DMASEL_UART4RX
  55. #define DMA_REQSRC_UART5TX DMA_CTL_DMASEL_UART5TX
  56. #define DMA_REQSRC_UART5RX DMA_CTL_DMASEL_UART5RX
  57. #define DMA_REQSRC_ISO78160TX DMA_CTL_DMASEL_ISO78160TX
  58. #define DMA_REQSRC_ISO78160RX DMA_CTL_DMASEL_ISO78160RX
  59. #define DMA_REQSRC_ISO78161TX DMA_CTL_DMASEL_ISO78161TX
  60. #define DMA_REQSRC_ISO78161RX DMA_CTL_DMASEL_ISO78161RX
  61. #define DMA_REQSRC_TIMER0 DMA_CTL_DMASEL_TIMER0
  62. #define DMA_REQSRC_TIMER1 DMA_CTL_DMASEL_TIMER1
  63. #define DMA_REQSRC_TIMER2 DMA_CTL_DMASEL_TIMER2
  64. #define DMA_REQSRC_TIMER3 DMA_CTL_DMASEL_TIMER3
  65. #define DMA_REQSRC_SPI1TX DMA_CTL_DMASEL_SPI1TX
  66. #define DMA_REQSRC_SPI1RX DMA_CTL_DMASEL_SPI1RX
  67. #define DMA_REQSRC_U32K0 DMA_CTL_DMASEL_U32K0
  68. #define DMA_REQSRC_U32K1 DMA_CTL_DMASEL_U32K1
  69. #define DMA_REQSRC_CMP1 DMA_CTL_DMASEL_CMP1
  70. #define DMA_REQSRC_CMP2 DMA_CTL_DMASEL_CMP2
  71. #define DMA_REQSRC_SPI2TX DMA_CTL_DMASEL_SPI2TX
  72. #define DMA_REQSRC_SPI2RX DMA_CTL_DMASEL_SPI2RX
  73. //DestAddrMode
  74. #define DMA_DESTADDRMODE_FIX DMA_CxCTL_DMODE_FIX
  75. #define DMA_DESTADDRMODE_PEND DMA_CxCTL_DMODE_PEND
  76. #define DMA_DESTADDRMODE_FEND DMA_CxCTL_DMODE_FEND
  77. //SrcAddrMode
  78. #define DMA_SRCADDRMODE_FIX DMA_CxCTL_SMODE_FIX
  79. #define DMA_SRCADDRMODE_PEND DMA_CxCTL_SMODE_PEND
  80. #define DMA_SRCADDRMODE_FEND DMA_CxCTL_SMODE_FEND
  81. //TransSize
  82. #define DMA_TRANSSIZE_BYTE DMA_CxCTL_SIZE_BYTE
  83. #define DMA_TRANSSIZE_HWORD DMA_CxCTL_SIZE_HWORD
  84. #define DMA_TRANSSIZE_WORD DMA_CxCTL_SIZE_WORD
  85. typedef struct
  86. {
  87. uint32_t Mode; /* AES mode */
  88. uint32_t Direction; /* Direction */
  89. uint32_t *KeyStr; /* AES key */
  90. } DMA_AESInitType;
  91. //AES MODE
  92. #define DMA_AESMODE_128 DMA_AESCTL_MODE_AES128
  93. #define DMA_AESMODE_192 DMA_AESCTL_MODE_AES192
  94. #define DMA_AESMODE_256 DMA_AESCTL_MODE_AES256
  95. //AES Direction
  96. #define DMA_AESDIRECTION_ENCODE DMA_AESCTL_ENC
  97. #define DMA_AESDIRECTION_DECODE 0
  98. //INT
  99. #define DMA_INT_C3DA DMA_IE_C3DAIE
  100. #define DMA_INT_C2DA DMA_IE_C2DAIE
  101. #define DMA_INT_C1DA DMA_IE_C1DAIE
  102. #define DMA_INT_C0DA DMA_IE_C0DAIE
  103. #define DMA_INT_C3FE DMA_IE_C3FEIE
  104. #define DMA_INT_C2FE DMA_IE_C2FEIE
  105. #define DMA_INT_C1FE DMA_IE_C1FEIE
  106. #define DMA_INT_C0FE DMA_IE_C0FEIE
  107. #define DMA_INT_C3PE DMA_IE_C3PEIE
  108. #define DMA_INT_C2PE DMA_IE_C2PEIE
  109. #define DMA_INT_C1PE DMA_IE_C1PEIE
  110. #define DMA_INT_C0PE DMA_IE_C0PEIE
  111. #define DMA_INT_Msk (0xFFFUL)
  112. //INTSTS
  113. #define DMA_INTSTS_C3DA DMA_STS_C3DA
  114. #define DMA_INTSTS_C2DA DMA_STS_C2DA
  115. #define DMA_INTSTS_C1DA DMA_STS_C1DA
  116. #define DMA_INTSTS_C0DA DMA_STS_C0DA
  117. #define DMA_INTSTS_C3FE DMA_STS_C3FE
  118. #define DMA_INTSTS_C2FE DMA_STS_C2FE
  119. #define DMA_INTSTS_C1FE DMA_STS_C1FE
  120. #define DMA_INTSTS_C0FE DMA_STS_C0FE
  121. #define DMA_INTSTS_C3PE DMA_STS_C3PE
  122. #define DMA_INTSTS_C2PE DMA_STS_C2PE
  123. #define DMA_INTSTS_C1PE DMA_STS_C1PE
  124. #define DMA_INTSTS_C0PE DMA_STS_C0PE
  125. #define DMA_INTSTS_C3BUSY DMA_STS_C3BUSY
  126. #define DMA_INTSTS_C2BUSY DMA_STS_C2BUSY
  127. #define DMA_INTSTS_C1BUSY DMA_STS_C1BUSY
  128. #define DMA_INTSTS_C0BUSY DMA_STS_C0BUSY
  129. #define DMA_INTSTS_Msk (0xFFF0UL)
  130. /* Private macros ------------------------------------------------------------*/
  131. #define IS_DMA_CHANNEL(__CH__) (((__CH__) == DMA_CHANNEL_0) ||\
  132. ((__CH__) == DMA_CHANNEL_1) ||\
  133. ((__CH__) == DMA_CHANNEL_2) ||\
  134. ((__CH__) == DMA_CHANNEL_3))
  135. #define IS_DMA_ALIGNEDADDR_WORD(__ADDRW__) (((__ADDRW__) & 0x3U) == 0U)
  136. #define IS_DMA_ALIGNEDADDR_HWORD(__ADDRHW__) (((__ADDRHW__) & 0x1U) == 0U)
  137. #define IS_DMA_CONTMOD(__CONTMOD__) (((__CONTMOD__) == DMA_CONTMODE_ENABLE) ||\
  138. ((__CONTMOD__) == DMA_CONTMODE_DISABLE))
  139. #define IS_DMA_TRANSMOD(__TRANSMOD__) (((__TRANSMOD__) == DMA_TRANSMODE_SINGLE) ||\
  140. ((__TRANSMOD__) == DMA_TRANSMODE_PACK))
  141. #define IS_DMA_REQSRC(__REQSRC__) (((__REQSRC__) == DMA_REQSRC_SOFT) ||\
  142. ((__REQSRC__) == DMA_REQSRC_UART0TX) ||\
  143. ((__REQSRC__) == DMA_REQSRC_UART0RX) ||\
  144. ((__REQSRC__) == DMA_REQSRC_UART1TX) ||\
  145. ((__REQSRC__) == DMA_REQSRC_UART1RX) ||\
  146. ((__REQSRC__) == DMA_REQSRC_UART2TX) ||\
  147. ((__REQSRC__) == DMA_REQSRC_UART2RX) ||\
  148. ((__REQSRC__) == DMA_REQSRC_UART3TX) ||\
  149. ((__REQSRC__) == DMA_REQSRC_UART3RX) ||\
  150. ((__REQSRC__) == DMA_REQSRC_UART4TX) ||\
  151. ((__REQSRC__) == DMA_REQSRC_UART4RX) ||\
  152. ((__REQSRC__) == DMA_REQSRC_UART5TX) ||\
  153. ((__REQSRC__) == DMA_REQSRC_UART5RX) ||\
  154. ((__REQSRC__) == DMA_REQSRC_ISO78160TX) ||\
  155. ((__REQSRC__) == DMA_REQSRC_ISO78160RX) ||\
  156. ((__REQSRC__) == DMA_REQSRC_ISO78161TX) ||\
  157. ((__REQSRC__) == DMA_REQSRC_ISO78161RX) ||\
  158. ((__REQSRC__) == DMA_REQSRC_TIMER0) ||\
  159. ((__REQSRC__) == DMA_REQSRC_TIMER1) ||\
  160. ((__REQSRC__) == DMA_REQSRC_TIMER2) ||\
  161. ((__REQSRC__) == DMA_REQSRC_TIMER3) ||\
  162. ((__REQSRC__) == DMA_REQSRC_SPI1TX) ||\
  163. ((__REQSRC__) == DMA_REQSRC_SPI1RX) ||\
  164. ((__REQSRC__) == DMA_REQSRC_U32K0) ||\
  165. ((__REQSRC__) == DMA_REQSRC_U32K1) ||\
  166. ((__REQSRC__) == DMA_REQSRC_CMP1) ||\
  167. ((__REQSRC__) == DMA_REQSRC_CMP2) ||\
  168. ((__REQSRC__) == DMA_REQSRC_SPI2TX) ||\
  169. ((__REQSRC__) == DMA_REQSRC_SPI2RX))
  170. #define IS_DMA_DESTADDRMOD(__DAM__) (((__DAM__) == DMA_DESTADDRMODE_FIX) ||\
  171. ((__DAM__) == DMA_DESTADDRMODE_PEND) ||\
  172. ((__DAM__) == DMA_DESTADDRMODE_FEND))
  173. #define IS_DMA_SRCADDRMOD(__SAM__) (((__SAM__) == DMA_SRCADDRMODE_FIX) ||\
  174. ((__SAM__) == DMA_SRCADDRMODE_PEND) ||\
  175. ((__SAM__) == DMA_SRCADDRMODE_FEND))
  176. #define IS_DMA_TRANSSIZE(__TSIZE__) (((__TSIZE__) == DMA_TRANSSIZE_BYTE) ||\
  177. ((__TSIZE__) == DMA_TRANSSIZE_HWORD) ||\
  178. ((__TSIZE__) == DMA_TRANSSIZE_WORD))
  179. #define IS_DMA_AESMOD(__AESMOD__) (((__AESMOD__) == DMA_AESMODE_128) ||\
  180. ((__AESMOD__) == DMA_AESMODE_192) ||\
  181. ((__AESMOD__) == DMA_AESMODE_256))
  182. #define IS_DMA_AESDIR(__AESDIR__) (((__AESDIR__) == DMA_AESDIRECTION_ENCODE) ||\
  183. ((__AESDIR__) == DMA_AESDIRECTION_DECODE))
  184. #define IS_DMA_INT(__INT__) ((((__INT__) & DMA_INT_Msk) != 0U) &&\
  185. (((__INT__) & ~DMA_INT_Msk) == 0U))
  186. #define IS_DMA_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == DMA_INTSTS_C3DA) ||\
  187. ((__INTFLAGR__) == DMA_INTSTS_C2DA) ||\
  188. ((__INTFLAGR__) == DMA_INTSTS_C1DA) ||\
  189. ((__INTFLAGR__) == DMA_INTSTS_C0DA) ||\
  190. ((__INTFLAGR__) == DMA_INTSTS_C3FE) ||\
  191. ((__INTFLAGR__) == DMA_INTSTS_C2FE) ||\
  192. ((__INTFLAGR__) == DMA_INTSTS_C1FE) ||\
  193. ((__INTFLAGR__) == DMA_INTSTS_C0FE) ||\
  194. ((__INTFLAGR__) == DMA_INTSTS_C3PE) ||\
  195. ((__INTFLAGR__) == DMA_INTSTS_C2PE) ||\
  196. ((__INTFLAGR__) == DMA_INTSTS_C1PE) ||\
  197. ((__INTFLAGR__) == DMA_INTSTS_C0PE) ||\
  198. ((__INTFLAGR__) == DMA_INTSTS_C3BUSY) ||\
  199. ((__INTFLAGR__) == DMA_INTSTS_C2BUSY) ||\
  200. ((__INTFLAGR__) == DMA_INTSTS_C1BUSY) ||\
  201. ((__INTFLAGR__) == DMA_INTSTS_C0BUSY))
  202. #define IS_DMA_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & DMA_INTSTS_Msk) != 0U) &&\
  203. (((__INTFLAGC__) & ~DMA_INTSTS_Msk) == 0U))
  204. /* Exported Functions ------------------------------------------------------- */
  205. /* DMA Exported Functions Group1:
  206. (De)Initialization ------------------------*/
  207. void DMA_DeInit(uint32_t Channel);
  208. void DMA_Init(DMA_InitType *InitStruct, uint32_t Channel);
  209. void DMA_AESDeInit(void);
  210. void DMA_AESInit(DMA_AESInitType *InitStruct);
  211. /* DMA Exported Functions Group2:
  212. Interrupt (flag) --------------------------*/
  213. void DMA_INTConfig(uint32_t INTMask, uint32_t NewState);
  214. uint8_t DMA_GetINTStatus(uint32_t INTMask);
  215. void DMA_ClearINTStatus(uint32_t INTMask);
  216. /* DMA Exported Functions Group3:
  217. MISC Configuration ------------------------*/
  218. void DMA_Cmd(uint32_t Channel, uint32_t NewState);
  219. void DMA_AESCmd(uint32_t NewState);
  220. void DMA_StopTransmit(uint32_t Channel, uint32_t NewState);
  221. uint8_t DMA_GetFrameLenTransferred(uint32_t Channel);
  222. uint8_t DMA_GetPackLenTransferred(uint32_t Channel);
  223. #ifdef __cplusplus
  224. }
  225. #endif
  226. #endif /* __LIB_DMA_H */
  227. /*********************************** END OF FILE ******************************/