You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

783 lines
47 KiB

  1. /**
  2. ******************************************************************************
  3. * @file stm32h7xx_ll_mdma.c
  4. * @author MCD Application Team
  5. * @brief MDMA LL module driver.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. #if defined(USE_FULL_LL_DRIVER)
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "stm32h7xx_ll_mdma.h"
  22. #include "stm32h7xx_ll_bus.h"
  23. #ifdef USE_FULL_ASSERT
  24. #include "stm32_assert.h"
  25. #else
  26. #define assert_param(expr) ((void)0U)
  27. #endif
  28. /** @addtogroup STM32H7xx_LL_Driver
  29. * @{
  30. */
  31. #if defined (MDMA)
  32. /** @defgroup MDMA_LL MDMA
  33. * @{
  34. */
  35. /* Private types -------------------------------------------------------------*/
  36. /* Private variables ---------------------------------------------------------*/
  37. /* Private constants ---------------------------------------------------------*/
  38. /* Private macros ------------------------------------------------------------*/
  39. /** @addtogroup MDMA_LL_Private_Macros
  40. * @{
  41. */
  42. #define IS_LL_MDMA_ALL_CHANNEL_INSTANCE(INSTANCE, CHANNEL) (((INSTANCE) == MDMA) && \
  43. (((CHANNEL) == LL_MDMA_CHANNEL_0) || \
  44. ((CHANNEL) == LL_MDMA_CHANNEL_1) || \
  45. ((CHANNEL) == LL_MDMA_CHANNEL_2) || \
  46. ((CHANNEL) == LL_MDMA_CHANNEL_3) || \
  47. ((CHANNEL) == LL_MDMA_CHANNEL_4) || \
  48. ((CHANNEL) == LL_MDMA_CHANNEL_5) || \
  49. ((CHANNEL) == LL_MDMA_CHANNEL_6) || \
  50. ((CHANNEL) == LL_MDMA_CHANNEL_7) || \
  51. ((CHANNEL) == LL_MDMA_CHANNEL_8) || \
  52. ((CHANNEL) == LL_MDMA_CHANNEL_9) || \
  53. ((CHANNEL) == LL_MDMA_CHANNEL_10)|| \
  54. ((CHANNEL) == LL_MDMA_CHANNEL_11)|| \
  55. ((CHANNEL) == LL_MDMA_CHANNEL_12)|| \
  56. ((CHANNEL) == LL_MDMA_CHANNEL_13)|| \
  57. ((CHANNEL) == LL_MDMA_CHANNEL_14)|| \
  58. ((CHANNEL) == LL_MDMA_CHANNEL_15)|| \
  59. ((CHANNEL) == LL_MDMA_CHANNEL_ALL)))
  60. #define IS_LL_MDMA_BLK_DATALENGTH(__VALUE__) ((__VALUE__) <= 0x00010000U)
  61. #define IS_LL_MDMA_BLK_REPEATCOUNT(__VALUE__) ((__VALUE__) <= 0x00000FFFU)
  62. #define IS_LL_MDMA_WORDENDIANESS(__VALUE__) (((__VALUE__) == LL_MDMA_WORD_ENDIANNESS_PRESERVE) || \
  63. ((__VALUE__) == LL_MDMA_WORD_ENDIANNESS_EXCHANGE))
  64. #define IS_LL_MDMA_HALFWORDENDIANESS(__VALUE__) (((__VALUE__) == LL_MDMA_HALFWORD_ENDIANNESS_PRESERVE) || \
  65. ((__VALUE__) == LL_MDMA_HALFWORD_ENDIANNESS_EXCHANGE))
  66. #define IS_LL_MDMA_BYTEENDIANESS(__VALUE__) (((__VALUE__) == LL_MDMA_BYTE_ENDIANNESS_PRESERVE) || \
  67. ((__VALUE__) == LL_MDMA_BYTE_ENDIANNESS_EXCHANGE))
  68. #define IS_LL_MDMA_PRIORITY(__VALUE__) (((__VALUE__) == LL_MDMA_PRIORITY_LOW) || \
  69. ((__VALUE__) == LL_MDMA_PRIORITY_MEDIUM) || \
  70. ((__VALUE__) == LL_MDMA_PRIORITY_HIGH) || \
  71. ((__VALUE__) == LL_MDMA_PRIORITY_VERYHIGH))
  72. #define IS_LL_MDMA_BUFFWRITEMODE(__VALUE__) (((__VALUE__) == LL_MDMA_BUFF_WRITE_DISABLE) || \
  73. ((__VALUE__) == LL_MDMA_BUFF_WRITE_ENABLE))
  74. #define IS_LL_MDMA_REQUESTMODE(__VALUE__) (((__VALUE__) == LL_MDMA_REQUEST_MODE_HW) || \
  75. ((__VALUE__) == LL_MDMA_REQUEST_MODE_SW))
  76. #define IS_LL_MDMA_TRIGGERMODE(__VALUE__) (((__VALUE__) == LL_MDMA_BUFFER_TRANSFER) || \
  77. ((__VALUE__) == LL_MDMA_BLOCK_TRANSFER) || \
  78. ((__VALUE__) == LL_MDMA_REPEAT_BLOCK_TRANSFER) || \
  79. ((__VALUE__) == LL_MDMA_FULL_TRANSFER))
  80. #define IS_LL_MDMA_PADDINGALIGNEMENT(__VALUE__) (((__VALUE__) == LL_MDMA_DATAALIGN_RIGHT) || \
  81. ((__VALUE__) == LL_MDMA_DATAALIGN_RIGHT_SIGNED) || \
  82. ((__VALUE__) == LL_MDMA_DATAALIGN_LEFT))
  83. #define IS_LL_MDMA_PACKMODE(__VALUE__) (((__VALUE__) == LL_MDMA_PACK_DISABLE) || \
  84. ((__VALUE__) == LL_MDMA_PACK_ENABLE))
  85. #define IS_LL_MDMA_BUFFER_XFERLENGTH(__VALUE__) ((__VALUE__) <= 0x0000007FU)
  86. #define IS_LL_MDMA_DESTBURST(__VALUE__) (((__VALUE__) == LL_MDMA_DEST_BURST_SINGLE) || \
  87. ((__VALUE__) == LL_MDMA_DEST_BURST_2BEATS) || \
  88. ((__VALUE__) == LL_MDMA_DEST_BURST_4BEATS) || \
  89. ((__VALUE__) == LL_MDMA_DEST_BURST_8BEATS) || \
  90. ((__VALUE__) == LL_MDMA_DEST_BURST_16BEATS)|| \
  91. ((__VALUE__) == LL_MDMA_DEST_BURST_32BEATS)|| \
  92. ((__VALUE__) == LL_MDMA_DEST_BURST_64BEATS)|| \
  93. ((__VALUE__) == LL_MDMA_DEST_BURST_128BEATS))
  94. #define IS_LL_MDMA_SRCTBURST(__VALUE__) (((__VALUE__) == LL_MDMA_SRC_BURST_SINGLE) || \
  95. ((__VALUE__) == LL_MDMA_SRC_BURST_2BEATS) || \
  96. ((__VALUE__) == LL_MDMA_SRC_BURST_4BEATS) || \
  97. ((__VALUE__) == LL_MDMA_SRC_BURST_8BEATS) || \
  98. ((__VALUE__) == LL_MDMA_SRC_BURST_16BEATS)|| \
  99. ((__VALUE__) == LL_MDMA_SRC_BURST_32BEATS)|| \
  100. ((__VALUE__) == LL_MDMA_SRC_BURST_64BEATS)|| \
  101. ((__VALUE__) == LL_MDMA_SRC_BURST_128BEATS))
  102. #define IS_LL_MDMA_DESTINCSIZE(__VALUE__) (((__VALUE__) == LL_MDMA_DEST_INC_OFFSET_BYTE) || \
  103. ((__VALUE__) == LL_MDMA_DEST_INC_OFFSET_HALFWORD) || \
  104. ((__VALUE__) == LL_MDMA_DEST_INC_OFFSET_WORD) || \
  105. ((__VALUE__) == LL_MDMA_DEST_INC_OFFSET_DOUBLEWORD))
  106. #define IS_LL_MDMA_SRCINCSIZE(__VALUE__) (((__VALUE__) == LL_MDMA_SRC_INC_OFFSET_BYTE) || \
  107. ((__VALUE__) == LL_MDMA_SRC_INC_OFFSET_HALFWORD) || \
  108. ((__VALUE__) == LL_MDMA_SRC_INC_OFFSET_WORD) || \
  109. ((__VALUE__) == LL_MDMA_SRC_INC_OFFSET_DOUBLEWORD))
  110. #define IS_LL_MDMA_DESTDATASIZE(__VALUE__) (((__VALUE__) == LL_MDMA_DEST_DATA_SIZE_BYTE) || \
  111. ((__VALUE__) == LL_MDMA_DEST_DATA_SIZE_HALFWORD) || \
  112. ((__VALUE__) == LL_MDMA_DEST_DATA_SIZE_WORD) || \
  113. ((__VALUE__) == LL_MDMA_DEST_DATA_SIZE_DOUBLEWORD))
  114. #define IS_LL_MDMA_SRCDATASIZE(__VALUE__) (((__VALUE__) == LL_MDMA_SRC_DATA_SIZE_BYTE) || \
  115. ((__VALUE__) == LL_MDMA_SRC_DATA_SIZE_HALFWORD) || \
  116. ((__VALUE__) == LL_MDMA_SRC_DATA_SIZE_WORD) || \
  117. ((__VALUE__) == LL_MDMA_SRC_DATA_SIZE_DOUBLEWORD))
  118. #define IS_LL_MDMA_DESTINCMODE(__VALUE__) (((__VALUE__) == LL_MDMA_DEST_FIXED) || \
  119. ((__VALUE__) == LL_MDMA_DEST_INCREMENT) || \
  120. ((__VALUE__) == LL_MDMA_DEST_DECREMENT))
  121. #define IS_LL_MDMA_SRCINCMODE(__VALUE__) (((__VALUE__) == LL_MDMA_SRC_FIXED) || \
  122. ((__VALUE__) == LL_MDMA_SRC_INCREMENT) || \
  123. ((__VALUE__) == LL_MDMA_SRC_DECREMENT))
  124. #define IS_LL_MDMA_BLKRPT_DEST_ADDRUPDATEMODE(__VALUE__) (((__VALUE__) == LL_MDMA_BLK_RPT_DEST_ADDR_INCREMENT) || \
  125. ((__VALUE__) == LL_MDMA_BLK_RPT_DEST_ADDR_DECREMENT))
  126. #define IS_LL_MDMA_BLKRPT_SRC_ADDRUPDATEMODE(__VALUE__) (((__VALUE__) == LL_MDMA_BLK_RPT_SRC_ADDR_INCREMENT) || \
  127. ((__VALUE__) == LL_MDMA_BLK_RPT_SRC_ADDR_DECREMENT))
  128. #define IS_LL_MDMA_BLKRPT_DEST_ADDRUPDATEVAL(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
  129. #define IS_LL_MDMA_BLKRPT_SRC_ADDRUPDATEVAL(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
  130. #define IS_LL_MDMA_DEST_BUS(__VALUE__) (((__VALUE__) == LL_MDMA_DEST_BUS_SYSTEM_AXI) || \
  131. ((__VALUE__) == LL_MDMA_DEST_BUS_AHB_TCM))
  132. #define IS_LL_MDMA_SRC_BUS(__VALUE__) (((__VALUE__) == LL_MDMA_SRC_BUS_SYSTEM_AXI) || \
  133. ((__VALUE__) == LL_MDMA_SRC_BUS_AHB_TCM))
  134. #if defined (QUADSPI) && defined (JPEG) && defined (DSI) /* STM32H747/57 devices */
  135. #define IS_LL_MDMA_HWTRIGGER(__VALUE__) (((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM0_TC) || \
  136. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM1_TC) || \
  137. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM2_TC) || \
  138. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM3_TC) || \
  139. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM4_TC) || \
  140. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM5_TC) || \
  141. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM6_TC) || \
  142. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM7_TC) || \
  143. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM0_TC) || \
  144. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM1_TC) || \
  145. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM2_TC) || \
  146. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM3_TC) || \
  147. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM4_TC) || \
  148. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM5_TC) || \
  149. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM6_TC) || \
  150. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM7_TC) || \
  151. ((__VALUE__) == LL_MDMA_REQ_LTDC_LINE_IT) || \
  152. ((__VALUE__) == LL_MDMA_REQ_JPEG_INFIFO_TH) || \
  153. ((__VALUE__) == LL_MDMA_REQ_JPEG_INFIFO_NF) || \
  154. ((__VALUE__) == LL_MDMA_REQ_JPEG_OUTFIFO_TH) || \
  155. ((__VALUE__) == LL_MDMA_REQ_JPEG_OUTFIFO_NE) || \
  156. ((__VALUE__) == LL_MDMA_REQ_JPEG_END_CONVERSION) || \
  157. ((__VALUE__) == LL_MDMA_REQ_QUADSPI_FIFO_TH) || \
  158. ((__VALUE__) == LL_MDMA_REQ_QUADSPI_TC) || \
  159. ((__VALUE__) == LL_MDMA_REQ_DMA2D_CLUT_TC) || \
  160. ((__VALUE__) == LL_MDMA_REQ_DMA2D_TC) || \
  161. ((__VALUE__) == LL_MDMA_REQ_DMA2D_TW) || \
  162. ((__VALUE__) == LL_MDMA_REQ_DSI_TEARING_EFFECT) || \
  163. ((__VALUE__) == LL_MDMA_REQ_DSI_END_REFRESH) || \
  164. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_END_DATA) || \
  165. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_DMA_ENDBUFFER) || \
  166. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_COMMAND_END))
  167. #elif defined (QUADSPI) && defined (JPEG) /* STM32H743/53/45/55 devices */
  168. #define IS_LL_MDMA_HWTRIGGER(__VALUE__) (((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM0_TC) || \
  169. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM1_TC) || \
  170. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM2_TC) || \
  171. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM3_TC) || \
  172. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM4_TC) || \
  173. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM5_TC) || \
  174. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM6_TC) || \
  175. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM7_TC) || \
  176. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM0_TC) || \
  177. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM1_TC) || \
  178. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM2_TC) || \
  179. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM3_TC) || \
  180. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM4_TC) || \
  181. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM5_TC) || \
  182. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM6_TC) || \
  183. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM7_TC) || \
  184. ((__VALUE__) == LL_MDMA_REQ_LTDC_LINE_IT) || \
  185. ((__VALUE__) == LL_MDMA_REQ_JPEG_INFIFO_TH) || \
  186. ((__VALUE__) == LL_MDMA_REQ_JPEG_INFIFO_NF) || \
  187. ((__VALUE__) == LL_MDMA_REQ_JPEG_OUTFIFO_TH) || \
  188. ((__VALUE__) == LL_MDMA_REQ_JPEG_OUTFIFO_NE) || \
  189. ((__VALUE__) == LL_MDMA_REQ_JPEG_END_CONVERSION) || \
  190. ((__VALUE__) == LL_MDMA_REQ_QUADSPI_FIFO_TH) || \
  191. ((__VALUE__) == LL_MDMA_REQ_QUADSPI_TC) || \
  192. ((__VALUE__) == LL_MDMA_REQ_DMA2D_CLUT_TC) || \
  193. ((__VALUE__) == LL_MDMA_REQ_DMA2D_TC) || \
  194. ((__VALUE__) == LL_MDMA_REQ_DMA2D_TW) || \
  195. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_END_DATA) || \
  196. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_DMA_ENDBUFFER) || \
  197. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_COMMAND_END))
  198. #elif defined (QUADSPI) /* STM32H742 devices */
  199. #define IS_LL_MDMA_HWTRIGGER(__VALUE__) (((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM0_TC) || \
  200. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM1_TC) || \
  201. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM2_TC) || \
  202. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM3_TC) || \
  203. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM4_TC) || \
  204. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM5_TC) || \
  205. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM6_TC) || \
  206. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM7_TC) || \
  207. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM0_TC) || \
  208. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM1_TC) || \
  209. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM2_TC) || \
  210. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM3_TC) || \
  211. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM4_TC) || \
  212. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM5_TC) || \
  213. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM6_TC) || \
  214. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM7_TC) || \
  215. ((__VALUE__) == LL_MDMA_REQ_QUADSPI_FIFO_TH) || \
  216. ((__VALUE__) == LL_MDMA_REQ_QUADSPI_TC) || \
  217. ((__VALUE__) == LL_MDMA_REQ_DMA2D_CLUT_TC) || \
  218. ((__VALUE__) == LL_MDMA_REQ_DMA2D_TC) || \
  219. ((__VALUE__) == LL_MDMA_REQ_DMA2D_TW) || \
  220. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_END_DATA) || \
  221. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_DMA_ENDBUFFER) || \
  222. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_COMMAND_END))
  223. #else /* STM32H7A3/B3 devices */
  224. #define IS_LL_MDMA_HWTRIGGER(__VALUE__) (((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM0_TC) || \
  225. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM1_TC) || \
  226. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM2_TC) || \
  227. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM3_TC) || \
  228. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM4_TC) || \
  229. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM5_TC) || \
  230. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM6_TC) || \
  231. ((__VALUE__) == LL_MDMA_REQ_DMA1_STREAM7_TC) || \
  232. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM0_TC) || \
  233. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM1_TC) || \
  234. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM2_TC) || \
  235. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM3_TC) || \
  236. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM4_TC) || \
  237. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM5_TC) || \
  238. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM6_TC) || \
  239. ((__VALUE__) == LL_MDMA_REQ_DMA2_STREAM7_TC) || \
  240. ((__VALUE__) == LL_MDMA_REQ_LTDC_LINE_IT) || \
  241. ((__VALUE__) == LL_MDMA_REQ_JPEG_INFIFO_TH) || \
  242. ((__VALUE__) == LL_MDMA_REQ_JPEG_INFIFO_NF) || \
  243. ((__VALUE__) == LL_MDMA_REQ_JPEG_OUTFIFO_TH) || \
  244. ((__VALUE__) == LL_MDMA_REQ_JPEG_OUTFIFO_NE) || \
  245. ((__VALUE__) == LL_MDMA_REQ_JPEG_END_CONVERSION) || \
  246. ((__VALUE__) == LL_MDMA_REQ_OCTOSPI1_FIFO_TH) || \
  247. ((__VALUE__) == LL_MDMA_REQ_OCTOSPI1_TC) || \
  248. ((__VALUE__) == LL_MDMA_REQ_DMA2D_CLUT_TC) || \
  249. ((__VALUE__) == LL_MDMA_REQ_DMA2D_TC) || \
  250. ((__VALUE__) == LL_MDMA_REQ_DMA2D_TW) || \
  251. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_END_DATA) || \
  252. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_DMA_ENDBUFFER) || \
  253. ((__VALUE__) == LL_MDMA_REQ_SDMMC1_COMMAND_END) || \
  254. ((__VALUE__) == LL_MDMA_REQ_OCTOSPI2_FIFO_TH) || \
  255. ((__VALUE__) == LL_MDMA_REQ_OCTOSPI2_TC))
  256. #endif /* QUADSPI && JPEG && DSI */
  257. /**
  258. * @}
  259. */
  260. /* Private function prototypes -----------------------------------------------*/
  261. /* Exported functions --------------------------------------------------------*/
  262. /** @addtogroup MDMA_LL_Exported_Functions
  263. * @{
  264. */
  265. /** @addtogroup MDMA_LL_EF_Init
  266. * @{
  267. */
  268. /**
  269. * @brief De-initialize the MDMA registers to their default reset values.
  270. * @param MDMAx MDMAx Instance
  271. * @param Channel This parameter can be one of the following values:
  272. * @arg @ref LL_MDMA_CHANNEL_0
  273. * @arg @ref LL_MDMA_CHANNEL_1
  274. * @arg @ref LL_MDMA_CHANNEL_2
  275. * @arg @ref LL_MDMA_CHANNEL_3
  276. * @arg @ref LL_MDMA_CHANNEL_4
  277. * @arg @ref LL_MDMA_CHANNEL_5
  278. * @arg @ref LL_MDMA_CHANNEL_6
  279. * @arg @ref LL_MDMA_CHANNEL_7
  280. * @arg @ref LL_MDMA_CHANNEL_8
  281. * @arg @ref LL_MDMA_CHANNEL_9
  282. * @arg @ref LL_MDMA_CHANNEL_10
  283. * @arg @ref LL_MDMA_CHANNEL_11
  284. * @arg @ref LL_MDMA_CHANNEL_12
  285. * @arg @ref LL_MDMA_CHANNEL_13
  286. * @arg @ref LL_MDMA_CHANNEL_14
  287. * @arg @ref LL_MDMA_CHANNEL_15
  288. * @arg @ref LL_MDMA_CHANNEL_ALL
  289. * @retval An ErrorStatus enumeration value:
  290. * - SUCCESS: MDMA registers are de-initialized
  291. * - ERROR: Not applicable
  292. */
  293. uint32_t LL_MDMA_DeInit(MDMA_TypeDef *MDMAx, uint32_t Channel)
  294. {
  295. MDMA_Channel_TypeDef *tmp;
  296. ErrorStatus status = SUCCESS;
  297. /* Check the MDMA Instance MDMAx and Channel parameters*/
  298. assert_param(IS_LL_MDMA_ALL_CHANNEL_INSTANCE(MDMAx, Channel));
  299. if (Channel == LL_MDMA_CHANNEL_ALL)
  300. {
  301. LL_AHB3_GRP1_ForceReset(LL_AHB3_GRP1_PERIPH_MDMA);
  302. LL_AHB3_GRP1_ReleaseReset(LL_AHB3_GRP1_PERIPH_MDMA);
  303. }
  304. else
  305. {
  306. /* Disable the selected Channel */
  307. LL_MDMA_DisableChannel(MDMAx,Channel);
  308. /* Get the MDMA Channel Instance */
  309. tmp = (MDMA_Channel_TypeDef *)(LL_MDMA_GET_CHANNEL_INSTANCE(MDMAx, Channel));
  310. /* Reset MDMAx_Channely control register */
  311. LL_MDMA_WriteReg(tmp, CCR, 0U);
  312. /* Reset MDMAx_Channely Configuration register */
  313. LL_MDMA_WriteReg(tmp, CTCR, 0U);
  314. /* Reset MDMAx_Channely block number of data register */
  315. LL_MDMA_WriteReg(tmp, CBNDTR, 0U);
  316. /* Reset MDMAx_Channely source address register */
  317. LL_MDMA_WriteReg(tmp, CSAR, 0U);
  318. /* Reset MDMAx_Channely destination address register */
  319. LL_MDMA_WriteReg(tmp, CDAR, 0U);
  320. /* Reset MDMAx_Channely Block Repeat address Update register */
  321. LL_MDMA_WriteReg(tmp, CBRUR, 0U);
  322. /* Reset MDMAx_Channely Link Address register */
  323. LL_MDMA_WriteReg(tmp, CLAR, 0U);
  324. /* Reset MDMAx_Channely Trigger and Bus selection register */
  325. LL_MDMA_WriteReg(tmp, CTBR, 0U);
  326. /* Reset MDMAx_Channely Mask address register */
  327. LL_MDMA_WriteReg(tmp, CMAR, 0U);
  328. /* Reset MDMAx_Channely Mask Data register */
  329. LL_MDMA_WriteReg(tmp, CMDR, 0U);
  330. /* Reset the Channel pending flags */
  331. LL_MDMA_WriteReg(tmp, CIFCR, 0x0000001FU);
  332. }
  333. return (uint32_t)status;
  334. }
  335. /**
  336. * @brief Initialize the MDMA registers according to the specified parameters in MDMA_InitStruct.
  337. * @note To convert MDMAx_Channely Instance to MDMAx Instance and Channely, use helper macros :
  338. * @arg @ref LL_MDMA_GET_INSTANCE
  339. * @arg @ref LL_MDMA_GET_CHANNEL
  340. * @param MDMAx MDMAx Instance
  341. * @param Channel This parameter can be one of the following values:
  342. * @arg @ref LL_MDMA_CHANNEL_0
  343. * @arg @ref LL_MDMA_CHANNEL_1
  344. * @arg @ref LL_MDMA_CHANNEL_2
  345. * @arg @ref LL_MDMA_CHANNEL_3
  346. * @arg @ref LL_MDMA_CHANNEL_4
  347. * @arg @ref LL_MDMA_CHANNEL_5
  348. * @arg @ref LL_MDMA_CHANNEL_6
  349. * @arg @ref LL_MDMA_CHANNEL_7
  350. * @arg @ref LL_MDMA_CHANNEL_8
  351. * @arg @ref LL_MDMA_CHANNEL_9
  352. * @arg @ref LL_MDMA_CHANNEL_10
  353. * @arg @ref LL_MDMA_CHANNEL_11
  354. * @arg @ref LL_MDMA_CHANNEL_12
  355. * @arg @ref LL_MDMA_CHANNEL_13
  356. * @arg @ref LL_MDMA_CHANNEL_14
  357. * @arg @ref LL_MDMA_CHANNEL_15
  358. * @param MDMA_InitStruct pointer to a @ref LL_MDMA_InitTypeDef structure.
  359. * @retval An ErrorStatus enumeration value:
  360. * - SUCCESS: MDMA registers are initialized
  361. * - ERROR: Not applicable
  362. */
  363. uint32_t LL_MDMA_Init(MDMA_TypeDef *MDMAx, uint32_t Channel, LL_MDMA_InitTypeDef *MDMA_InitStruct)
  364. {
  365. /* Check the MDMA Instance MDMAx and Channel parameters*/
  366. assert_param(IS_LL_MDMA_ALL_CHANNEL_INSTANCE(MDMAx, Channel));
  367. /* Check the MDMA parameters from MDMA_InitStruct */
  368. assert_param(IS_LL_MDMA_BLK_DATALENGTH(MDMA_InitStruct->BlockDataLength));
  369. assert_param(IS_LL_MDMA_BLK_REPEATCOUNT(MDMA_InitStruct->BlockRepeatCount));
  370. assert_param(IS_LL_MDMA_WORDENDIANESS(MDMA_InitStruct->WordEndianess));
  371. assert_param(IS_LL_MDMA_HALFWORDENDIANESS(MDMA_InitStruct->HalfWordEndianess));
  372. assert_param(IS_LL_MDMA_BYTEENDIANESS(MDMA_InitStruct->ByteEndianess));
  373. assert_param(IS_LL_MDMA_PRIORITY(MDMA_InitStruct->Priority));
  374. assert_param(IS_LL_MDMA_BUFFWRITEMODE(MDMA_InitStruct->BufferableWriteMode));
  375. assert_param(IS_LL_MDMA_REQUESTMODE(MDMA_InitStruct->RequestMode));
  376. assert_param(IS_LL_MDMA_TRIGGERMODE(MDMA_InitStruct->TriggerMode));
  377. assert_param(IS_LL_MDMA_PADDINGALIGNEMENT(MDMA_InitStruct->PaddingAlignment));
  378. assert_param(IS_LL_MDMA_PACKMODE(MDMA_InitStruct->PackMode));
  379. assert_param(IS_LL_MDMA_BUFFER_XFERLENGTH(MDMA_InitStruct->BufferTransferLength));
  380. assert_param(IS_LL_MDMA_DESTBURST(MDMA_InitStruct->DestBurst));
  381. assert_param(IS_LL_MDMA_SRCTBURST(MDMA_InitStruct->SrctBurst));
  382. assert_param(IS_LL_MDMA_DESTINCSIZE(MDMA_InitStruct->DestIncSize));
  383. assert_param(IS_LL_MDMA_SRCINCSIZE(MDMA_InitStruct->SrcIncSize));
  384. assert_param(IS_LL_MDMA_DESTDATASIZE(MDMA_InitStruct->DestDataSize));
  385. assert_param(IS_LL_MDMA_SRCDATASIZE(MDMA_InitStruct->SrcDataSize));
  386. assert_param(IS_LL_MDMA_DESTINCMODE(MDMA_InitStruct->DestIncMode));
  387. assert_param(IS_LL_MDMA_SRCINCMODE(MDMA_InitStruct->SrcIncMode));
  388. assert_param(IS_LL_MDMA_BLKRPT_DEST_ADDRUPDATEMODE(MDMA_InitStruct->BlockRepeatDestAddrUpdateMode));
  389. assert_param(IS_LL_MDMA_BLKRPT_SRC_ADDRUPDATEMODE(MDMA_InitStruct->BlockRepeatSrcAddrUpdateMode));
  390. assert_param(IS_LL_MDMA_BLKRPT_DEST_ADDRUPDATEVAL(MDMA_InitStruct->BlockRepeatDestAddrUpdateVal));
  391. assert_param(IS_LL_MDMA_BLKRPT_SRC_ADDRUPDATEVAL(MDMA_InitStruct->BlockRepeatSrcAddrUpdateVal));
  392. assert_param(IS_LL_MDMA_DEST_BUS(MDMA_InitStruct->DestBus));
  393. assert_param(IS_LL_MDMA_SRC_BUS(MDMA_InitStruct->SrcBus));
  394. assert_param(IS_LL_MDMA_HWTRIGGER(MDMA_InitStruct->HWTrigger));
  395. /*-------------------------- MDMAx CCR Configuration --------------------------
  396. * Configure the Transfer endianness na priority with parameter :
  397. * - WordEndianess: MDMA_CCR_WEX[14] bit
  398. * - HalfWordEndianess: MDMA_CCR_HEX[13] bit
  399. * - WordEndianess: MDMA_CCR_BEX[12] bit
  400. * - Priority: MDMA_CCR_BEX[7:6] bits
  401. */
  402. LL_MDMA_ConfigXferEndianness(MDMAx, Channel, MDMA_InitStruct->WordEndianess | \
  403. MDMA_InitStruct->HalfWordEndianess | \
  404. MDMA_InitStruct->ByteEndianess);
  405. LL_MDMA_SetChannelPriorityLevel(MDMAx, Channel, MDMA_InitStruct->Priority);
  406. /*-------------------------- MDMAx CTCR Configuration --------------------------
  407. * Configure the Transfer parameter :
  408. * - BufferableWriteMode: MDMA_CTCR_BWM[31] bit
  409. * - RequestMode: MDMA_CTCR_SWRM[30] bit
  410. * - TriggerMode: MDMA_CTCR_TRGM[29:28] bits
  411. * - PaddingAlignment: MDMA_CTCR_PAM[27:26] bits
  412. * - PackMode: MDMA_CTCR_PKE[25] bit
  413. * - BufferTransferLength: MDMA_CTCR_TLEN[24:18] bits
  414. * - DestBurst: MDMA_CTCR_DBURST[17:15] bits
  415. * - SrctBurst: MDMA_CTCR_SBURST[14:12] bits
  416. * - DestIncSize: MDMA_CTCR_DINCOS[11:10] bits
  417. * - SrcIncSize: MDMA_CTCR_SINCOS[9:8] bits
  418. * - DestDataSize: MDMA_CTCR_DSIZE[7:6] bits
  419. * - SrcDataSize: MDMA_CTCR_SSIZE[5:4] bits
  420. * - DestIncMode: MDMA_CTCR_DINC[3:2] bits
  421. * - SrcIncMode: MDMA_CTCR_SINC[1:0] bits
  422. */
  423. LL_MDMA_ConfigTransfer(MDMAx, Channel, MDMA_InitStruct->BufferableWriteMode | \
  424. MDMA_InitStruct->RequestMode | \
  425. MDMA_InitStruct->TriggerMode | \
  426. MDMA_InitStruct->PaddingAlignment | \
  427. MDMA_InitStruct->PackMode | \
  428. MDMA_InitStruct->DestBurst | \
  429. MDMA_InitStruct->SrctBurst | \
  430. MDMA_InitStruct->DestIncSize | \
  431. MDMA_InitStruct->SrcIncSize | \
  432. MDMA_InitStruct->DestDataSize | \
  433. MDMA_InitStruct->SrcDataSize | \
  434. MDMA_InitStruct->DestIncMode | \
  435. MDMA_InitStruct->SrcIncMode, MDMA_InitStruct->BufferTransferLength);
  436. /*-------------------------- MDMAx CBNDTR Configuration --------------------------
  437. * Configure the Transfer Block counters and update mode with parameter :
  438. * - BlockRepeatCount: MDMA_CBNDTR_BRC[31:20] bits
  439. * - BlockDataLength: MDMA_CBNDTR_BNDT[16:0] bits
  440. * - BlockRepeatDestAddrUpdateMode: MDMA_CBNDTR_BRDUM[19] bit
  441. * - BlockRepeatDestAddrUpdateMode: MDMA_CBNDTR_BRSUM[18] bit
  442. */
  443. LL_MDMA_ConfigBlkCounters(MDMAx, Channel, MDMA_InitStruct->BlockRepeatCount, MDMA_InitStruct->BlockDataLength);
  444. LL_MDMA_ConfigBlkRepeatAddrUpdate(MDMAx, Channel, MDMA_InitStruct->BlockRepeatDestAddrUpdateMode | \
  445. MDMA_InitStruct->BlockRepeatSrcAddrUpdateMode);
  446. /*-------------------------- MDMAx CSAR Configuration --------------------------
  447. * Configure the Transfer source address with parameter :
  448. * - SrcAddress: MDMA_CSAR_SAR[31:0] bits
  449. */
  450. LL_MDMA_SetSourceAddress(MDMAx, Channel, MDMA_InitStruct->SrcAddress);
  451. /*-------------------------- MDMAx CDAR Configuration --------------------------
  452. * Configure the Transfer destination address with parameter :
  453. * - DstAddress: MDMA_CDAR_DAR[31:0] bits
  454. */
  455. LL_MDMA_SetDestinationAddress(MDMAx, Channel, MDMA_InitStruct->DstAddress);
  456. /*-------------------------- MDMAx CBRUR Configuration --------------------------
  457. * Configure the Transfer Block repeat address update value with parameter :
  458. * - BlockRepeatDestAddrUpdateVal: MDMA_CBRUR_DUV[31:16] bits
  459. * - BlockRepeatSrcAddrUpdateVal: MDMA_CBRUR_SUV[15:0] bits
  460. */
  461. LL_MDMA_ConfigBlkRptAddrUpdateValue(MDMAx, Channel, MDMA_InitStruct->BlockRepeatSrcAddrUpdateVal, \
  462. MDMA_InitStruct->BlockRepeatDestAddrUpdateVal);
  463. /*-------------------------- MDMAx CLAR Configuration --------------------------
  464. * Configure the Transfer linked list address with parameter :
  465. * - LinkAddress: MDMA_CLAR_LAR[31:0] bits
  466. */
  467. LL_MDMA_SetLinkAddress(MDMAx, Channel, MDMA_InitStruct->LinkAddress);
  468. /*-------------------------- MDMAx CTBR Configuration --------------------------
  469. * Configure the Transfer HW trigger and bus selection with parameter :
  470. * - DestBus: MDMA_TBR_DBUS[17] bit
  471. * - SrcBus: MDMA_TBR_SBUS[16] bit
  472. * - HWTrigger: MDMA_TBR_TSEL[5:0] bits
  473. */
  474. LL_MDMA_ConfigBusSelection(MDMAx, Channel, MDMA_InitStruct->DestBus | MDMA_InitStruct->SrcBus);
  475. LL_MDMA_SetHWTrigger(MDMAx, Channel, MDMA_InitStruct->HWTrigger);
  476. /*-------------------------- MDMAx CMAR Configuration --------------------------
  477. * Configure the mask address with parameter :
  478. * - MaskAddress: MDMA_CMAR_MAR[31:0] bits
  479. */
  480. LL_MDMA_SetMaskAddress(MDMAx, Channel, MDMA_InitStruct->MaskAddress);
  481. /*-------------------------- MDMAx CMDR Configuration --------------------------
  482. * Configure the mask data with parameter :
  483. * - MaskData: MDMA_CMDR_MDR[31:0] bits
  484. */
  485. LL_MDMA_SetMaskData(MDMAx, Channel, MDMA_InitStruct->MaskData);
  486. return (uint32_t)SUCCESS;
  487. }
  488. /**
  489. * @brief Set each @ref LL_MDMA_InitTypeDef field to default value.
  490. * @param MDMA_InitStruct Pointer to a @ref LL_MDMA_InitTypeDef structure.
  491. * @retval None
  492. */
  493. void LL_MDMA_StructInit(LL_MDMA_InitTypeDef *MDMA_InitStruct)
  494. {
  495. /* Set DMA_InitStruct fields to default values */
  496. MDMA_InitStruct->SrcAddress = 0x00000000U;
  497. MDMA_InitStruct->DstAddress = 0x00000000U;
  498. MDMA_InitStruct->BlockDataLength = 0x00000000U;
  499. MDMA_InitStruct->BlockRepeatCount = 0x00000000U;
  500. MDMA_InitStruct->WordEndianess = LL_MDMA_WORD_ENDIANNESS_PRESERVE;
  501. MDMA_InitStruct->HalfWordEndianess = LL_MDMA_HALFWORD_ENDIANNESS_PRESERVE;
  502. MDMA_InitStruct->ByteEndianess = LL_MDMA_BYTE_ENDIANNESS_PRESERVE;
  503. MDMA_InitStruct->Priority = LL_MDMA_PRIORITY_LOW;
  504. MDMA_InitStruct->BufferableWriteMode = LL_MDMA_BUFF_WRITE_DISABLE;
  505. MDMA_InitStruct->RequestMode = LL_MDMA_REQUEST_MODE_HW;
  506. MDMA_InitStruct->TriggerMode = LL_MDMA_BUFFER_TRANSFER;
  507. MDMA_InitStruct->PaddingAlignment = LL_MDMA_DATAALIGN_RIGHT;
  508. MDMA_InitStruct->PackMode = LL_MDMA_PACK_DISABLE;
  509. MDMA_InitStruct->BufferTransferLength = 0x00000000U;
  510. MDMA_InitStruct->DestBurst = LL_MDMA_DEST_BURST_SINGLE;
  511. MDMA_InitStruct->SrctBurst = LL_MDMA_SRC_BURST_SINGLE;
  512. MDMA_InitStruct->DestIncSize = LL_MDMA_DEST_INC_OFFSET_BYTE;
  513. MDMA_InitStruct->SrcIncSize = LL_MDMA_SRC_INC_OFFSET_BYTE;
  514. MDMA_InitStruct->DestDataSize = LL_MDMA_DEST_DATA_SIZE_BYTE;
  515. MDMA_InitStruct->SrcDataSize = LL_MDMA_SRC_DATA_SIZE_BYTE;
  516. MDMA_InitStruct->DestIncMode = LL_MDMA_DEST_FIXED;
  517. MDMA_InitStruct->SrcIncMode = LL_MDMA_SRC_FIXED;
  518. MDMA_InitStruct->BlockRepeatDestAddrUpdateMode = LL_MDMA_BLK_RPT_DEST_ADDR_INCREMENT;
  519. MDMA_InitStruct->BlockRepeatSrcAddrUpdateMode = LL_MDMA_BLK_RPT_SRC_ADDR_INCREMENT;
  520. MDMA_InitStruct->BlockRepeatDestAddrUpdateVal = 0x00000000U;
  521. MDMA_InitStruct->BlockRepeatSrcAddrUpdateVal = 0x00000000U;
  522. MDMA_InitStruct->LinkAddress = 0x00000000U;
  523. MDMA_InitStruct->DestBus = LL_MDMA_DEST_BUS_SYSTEM_AXI;
  524. MDMA_InitStruct->SrcBus = LL_MDMA_SRC_BUS_SYSTEM_AXI;
  525. MDMA_InitStruct->HWTrigger = LL_MDMA_REQ_DMA1_STREAM0_TC;
  526. MDMA_InitStruct->MaskAddress = 0x00000000U;
  527. MDMA_InitStruct->MaskData = 0x00000000U;
  528. }
  529. /**
  530. * @brief Initializes MDMA linked list node according to the specified
  531. * parameters in the MDMA_InitStruct.
  532. * @param MDMA_InitStruct Pointer to a @ref LL_MDMA_InitTypeDef structure that contains
  533. * linked list node registers configurations.
  534. * @param pNode Pointer to linked list node to fill according to MDMA_InitStruct parameters.
  535. * @retval None
  536. */
  537. void LL_MDMA_CreateLinkNode(LL_MDMA_InitTypeDef *MDMA_InitStruct, LL_MDMA_LinkNodeTypeDef *pNode)
  538. {
  539. /* Check the MDMA parameters from MDMA_InitStruct */
  540. assert_param(IS_LL_MDMA_BLK_DATALENGTH(MDMA_InitStruct->BlockDataLength));
  541. assert_param(IS_LL_MDMA_BLK_REPEATCOUNT(MDMA_InitStruct->BlockRepeatCount));
  542. assert_param(IS_LL_MDMA_BUFFWRITEMODE(MDMA_InitStruct->BufferableWriteMode));
  543. assert_param(IS_LL_MDMA_REQUESTMODE(MDMA_InitStruct->RequestMode));
  544. assert_param(IS_LL_MDMA_TRIGGERMODE(MDMA_InitStruct->TriggerMode));
  545. assert_param(IS_LL_MDMA_PADDINGALIGNEMENT(MDMA_InitStruct->PaddingAlignment));
  546. assert_param(IS_LL_MDMA_PACKMODE(MDMA_InitStruct->PackMode));
  547. assert_param(IS_LL_MDMA_BUFFER_XFERLENGTH(MDMA_InitStruct->BufferTransferLength));
  548. assert_param(IS_LL_MDMA_DESTBURST(MDMA_InitStruct->DestBurst));
  549. assert_param(IS_LL_MDMA_SRCTBURST(MDMA_InitStruct->SrctBurst));
  550. assert_param(IS_LL_MDMA_DESTINCSIZE(MDMA_InitStruct->DestIncSize));
  551. assert_param(IS_LL_MDMA_SRCINCSIZE(MDMA_InitStruct->SrcIncSize));
  552. assert_param(IS_LL_MDMA_DESTDATASIZE(MDMA_InitStruct->DestDataSize));
  553. assert_param(IS_LL_MDMA_SRCDATASIZE(MDMA_InitStruct->SrcDataSize));
  554. assert_param(IS_LL_MDMA_DESTINCMODE(MDMA_InitStruct->DestIncMode));
  555. assert_param(IS_LL_MDMA_SRCINCMODE(MDMA_InitStruct->SrcIncMode));
  556. assert_param(IS_LL_MDMA_BLKRPT_DEST_ADDRUPDATEMODE(MDMA_InitStruct->BlockRepeatDestAddrUpdateMode));
  557. assert_param(IS_LL_MDMA_BLKRPT_SRC_ADDRUPDATEMODE(MDMA_InitStruct->BlockRepeatSrcAddrUpdateMode));
  558. assert_param(IS_LL_MDMA_BLKRPT_DEST_ADDRUPDATEVAL(MDMA_InitStruct->BlockRepeatDestAddrUpdateVal));
  559. assert_param(IS_LL_MDMA_BLKRPT_SRC_ADDRUPDATEVAL(MDMA_InitStruct->BlockRepeatSrcAddrUpdateVal));
  560. assert_param(IS_LL_MDMA_DEST_BUS(MDMA_InitStruct->DestBus));
  561. assert_param(IS_LL_MDMA_SRC_BUS(MDMA_InitStruct->SrcBus));
  562. assert_param(IS_LL_MDMA_HWTRIGGER(MDMA_InitStruct->HWTrigger));
  563. /*-------------------------- MDMAx CTCR Configuration --------------------------
  564. * Configure the Transfer parameter :
  565. * - BufferableWriteMode: MDMA_CTCR_BWM[31] bit
  566. * - RequestMode: MDMA_CTCR_SWRM[30] bit
  567. * - TriggerMode: MDMA_CTCR_TRGM[29:28] bits
  568. * - PaddingAlignment: MDMA_CTCR_PAM[27:26] bits
  569. * - PackMode: MDMA_CTCR_PKE[25] bit
  570. * - BufferTransferLength: MDMA_CTCR_TLEN[24:18] bits
  571. * - DestBurst: MDMA_CTCR_DBURST[17:15] bits
  572. * - SrctBurst: MDMA_CTCR_SBURST[14:12] bits
  573. * - DestIncSize: MDMA_CTCR_DINCOS[11:10] bits
  574. * - SrcIncSize: MDMA_CTCR_SINCOS[9:8] bits
  575. * - DestDataSize: MDMA_CTCR_DSIZE[7:6] bits
  576. * - SrcDataSize: MDMA_CTCR_SSIZE[5:4] bits
  577. * - DestIncMode: MDMA_CTCR_DINC[3:2] bits
  578. * - SrcIncMode: MDMA_CTCR_SINC[1:0] bits
  579. */
  580. pNode->CTCR = MDMA_InitStruct->BufferableWriteMode | \
  581. MDMA_InitStruct->RequestMode | \
  582. MDMA_InitStruct->TriggerMode | \
  583. MDMA_InitStruct->PaddingAlignment | \
  584. MDMA_InitStruct->PackMode | \
  585. MDMA_InitStruct->DestBurst | \
  586. MDMA_InitStruct->SrctBurst | \
  587. MDMA_InitStruct->DestIncSize | \
  588. MDMA_InitStruct->SrcIncSize | \
  589. MDMA_InitStruct->DestDataSize | \
  590. MDMA_InitStruct->SrcDataSize | \
  591. MDMA_InitStruct->DestIncMode | \
  592. MDMA_InitStruct->SrcIncMode | \
  593. ((MDMA_InitStruct->BufferTransferLength << MDMA_CTCR_TLEN_Pos) & MDMA_CTCR_TLEN_Msk);
  594. /*-------------------------- MDMAx CBNDTR Configuration --------------------------
  595. * Configure the Transfer Block counters and update mode with parameter :
  596. * - BlockRepeatCount: MDMA_CBNDTR_BRC[31:20] bits
  597. * - BlockDataLength: MDMA_CBNDTR_BNDT[16:0] bits
  598. * - BlockRepeatDestAddrUpdateMode: MDMA_CBNDTR_BRDUM[19] bit
  599. * - BlockRepeatDestAddrUpdateMode: MDMA_CBNDTR_BRSUM[18] bit
  600. */
  601. pNode->CBNDTR = ((MDMA_InitStruct->BlockRepeatCount << MDMA_CBNDTR_BRC_Pos) & MDMA_CBNDTR_BRC_Msk) | \
  602. MDMA_InitStruct->BlockRepeatDestAddrUpdateMode | \
  603. MDMA_InitStruct->BlockRepeatSrcAddrUpdateMode | \
  604. (MDMA_InitStruct->BlockDataLength & MDMA_CBNDTR_BNDT_Msk);
  605. /*-------------------------- MDMAx CSAR Configuration --------------------------
  606. * Configure the Transfer source address with parameter :
  607. * - SrcAddress: MDMA_CSAR_SAR[31:0] bits
  608. */
  609. pNode->CSAR = MDMA_InitStruct->SrcAddress;
  610. /*-------------------------- MDMAx CDAR Configuration --------------------------
  611. * Configure the Transfer destination address with parameter :
  612. * - DstAddress: MDMA_CDAR_DAR[31:0] bits
  613. */
  614. pNode->CDAR = MDMA_InitStruct->DstAddress;
  615. /*-------------------------- MDMAx CBRUR Configuration --------------------------
  616. * Configure the Transfer Block repeat address update value with parameter :
  617. * - BlockRepeatDestAddrUpdateVal: MDMA_CBRUR_DUV[31:16] bits
  618. * - BlockRepeatSrcAddrUpdateVal: MDMA_CBRUR_SUV[15:0] bits
  619. */
  620. pNode->CBRUR = (MDMA_InitStruct->BlockRepeatSrcAddrUpdateVal & MDMA_CBRUR_SUV_Msk) | \
  621. ((MDMA_InitStruct->BlockRepeatDestAddrUpdateVal << MDMA_CBRUR_DUV_Pos) & MDMA_CBRUR_DUV_Msk) ;
  622. /*-------------------------- MDMAx CLAR Configuration --------------------------
  623. * Configure the Transfer linked list address with parameter :
  624. * - LinkAddress: MDMA_CLAR_LAR[31:0] bits
  625. */
  626. pNode->CLAR = MDMA_InitStruct->LinkAddress;
  627. /*-------------------------- MDMAx CTBR Configuration --------------------------
  628. * Configure the Transfer HW trigger and bus selection with parameter :
  629. * - DestBus: MDMA_TBR_DBUS[17] bit
  630. * - SrcBus: MDMA_TBR_SBUS[16] bit
  631. * - HWTrigger: MDMA_TBR_TSEL[5:0] bits
  632. */
  633. pNode->CTBR = MDMA_InitStruct->DestBus | MDMA_InitStruct->SrcBus | MDMA_InitStruct->HWTrigger;
  634. /*-------------------------- MDMAx CMAR Configuration --------------------------
  635. * Configure the mask address with parameter :
  636. * - MaskAddress: MDMA_CMAR_MAR[31:0] bits
  637. */
  638. pNode->CMAR = MDMA_InitStruct->MaskAddress;
  639. /*-------------------------- MDMAx CMDR Configuration --------------------------
  640. * Configure the mask data with parameter :
  641. * - MaskData: MDMA_CMDR_MDR[31:0] bits
  642. */
  643. pNode->CMDR = MDMA_InitStruct->MaskData;
  644. pNode->Reserved = 0;
  645. }
  646. /**
  647. * @brief Connect Linked list Nodes.
  648. * @param pPrevLinkNode Pointer to previous linked list node to be connected to new Lined list node.
  649. * @param pNewLinkNode Pointer to new Linked list.
  650. * @retval None
  651. */
  652. void LL_MDMA_ConnectLinkNode(LL_MDMA_LinkNodeTypeDef *pPrevLinkNode, LL_MDMA_LinkNodeTypeDef *pNewLinkNode)
  653. {
  654. pPrevLinkNode->CLAR = (uint32_t)pNewLinkNode;
  655. }
  656. /**
  657. * @brief Disconnect the next linked list node.
  658. * @param pLinkNode Pointer to linked list node to be disconnected from the next one.
  659. * @retval None
  660. */
  661. void LL_MDMA_DisconnectNextLinkNode(LL_MDMA_LinkNodeTypeDef *pLinkNode)
  662. {
  663. pLinkNode->CLAR = 0;
  664. }
  665. /**
  666. * @}
  667. */
  668. /**
  669. * @}
  670. */
  671. /**
  672. * @}
  673. */
  674. #endif /* MDMA */
  675. /**
  676. * @}
  677. */
  678. #endif /* USE_FULL_LL_DRIVER */
  679. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/