py32f0xx_ll_dma.h 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378
  1. /**
  2. ******************************************************************************
  3. * @file py32f0xx_ll_dma.h
  4. * @author MCU Application Team
  5. * @brief Header file of DMA LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2023 Puya Semiconductor Co.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by Puya 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. * @attention
  19. *
  20. * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  21. * All rights reserved.</center></h2>
  22. *
  23. * This software component is licensed by ST under BSD 3-Clause license,
  24. * the "License"; You may not use this file except in compliance with the
  25. * License. You may obtain a copy of the License at:
  26. * opensource.org/licenses/BSD-3-Clause
  27. *
  28. ******************************************************************************
  29. */
  30. /* Define to prevent recursive inclusion -------------------------------------*/
  31. #ifndef __PY32F0XX_LL_DMA_H
  32. #define __PY32F0XX_LL_DMA_H
  33. #ifdef __cplusplus
  34. extern "C" {
  35. #endif
  36. /* Includes ------------------------------------------------------------------*/
  37. #include "py32f0xx.h"
  38. /** @addtogroup PY32F0xx_LL_Driver
  39. * @{
  40. */
  41. #if defined (DMA1)
  42. /** @defgroup DMA_LL DMA
  43. * @{
  44. */
  45. /* Private types -------------------------------------------------------------*/
  46. /* Private variables ---------------------------------------------------------*/
  47. /** @defgroup DMA_LL_Private_Variables DMA Private Variables
  48. * @{
  49. */
  50. /* Array used to get the DMA channel register offset versus channel index LL_DMA_CHANNEL_x */
  51. static const uint8_t CHANNEL_OFFSET_TAB[] =
  52. {
  53. (uint8_t)(DMA1_Channel1_BASE - DMA1_BASE),
  54. (uint8_t)(DMA1_Channel2_BASE - DMA1_BASE),
  55. (uint8_t)(DMA1_Channel3_BASE - DMA1_BASE),
  56. };
  57. /**
  58. * @}
  59. */
  60. /* Private constants ---------------------------------------------------------*/
  61. /* Private macros ------------------------------------------------------------*/
  62. #if defined(USE_FULL_LL_DRIVER)
  63. /** @defgroup DMA_LL_Private_Macros DMA Private Macros
  64. * @{
  65. */
  66. /**
  67. * @}
  68. */
  69. #endif /*USE_FULL_LL_DRIVER*/
  70. /* Exported types ------------------------------------------------------------*/
  71. #if defined(USE_FULL_LL_DRIVER)
  72. /** @defgroup DMA_LL_ES_INIT DMA Exported Init structure
  73. * @{
  74. */
  75. typedef struct
  76. {
  77. uint32_t PeriphOrM2MSrcAddress; /*!< Specifies the peripheral base address for DMA transfer
  78. or as Source base address in case of memory to memory transfer direction.
  79. This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
  80. uint32_t MemoryOrM2MDstAddress; /*!< Specifies the memory base address for DMA transfer
  81. or as Destination base address in case of memory to memory transfer direction.
  82. This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
  83. uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral,
  84. from memory to memory or from peripheral to memory.
  85. This parameter can be a value of @ref DMA_LL_EC_DIRECTION
  86. This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataTransferDirection(). */
  87. uint32_t Mode; /*!< Specifies the normal or circular operation mode.
  88. This parameter can be a value of @ref DMA_LL_EC_MODE
  89. @note: The circular buffer mode cannot be used if the memory to memory
  90. data transfer direction is configured on the selected Channel
  91. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMode(). */
  92. uint32_t PeriphOrM2MSrcIncMode; /*!< Specifies whether the Peripheral address or Source address in case of memory to memory transfer direction
  93. is incremented or not.
  94. This parameter can be a value of @ref DMA_LL_EC_PERIPH
  95. This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphIncMode(). */
  96. uint32_t MemoryOrM2MDstIncMode; /*!< Specifies whether the Memory address or Destination address in case of memory to memory transfer direction
  97. is incremented or not.
  98. This parameter can be a value of @ref DMA_LL_EC_MEMORY
  99. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryIncMode(). */
  100. uint32_t PeriphOrM2MSrcDataSize; /*!< Specifies the Peripheral data size alignment or Source data size alignment (byte, half word, word)
  101. in case of memory to memory transfer direction.
  102. This parameter can be a value of @ref DMA_LL_EC_PDATAALIGN
  103. This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphSize(). */
  104. uint32_t MemoryOrM2MDstDataSize; /*!< Specifies the Memory data size alignment or Destination data size alignment (byte, half word, word)
  105. in case of memory to memory transfer direction.
  106. This parameter can be a value of @ref DMA_LL_EC_MDATAALIGN
  107. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemorySize(). */
  108. uint32_t NbData; /*!< Specifies the number of data to transfer, in data unit.
  109. The data unit is equal to the source buffer configuration set in PeripheralSize
  110. or MemorySize parameters depending in the transfer direction.
  111. This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF
  112. This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataLength(). */
  113. uint32_t Priority; /*!< Specifies the channel priority level.
  114. This parameter can be a value of @ref DMA_LL_EC_PRIORITY
  115. This feature can be modified afterwards using unitary function @ref LL_DMA_SetChannelPriorityLevel(). */
  116. } LL_DMA_InitTypeDef;
  117. /**
  118. * @}
  119. */
  120. #endif /*USE_FULL_LL_DRIVER*/
  121. /* Exported constants --------------------------------------------------------*/
  122. /** @defgroup DMA_LL_Exported_Constants DMA Exported Constants
  123. * @{
  124. */
  125. /** @defgroup DMA_LL_EC_CLEAR_FLAG Clear Flags Defines
  126. * @brief Flags defines which can be used with LL_DMA_WriteReg function
  127. * @{
  128. */
  129. #define LL_DMA_IFCR_CGIF1 DMA_IFCR_CGIF1 /*!< Channel 1 global flag */
  130. #define LL_DMA_IFCR_CTCIF1 DMA_IFCR_CTCIF1 /*!< Channel 1 transfer complete flag */
  131. #define LL_DMA_IFCR_CHTIF1 DMA_IFCR_CHTIF1 /*!< Channel 1 half transfer flag */
  132. #define LL_DMA_IFCR_CTEIF1 DMA_IFCR_CTEIF1 /*!< Channel 1 transfer error flag */
  133. #define LL_DMA_IFCR_CGIF2 DMA_IFCR_CGIF2 /*!< Channel 2 global flag */
  134. #define LL_DMA_IFCR_CTCIF2 DMA_IFCR_CTCIF2 /*!< Channel 2 transfer complete flag */
  135. #define LL_DMA_IFCR_CHTIF2 DMA_IFCR_CHTIF2 /*!< Channel 2 half transfer flag */
  136. #define LL_DMA_IFCR_CTEIF2 DMA_IFCR_CTEIF2 /*!< Channel 2 transfer error flag */
  137. #define LL_DMA_IFCR_CGIF3 DMA_IFCR_CGIF3 /*!< Channel 3 global flag */
  138. #define LL_DMA_IFCR_CTCIF3 DMA_IFCR_CTCIF3 /*!< Channel 3 transfer complete flag */
  139. #define LL_DMA_IFCR_CHTIF3 DMA_IFCR_CHTIF3 /*!< Channel 3 half transfer flag */
  140. #define LL_DMA_IFCR_CTEIF3 DMA_IFCR_CTEIF3 /*!< Channel 3 transfer error flag */
  141. /**
  142. * @}
  143. */
  144. /** @defgroup DMA_LL_EC_GET_FLAG Get Flags Defines
  145. * @brief Flags defines which can be used with LL_DMA_ReadReg function
  146. * @{
  147. */
  148. #define LL_DMA_ISR_GIF1 DMA_ISR_GIF1 /*!< Channel 1 global flag */
  149. #define LL_DMA_ISR_TCIF1 DMA_ISR_TCIF1 /*!< Channel 1 transfer complete flag */
  150. #define LL_DMA_ISR_HTIF1 DMA_ISR_HTIF1 /*!< Channel 1 half transfer flag */
  151. #define LL_DMA_ISR_TEIF1 DMA_ISR_TEIF1 /*!< Channel 1 transfer error flag */
  152. #define LL_DMA_ISR_GIF2 DMA_ISR_GIF2 /*!< Channel 2 global flag */
  153. #define LL_DMA_ISR_TCIF2 DMA_ISR_TCIF2 /*!< Channel 2 transfer complete flag */
  154. #define LL_DMA_ISR_HTIF2 DMA_ISR_HTIF2 /*!< Channel 2 half transfer flag */
  155. #define LL_DMA_ISR_TEIF2 DMA_ISR_TEIF2 /*!< Channel 2 transfer error flag */
  156. #define LL_DMA_ISR_GIF3 DMA_ISR_GIF3 /*!< Channel 3 global flag */
  157. #define LL_DMA_ISR_TCIF3 DMA_ISR_TCIF3 /*!< Channel 3 transfer complete flag */
  158. #define LL_DMA_ISR_HTIF3 DMA_ISR_HTIF3 /*!< Channel 3 half transfer flag */
  159. #define LL_DMA_ISR_TEIF3 DMA_ISR_TEIF3 /*!< Channel 3 transfer error flag */
  160. /**
  161. * @}
  162. */
  163. /** @defgroup DMA_LL_EC_IT IT Defines
  164. * @brief IT defines which can be used with LL_DMA_ReadReg and LL_DMA_WriteReg functions
  165. * @{
  166. */
  167. #define LL_DMA_CCR_TCIE DMA_CCR_TCIE /*!< Transfer complete interrupt */
  168. #define LL_DMA_CCR_HTIE DMA_CCR_HTIE /*!< Half Transfer interrupt */
  169. #define LL_DMA_CCR_TEIE DMA_CCR_TEIE /*!< Transfer error interrupt */
  170. /**
  171. * @}
  172. */
  173. /** @defgroup DMA_LL_EC_CHANNEL CHANNEL
  174. * @{
  175. */
  176. #define LL_DMA_CHANNEL_1 0x00000001U /*!< DMA Channel 1 */
  177. #define LL_DMA_CHANNEL_2 0x00000002U /*!< DMA Channel 2 */
  178. #define LL_DMA_CHANNEL_3 0x00000003U /*!< DMA Channel 3 */
  179. /**
  180. * @}
  181. */
  182. /** @defgroup DMA_LL_EC_DIRECTION Transfer Direction
  183. * @{
  184. */
  185. #define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */
  186. #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CCR_DIR /*!< Memory to peripheral direction */
  187. #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CCR_MEM2MEM /*!< Memory to memory direction */
  188. /**
  189. * @}
  190. */
  191. /** @defgroup DMA_LL_EC_MODE Transfer mode
  192. * @{
  193. */
  194. #define LL_DMA_MODE_NORMAL 0x00000000U /*!< Normal Mode */
  195. #define LL_DMA_MODE_CIRCULAR DMA_CCR_CIRC /*!< Circular Mode */
  196. /**
  197. * @}
  198. */
  199. /** @defgroup DMA_LL_EC_PERIPH Peripheral increment mode
  200. * @{
  201. */
  202. #define LL_DMA_PERIPH_INCREMENT DMA_CCR_PINC /*!< Peripheral increment mode Enable */
  203. #define LL_DMA_PERIPH_NOINCREMENT 0x00000000U /*!< Peripheral increment mode Disable */
  204. /**
  205. * @}
  206. */
  207. /** @defgroup DMA_LL_EC_MEMORY Memory increment mode
  208. * @{
  209. */
  210. #define LL_DMA_MEMORY_INCREMENT DMA_CCR_MINC /*!< Memory increment mode Enable */
  211. #define LL_DMA_MEMORY_NOINCREMENT 0x00000000U /*!< Memory increment mode Disable */
  212. /**
  213. * @}
  214. */
  215. /** @defgroup DMA_LL_EC_PDATAALIGN Peripheral data alignment
  216. * @{
  217. */
  218. #define LL_DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment : Byte */
  219. #define LL_DMA_PDATAALIGN_HALFWORD DMA_CCR_PSIZE_0 /*!< Peripheral data alignment : HalfWord */
  220. #define LL_DMA_PDATAALIGN_WORD DMA_CCR_PSIZE_1 /*!< Peripheral data alignment : Word */
  221. /**
  222. * @}
  223. */
  224. /** @defgroup DMA_LL_EC_MDATAALIGN Memory data alignment
  225. * @{
  226. */
  227. #define LL_DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment : Byte */
  228. #define LL_DMA_MDATAALIGN_HALFWORD DMA_CCR_MSIZE_0 /*!< Memory data alignment : HalfWord */
  229. #define LL_DMA_MDATAALIGN_WORD DMA_CCR_MSIZE_1 /*!< Memory data alignment : Word */
  230. /**
  231. * @}
  232. */
  233. /** @defgroup DMA_LL_EC_PRIORITY Transfer Priority level
  234. * @{
  235. */
  236. #define LL_DMA_PRIORITY_LOW 0x00000000U /*!< Priority level : Low */
  237. #define LL_DMA_PRIORITY_MEDIUM DMA_CCR_PL_0 /*!< Priority level : Medium */
  238. #define LL_DMA_PRIORITY_HIGH DMA_CCR_PL_1 /*!< Priority level : High */
  239. #define LL_DMA_PRIORITY_VERYHIGH DMA_CCR_PL /*!< Priority level : Very_High */
  240. /**
  241. * @}
  242. */
  243. /**
  244. * @}
  245. */
  246. /* Exported macro ------------------------------------------------------------*/
  247. /** @defgroup DMA_LL_Exported_Macros DMA Exported Macros
  248. * @{
  249. */
  250. /** @defgroup DMA_LL_EM_WRITE_READ Common Write and read registers macros
  251. * @{
  252. */
  253. /**
  254. * @brief Write a value in DMA register
  255. * @param __INSTANCE__ DMA Instance
  256. * @param __REG__ Register to be written
  257. * @param __VALUE__ Value to be written in the register
  258. * @retval None
  259. */
  260. #define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
  261. /**
  262. * @brief Read a value in DMA register
  263. * @param __INSTANCE__ DMA Instance
  264. * @param __REG__ Register to be read
  265. * @retval Register value
  266. */
  267. #define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
  268. /**
  269. * @}
  270. */
  271. /** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxChannely
  272. * @{
  273. */
  274. /**
  275. * @brief Convert DMAx_Channely into DMAx
  276. * @param __CHANNEL_INSTANCE__ DMAx_Channely
  277. * @retval DMAx
  278. */
  279. #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) (DMA1)
  280. /**
  281. * @brief Convert DMAx_Channely into LL_DMA_CHANNEL_y
  282. * @param __CHANNEL_INSTANCE__ DMAx_Channely
  283. * @retval LL_DMA_CHANNEL_y
  284. */
  285. #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \
  286. (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
  287. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
  288. LL_DMA_CHANNEL_3 )
  289. /**
  290. * @brief Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely
  291. * @param __DMA_INSTANCE__ DMAx
  292. * @param __CHANNEL__ LL_DMA_CHANNEL_y
  293. * @retval DMAx_Channely
  294. */
  295. #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \
  296. ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
  297. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
  298. DMA1_Channel3 )
  299. /**
  300. * @}
  301. */
  302. /**
  303. * @}
  304. */
  305. /* Exported functions --------------------------------------------------------*/
  306. /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions
  307. * @{
  308. */
  309. /** @defgroup DMA_LL_EF_Configuration Configuration
  310. * @{
  311. */
  312. /**
  313. * @brief Enable DMA channel.
  314. * @rmtoll CCR EN LL_DMA_EnableChannel
  315. * @param DMAx DMAx Instance
  316. * @param Channel This parameter can be one of the following values:
  317. * @arg @ref LL_DMA_CHANNEL_1
  318. * @arg @ref LL_DMA_CHANNEL_2
  319. * @arg @ref LL_DMA_CHANNEL_3
  320. * @retval None
  321. */
  322. __STATIC_INLINE void LL_DMA_EnableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
  323. {
  324. SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_EN);
  325. }
  326. /**
  327. * @brief Disable DMA channel.
  328. * @rmtoll CCR EN LL_DMA_DisableChannel
  329. * @param DMAx DMAx Instance
  330. * @param Channel This parameter can be one of the following values:
  331. * @arg @ref LL_DMA_CHANNEL_1
  332. * @arg @ref LL_DMA_CHANNEL_2
  333. * @arg @ref LL_DMA_CHANNEL_3
  334. * @retval None
  335. */
  336. __STATIC_INLINE void LL_DMA_DisableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
  337. {
  338. CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_EN);
  339. }
  340. /**
  341. * @brief Check if DMA channel is enabled or disabled.
  342. * @rmtoll CCR EN LL_DMA_IsEnabledChannel
  343. * @param DMAx DMAx Instance
  344. * @param Channel This parameter can be one of the following values:
  345. * @arg @ref LL_DMA_CHANNEL_1
  346. * @arg @ref LL_DMA_CHANNEL_2
  347. * @arg @ref LL_DMA_CHANNEL_3
  348. * @retval State of bit (1 or 0).
  349. */
  350. __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(DMA_TypeDef *DMAx, uint32_t Channel)
  351. {
  352. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  353. DMA_CCR_EN) == (DMA_CCR_EN));
  354. }
  355. /**
  356. * @brief Configure all parameters link to DMA transfer.
  357. * @rmtoll CCR DIR LL_DMA_ConfigTransfer\n
  358. * CCR MEM2MEM LL_DMA_ConfigTransfer\n
  359. * CCR CIRC LL_DMA_ConfigTransfer\n
  360. * CCR PINC LL_DMA_ConfigTransfer\n
  361. * CCR MINC LL_DMA_ConfigTransfer\n
  362. * CCR PSIZE LL_DMA_ConfigTransfer\n
  363. * CCR MSIZE LL_DMA_ConfigTransfer\n
  364. * CCR PL LL_DMA_ConfigTransfer
  365. * @param DMAx DMAx Instance
  366. * @param Channel This parameter can be one of the following values:
  367. * @arg @ref LL_DMA_CHANNEL_1
  368. * @arg @ref LL_DMA_CHANNEL_2
  369. * @arg @ref LL_DMA_CHANNEL_3
  370. * @param Configuration This parameter must be a combination of all the following values:
  371. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  372. * @arg @ref LL_DMA_MODE_NORMAL or @ref LL_DMA_MODE_CIRCULAR
  373. * @arg @ref LL_DMA_PERIPH_INCREMENT or @ref LL_DMA_PERIPH_NOINCREMENT
  374. * @arg @ref LL_DMA_MEMORY_INCREMENT or @ref LL_DMA_MEMORY_NOINCREMENT
  375. * @arg @ref LL_DMA_PDATAALIGN_BYTE or @ref LL_DMA_PDATAALIGN_HALFWORD or @ref LL_DMA_PDATAALIGN_WORD
  376. * @arg @ref LL_DMA_MDATAALIGN_BYTE or @ref LL_DMA_MDATAALIGN_HALFWORD or @ref LL_DMA_MDATAALIGN_WORD
  377. * @arg @ref LL_DMA_PRIORITY_LOW or @ref LL_DMA_PRIORITY_MEDIUM or @ref LL_DMA_PRIORITY_HIGH or @ref LL_DMA_PRIORITY_VERYHIGH
  378. * @retval None
  379. */
  380. __STATIC_INLINE void LL_DMA_ConfigTransfer(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
  381. {
  382. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  383. DMA_CCR_DIR | DMA_CCR_MEM2MEM | DMA_CCR_CIRC | DMA_CCR_PINC | DMA_CCR_MINC | DMA_CCR_PSIZE | DMA_CCR_MSIZE | DMA_CCR_PL,
  384. Configuration);
  385. }
  386. /**
  387. * @brief Set Data transfer direction (read from peripheral or from memory).
  388. * @rmtoll CCR DIR LL_DMA_SetDataTransferDirection\n
  389. * CCR MEM2MEM LL_DMA_SetDataTransferDirection
  390. * @param DMAx DMAx Instance
  391. * @param Channel This parameter can be one of the following values:
  392. * @arg @ref LL_DMA_CHANNEL_1
  393. * @arg @ref LL_DMA_CHANNEL_2
  394. * @arg @ref LL_DMA_CHANNEL_3
  395. * @param Direction This parameter can be one of the following values:
  396. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  397. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  398. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  399. * @retval None
  400. */
  401. __STATIC_INLINE void LL_DMA_SetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Direction)
  402. {
  403. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  404. DMA_CCR_DIR | DMA_CCR_MEM2MEM, Direction);
  405. }
  406. /**
  407. * @brief Get Data transfer direction (read from peripheral or from memory).
  408. * @rmtoll CCR DIR LL_DMA_GetDataTransferDirection\n
  409. * CCR MEM2MEM LL_DMA_GetDataTransferDirection
  410. * @param DMAx DMAx Instance
  411. * @param Channel This parameter can be one of the following values:
  412. * @arg @ref LL_DMA_CHANNEL_1
  413. * @arg @ref LL_DMA_CHANNEL_2
  414. * @arg @ref LL_DMA_CHANNEL_3
  415. * @retval Returned value can be one of the following values:
  416. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  417. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  418. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  419. */
  420. __STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel)
  421. {
  422. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  423. DMA_CCR_DIR | DMA_CCR_MEM2MEM));
  424. }
  425. /**
  426. * @brief Set DMA mode circular or normal.
  427. * @note The circular buffer mode cannot be used if the memory-to-memory
  428. * data transfer is configured on the selected Channel.
  429. * @rmtoll CCR CIRC LL_DMA_SetMode
  430. * @param DMAx DMAx Instance
  431. * @param Channel This parameter can be one of the following values:
  432. * @arg @ref LL_DMA_CHANNEL_1
  433. * @arg @ref LL_DMA_CHANNEL_2
  434. * @arg @ref LL_DMA_CHANNEL_3
  435. * @param Mode This parameter can be one of the following values:
  436. * @arg @ref LL_DMA_MODE_NORMAL
  437. * @arg @ref LL_DMA_MODE_CIRCULAR
  438. * @retval None
  439. */
  440. __STATIC_INLINE void LL_DMA_SetMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Mode)
  441. {
  442. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_CIRC,
  443. Mode);
  444. }
  445. /**
  446. * @brief Get DMA mode circular or normal.
  447. * @rmtoll CCR CIRC LL_DMA_GetMode
  448. * @param DMAx DMAx Instance
  449. * @param Channel This parameter can be one of the following values:
  450. * @arg @ref LL_DMA_CHANNEL_1
  451. * @arg @ref LL_DMA_CHANNEL_2
  452. * @arg @ref LL_DMA_CHANNEL_3
  453. * @retval Returned value can be one of the following values:
  454. * @arg @ref LL_DMA_MODE_NORMAL
  455. * @arg @ref LL_DMA_MODE_CIRCULAR
  456. */
  457. __STATIC_INLINE uint32_t LL_DMA_GetMode(DMA_TypeDef *DMAx, uint32_t Channel)
  458. {
  459. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  460. DMA_CCR_CIRC));
  461. }
  462. /**
  463. * @brief Set Peripheral increment mode.
  464. * @rmtoll CCR PINC LL_DMA_SetPeriphIncMode
  465. * @param DMAx DMAx Instance
  466. * @param Channel This parameter can be one of the following values:
  467. * @arg @ref LL_DMA_CHANNEL_1
  468. * @arg @ref LL_DMA_CHANNEL_2
  469. * @arg @ref LL_DMA_CHANNEL_3
  470. * @param PeriphOrM2MSrcIncMode This parameter can be one of the following values:
  471. * @arg @ref LL_DMA_PERIPH_INCREMENT
  472. * @arg @ref LL_DMA_PERIPH_NOINCREMENT
  473. * @retval None
  474. */
  475. __STATIC_INLINE void LL_DMA_SetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcIncMode)
  476. {
  477. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PINC,
  478. PeriphOrM2MSrcIncMode);
  479. }
  480. /**
  481. * @brief Get Peripheral increment mode.
  482. * @rmtoll CCR PINC LL_DMA_GetPeriphIncMode
  483. * @param DMAx DMAx Instance
  484. * @param Channel This parameter can be one of the following values:
  485. * @arg @ref LL_DMA_CHANNEL_1
  486. * @arg @ref LL_DMA_CHANNEL_2
  487. * @arg @ref LL_DMA_CHANNEL_3
  488. * @retval Returned value can be one of the following values:
  489. * @arg @ref LL_DMA_PERIPH_INCREMENT
  490. * @arg @ref LL_DMA_PERIPH_NOINCREMENT
  491. */
  492. __STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
  493. {
  494. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  495. DMA_CCR_PINC));
  496. }
  497. /**
  498. * @brief Set Memory increment mode.
  499. * @rmtoll CCR MINC LL_DMA_SetMemoryIncMode
  500. * @param DMAx DMAx Instance
  501. * @param Channel This parameter can be one of the following values:
  502. * @arg @ref LL_DMA_CHANNEL_1
  503. * @arg @ref LL_DMA_CHANNEL_2
  504. * @arg @ref LL_DMA_CHANNEL_3
  505. * @param MemoryOrM2MDstIncMode This parameter can be one of the following values:
  506. * @arg @ref LL_DMA_MEMORY_INCREMENT
  507. * @arg @ref LL_DMA_MEMORY_NOINCREMENT
  508. * @retval None
  509. */
  510. __STATIC_INLINE void LL_DMA_SetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstIncMode)
  511. {
  512. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_MINC,
  513. MemoryOrM2MDstIncMode);
  514. }
  515. /**
  516. * @brief Get Memory increment mode.
  517. * @rmtoll CCR MINC LL_DMA_GetMemoryIncMode
  518. * @param DMAx DMAx Instance
  519. * @param Channel This parameter can be one of the following values:
  520. * @arg @ref LL_DMA_CHANNEL_1
  521. * @arg @ref LL_DMA_CHANNEL_2
  522. * @arg @ref LL_DMA_CHANNEL_3
  523. * @retval Returned value can be one of the following values:
  524. * @arg @ref LL_DMA_MEMORY_INCREMENT
  525. * @arg @ref LL_DMA_MEMORY_NOINCREMENT
  526. */
  527. __STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
  528. {
  529. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  530. DMA_CCR_MINC));
  531. }
  532. /**
  533. * @brief Set Peripheral size.
  534. * @rmtoll CCR PSIZE LL_DMA_SetPeriphSize
  535. * @param DMAx DMAx Instance
  536. * @param Channel This parameter can be one of the following values:
  537. * @arg @ref LL_DMA_CHANNEL_1
  538. * @arg @ref LL_DMA_CHANNEL_2
  539. * @arg @ref LL_DMA_CHANNEL_3
  540. * @param PeriphOrM2MSrcDataSize This parameter can be one of the following values:
  541. * @arg @ref LL_DMA_PDATAALIGN_BYTE
  542. * @arg @ref LL_DMA_PDATAALIGN_HALFWORD
  543. * @arg @ref LL_DMA_PDATAALIGN_WORD
  544. * @retval None
  545. */
  546. __STATIC_INLINE void LL_DMA_SetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcDataSize)
  547. {
  548. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PSIZE,
  549. PeriphOrM2MSrcDataSize);
  550. }
  551. /**
  552. * @brief Get Peripheral size.
  553. * @rmtoll CCR PSIZE LL_DMA_GetPeriphSize
  554. * @param DMAx DMAx Instance
  555. * @param Channel This parameter can be one of the following values:
  556. * @arg @ref LL_DMA_CHANNEL_1
  557. * @arg @ref LL_DMA_CHANNEL_2
  558. * @arg @ref LL_DMA_CHANNEL_3
  559. * @retval Returned value can be one of the following values:
  560. * @arg @ref LL_DMA_PDATAALIGN_BYTE
  561. * @arg @ref LL_DMA_PDATAALIGN_HALFWORD
  562. * @arg @ref LL_DMA_PDATAALIGN_WORD
  563. */
  564. __STATIC_INLINE uint32_t LL_DMA_GetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel)
  565. {
  566. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  567. DMA_CCR_PSIZE));
  568. }
  569. /**
  570. * @brief Set Memory size.
  571. * @rmtoll CCR MSIZE LL_DMA_SetMemorySize
  572. * @param DMAx DMAx Instance
  573. * @param Channel This parameter can be one of the following values:
  574. * @arg @ref LL_DMA_CHANNEL_1
  575. * @arg @ref LL_DMA_CHANNEL_2
  576. * @arg @ref LL_DMA_CHANNEL_3
  577. * @param MemoryOrM2MDstDataSize This parameter can be one of the following values:
  578. * @arg @ref LL_DMA_MDATAALIGN_BYTE
  579. * @arg @ref LL_DMA_MDATAALIGN_HALFWORD
  580. * @arg @ref LL_DMA_MDATAALIGN_WORD
  581. * @retval None
  582. */
  583. __STATIC_INLINE void LL_DMA_SetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstDataSize)
  584. {
  585. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_MSIZE,
  586. MemoryOrM2MDstDataSize);
  587. }
  588. /**
  589. * @brief Get Memory size.
  590. * @rmtoll CCR MSIZE LL_DMA_GetMemorySize
  591. * @param DMAx DMAx Instance
  592. * @param Channel This parameter can be one of the following values:
  593. * @arg @ref LL_DMA_CHANNEL_1
  594. * @arg @ref LL_DMA_CHANNEL_2
  595. * @arg @ref LL_DMA_CHANNEL_3
  596. * @retval Returned value can be one of the following values:
  597. * @arg @ref LL_DMA_MDATAALIGN_BYTE
  598. * @arg @ref LL_DMA_MDATAALIGN_HALFWORD
  599. * @arg @ref LL_DMA_MDATAALIGN_WORD
  600. */
  601. __STATIC_INLINE uint32_t LL_DMA_GetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel)
  602. {
  603. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  604. DMA_CCR_MSIZE));
  605. }
  606. /**
  607. * @brief Set Channel priority level.
  608. * @rmtoll CCR PL LL_DMA_SetChannelPriorityLevel
  609. * @param DMAx DMAx Instance
  610. * @param Channel This parameter can be one of the following values:
  611. * @arg @ref LL_DMA_CHANNEL_1
  612. * @arg @ref LL_DMA_CHANNEL_2
  613. * @arg @ref LL_DMA_CHANNEL_3
  614. * @param Priority This parameter can be one of the following values:
  615. * @arg @ref LL_DMA_PRIORITY_LOW
  616. * @arg @ref LL_DMA_PRIORITY_MEDIUM
  617. * @arg @ref LL_DMA_PRIORITY_HIGH
  618. * @arg @ref LL_DMA_PRIORITY_VERYHIGH
  619. * @retval None
  620. */
  621. __STATIC_INLINE void LL_DMA_SetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Priority)
  622. {
  623. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_PL,
  624. Priority);
  625. }
  626. /**
  627. * @brief Get Channel priority level.
  628. * @rmtoll CCR PL LL_DMA_GetChannelPriorityLevel
  629. * @param DMAx DMAx Instance
  630. * @param Channel This parameter can be one of the following values:
  631. * @arg @ref LL_DMA_CHANNEL_1
  632. * @arg @ref LL_DMA_CHANNEL_2
  633. * @arg @ref LL_DMA_CHANNEL_3
  634. * @retval Returned value can be one of the following values:
  635. * @arg @ref LL_DMA_PRIORITY_LOW
  636. * @arg @ref LL_DMA_PRIORITY_MEDIUM
  637. * @arg @ref LL_DMA_PRIORITY_HIGH
  638. * @arg @ref LL_DMA_PRIORITY_VERYHIGH
  639. */
  640. __STATIC_INLINE uint32_t LL_DMA_GetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel)
  641. {
  642. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  643. DMA_CCR_PL));
  644. }
  645. /**
  646. * @brief Set Number of data to transfer.
  647. * @note This action has no effect if
  648. * channel is enabled.
  649. * @rmtoll CNDTR NDT LL_DMA_SetDataLength
  650. * @param DMAx DMAx Instance
  651. * @param Channel This parameter can be one of the following values:
  652. * @arg @ref LL_DMA_CHANNEL_1
  653. * @arg @ref LL_DMA_CHANNEL_2
  654. * @arg @ref LL_DMA_CHANNEL_3
  655. * @param NbData Between Min_Data = 0 and Max_Data = 0x0000FFFF
  656. * @retval None
  657. */
  658. __STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t NbData)
  659. {
  660. MODIFY_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CNDTR,
  661. DMA_CNDTR_NDT, NbData);
  662. }
  663. /**
  664. * @brief Get Number of data to transfer.
  665. * @note Once the channel is enabled, the return value indicate the
  666. * remaining bytes to be transmitted.
  667. * @rmtoll CNDTR NDT LL_DMA_GetDataLength
  668. * @param DMAx DMAx Instance
  669. * @param Channel This parameter can be one of the following values:
  670. * @arg @ref LL_DMA_CHANNEL_1
  671. * @arg @ref LL_DMA_CHANNEL_2
  672. * @arg @ref LL_DMA_CHANNEL_3
  673. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  674. */
  675. __STATIC_INLINE uint32_t LL_DMA_GetDataLength(DMA_TypeDef *DMAx, uint32_t Channel)
  676. {
  677. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CNDTR,
  678. DMA_CNDTR_NDT));
  679. }
  680. /**
  681. * @brief Configure the Source and Destination addresses.
  682. * @note This API must not be called when the DMA channel is enabled.
  683. * @note Each IP using DMA provides an API to get directly the register adress (LL_PPP_DMA_GetRegAddr).
  684. * @rmtoll CPAR PA LL_DMA_ConfigAddresses\n
  685. * CMAR MA LL_DMA_ConfigAddresses
  686. * @param DMAx DMAx Instance
  687. * @param Channel This parameter can be one of the following values:
  688. * @arg @ref LL_DMA_CHANNEL_1
  689. * @arg @ref LL_DMA_CHANNEL_2
  690. * @arg @ref LL_DMA_CHANNEL_3
  691. * @param SrcAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  692. * @param DstAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  693. * @param Direction This parameter can be one of the following values:
  694. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  695. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  696. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  697. * @retval None
  698. */
  699. __STATIC_INLINE void LL_DMA_ConfigAddresses(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress,
  700. uint32_t DstAddress, uint32_t Direction)
  701. {
  702. /* Direction Memory to Periph */
  703. if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH)
  704. {
  705. WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, SrcAddress);
  706. WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, DstAddress);
  707. }
  708. /* Direction Periph to Memory and Memory to Memory */
  709. else
  710. {
  711. WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, SrcAddress);
  712. WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, DstAddress);
  713. }
  714. }
  715. /**
  716. * @brief Set the Memory address.
  717. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  718. * @note This API must not be called when the DMA channel is enabled.
  719. * @rmtoll CMAR MA LL_DMA_SetMemoryAddress
  720. * @param DMAx DMAx Instance
  721. * @param Channel This parameter can be one of the following values:
  722. * @arg @ref LL_DMA_CHANNEL_1
  723. * @arg @ref LL_DMA_CHANNEL_2
  724. * @arg @ref LL_DMA_CHANNEL_3
  725. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  726. * @retval None
  727. */
  728. __STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  729. {
  730. WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, MemoryAddress);
  731. }
  732. /**
  733. * @brief Set the Peripheral address.
  734. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  735. * @note This API must not be called when the DMA channel is enabled.
  736. * @rmtoll CPAR PA LL_DMA_SetPeriphAddress
  737. * @param DMAx DMAx Instance
  738. * @param Channel This parameter can be one of the following values:
  739. * @arg @ref LL_DMA_CHANNEL_1
  740. * @arg @ref LL_DMA_CHANNEL_2
  741. * @arg @ref LL_DMA_CHANNEL_3
  742. * @param PeriphAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  743. * @retval None
  744. */
  745. __STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphAddress)
  746. {
  747. WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, PeriphAddress);
  748. }
  749. /**
  750. * @brief Get Memory address.
  751. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  752. * @rmtoll CMAR MA LL_DMA_GetMemoryAddress
  753. * @param DMAx DMAx Instance
  754. * @param Channel This parameter can be one of the following values:
  755. * @arg @ref LL_DMA_CHANNEL_1
  756. * @arg @ref LL_DMA_CHANNEL_2
  757. * @arg @ref LL_DMA_CHANNEL_3
  758. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  759. */
  760. __STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel)
  761. {
  762. return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR));
  763. }
  764. /**
  765. * @brief Get Peripheral address.
  766. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  767. * @rmtoll CPAR PA LL_DMA_GetPeriphAddress
  768. * @param DMAx DMAx Instance
  769. * @param Channel This parameter can be one of the following values:
  770. * @arg @ref LL_DMA_CHANNEL_1
  771. * @arg @ref LL_DMA_CHANNEL_2
  772. * @arg @ref LL_DMA_CHANNEL_3
  773. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  774. */
  775. __STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel)
  776. {
  777. return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR));
  778. }
  779. /**
  780. * @brief Set the Memory to Memory Source address.
  781. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  782. * @note This API must not be called when the DMA channel is enabled.
  783. * @rmtoll CPAR PA LL_DMA_SetM2MSrcAddress
  784. * @param DMAx DMAx Instance
  785. * @param Channel This parameter can be one of the following values:
  786. * @arg @ref LL_DMA_CHANNEL_1
  787. * @arg @ref LL_DMA_CHANNEL_2
  788. * @arg @ref LL_DMA_CHANNEL_3
  789. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  790. * @retval None
  791. */
  792. __STATIC_INLINE void LL_DMA_SetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  793. {
  794. WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR, MemoryAddress);
  795. }
  796. /**
  797. * @brief Set the Memory to Memory Destination address.
  798. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  799. * @note This API must not be called when the DMA channel is enabled.
  800. * @rmtoll CMAR MA LL_DMA_SetM2MDstAddress
  801. * @param DMAx DMAx Instance
  802. * @param Channel This parameter can be one of the following values:
  803. * @arg @ref LL_DMA_CHANNEL_1
  804. * @arg @ref LL_DMA_CHANNEL_2
  805. * @arg @ref LL_DMA_CHANNEL_3
  806. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  807. * @retval None
  808. */
  809. __STATIC_INLINE void LL_DMA_SetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  810. {
  811. WRITE_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR, MemoryAddress);
  812. }
  813. /**
  814. * @brief Get the Memory to Memory Source address.
  815. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  816. * @rmtoll CPAR PA LL_DMA_GetM2MSrcAddress
  817. * @param DMAx DMAx Instance
  818. * @param Channel This parameter can be one of the following values:
  819. * @arg @ref LL_DMA_CHANNEL_1
  820. * @arg @ref LL_DMA_CHANNEL_2
  821. * @arg @ref LL_DMA_CHANNEL_3
  822. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  823. */
  824. __STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel)
  825. {
  826. return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CPAR));
  827. }
  828. /**
  829. * @brief Get the Memory to Memory Destination address.
  830. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  831. * @rmtoll CMAR MA LL_DMA_GetM2MDstAddress
  832. * @param DMAx DMAx Instance
  833. * @param Channel This parameter can be one of the following values:
  834. * @arg @ref LL_DMA_CHANNEL_1
  835. * @arg @ref LL_DMA_CHANNEL_2
  836. * @arg @ref LL_DMA_CHANNEL_3
  837. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  838. */
  839. __STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel)
  840. {
  841. return (READ_REG(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CMAR));
  842. }
  843. /**
  844. * @}
  845. */
  846. /** @defgroup DMA_LL_EF_FLAG_Management FLAG Management
  847. * @{
  848. */
  849. /**
  850. * @brief Get Channel 1 global interrupt flag.
  851. * @rmtoll ISR GIF1 LL_DMA_IsActiveFlag_GI1
  852. * @param DMAx DMAx Instance
  853. * @retval State of bit (1 or 0).
  854. */
  855. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI1(DMA_TypeDef *DMAx)
  856. {
  857. return (READ_BIT(DMAx->ISR, DMA_ISR_GIF1) == (DMA_ISR_GIF1));
  858. }
  859. /**
  860. * @brief Get Channel 2 global interrupt flag.
  861. * @rmtoll ISR GIF2 LL_DMA_IsActiveFlag_GI2
  862. * @param DMAx DMAx Instance
  863. * @retval State of bit (1 or 0).
  864. */
  865. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI2(DMA_TypeDef *DMAx)
  866. {
  867. return (READ_BIT(DMAx->ISR, DMA_ISR_GIF2) == (DMA_ISR_GIF2));
  868. }
  869. /**
  870. * @brief Get Channel 3 global interrupt flag.
  871. * @rmtoll ISR GIF3 LL_DMA_IsActiveFlag_GI3
  872. * @param DMAx DMAx Instance
  873. * @retval State of bit (1 or 0).
  874. */
  875. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI3(DMA_TypeDef *DMAx)
  876. {
  877. return (READ_BIT(DMAx->ISR, DMA_ISR_GIF3) == (DMA_ISR_GIF3));
  878. }
  879. /**
  880. * @brief Get Channel 1 transfer complete flag.
  881. * @rmtoll ISR TCIF1 LL_DMA_IsActiveFlag_TC1
  882. * @param DMAx DMAx Instance
  883. * @retval State of bit (1 or 0).
  884. */
  885. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC1(DMA_TypeDef *DMAx)
  886. {
  887. return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF1) == (DMA_ISR_TCIF1));
  888. }
  889. /**
  890. * @brief Get Channel 2 transfer complete flag.
  891. * @rmtoll ISR TCIF2 LL_DMA_IsActiveFlag_TC2
  892. * @param DMAx DMAx Instance
  893. * @retval State of bit (1 or 0).
  894. */
  895. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC2(DMA_TypeDef *DMAx)
  896. {
  897. return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF2) == (DMA_ISR_TCIF2));
  898. }
  899. /**
  900. * @brief Get Channel 3 transfer complete flag.
  901. * @rmtoll ISR TCIF3 LL_DMA_IsActiveFlag_TC3
  902. * @param DMAx DMAx Instance
  903. * @retval State of bit (1 or 0).
  904. */
  905. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC3(DMA_TypeDef *DMAx)
  906. {
  907. return (READ_BIT(DMAx->ISR, DMA_ISR_TCIF3) == (DMA_ISR_TCIF3));
  908. }
  909. /**
  910. * @brief Get Channel 1 half transfer flag.
  911. * @rmtoll ISR HTIF1 LL_DMA_IsActiveFlag_HT1
  912. * @param DMAx DMAx Instance
  913. * @retval State of bit (1 or 0).
  914. */
  915. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT1(DMA_TypeDef *DMAx)
  916. {
  917. return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF1) == (DMA_ISR_HTIF1));
  918. }
  919. /**
  920. * @brief Get Channel 2 half transfer flag.
  921. * @rmtoll ISR HTIF2 LL_DMA_IsActiveFlag_HT2
  922. * @param DMAx DMAx Instance
  923. * @retval State of bit (1 or 0).
  924. */
  925. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT2(DMA_TypeDef *DMAx)
  926. {
  927. return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF2) == (DMA_ISR_HTIF2));
  928. }
  929. /**
  930. * @brief Get Channel 3 half transfer flag.
  931. * @rmtoll ISR HTIF3 LL_DMA_IsActiveFlag_HT3
  932. * @param DMAx DMAx Instance
  933. * @retval State of bit (1 or 0).
  934. */
  935. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT3(DMA_TypeDef *DMAx)
  936. {
  937. return (READ_BIT(DMAx->ISR, DMA_ISR_HTIF3) == (DMA_ISR_HTIF3));
  938. }
  939. /**
  940. * @brief Get Channel 1 transfer error flag.
  941. * @rmtoll ISR TEIF1 LL_DMA_IsActiveFlag_TE1
  942. * @param DMAx DMAx Instance
  943. * @retval State of bit (1 or 0).
  944. */
  945. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE1(DMA_TypeDef *DMAx)
  946. {
  947. return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF1) == (DMA_ISR_TEIF1));
  948. }
  949. /**
  950. * @brief Get Channel 2 transfer error flag.
  951. * @rmtoll ISR TEIF2 LL_DMA_IsActiveFlag_TE2
  952. * @param DMAx DMAx Instance
  953. * @retval State of bit (1 or 0).
  954. */
  955. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE2(DMA_TypeDef *DMAx)
  956. {
  957. return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF2) == (DMA_ISR_TEIF2));
  958. }
  959. /**
  960. * @brief Get Channel 3 transfer error flag.
  961. * @rmtoll ISR TEIF3 LL_DMA_IsActiveFlag_TE3
  962. * @param DMAx DMAx Instance
  963. * @retval State of bit (1 or 0).
  964. */
  965. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE3(DMA_TypeDef *DMAx)
  966. {
  967. return (READ_BIT(DMAx->ISR, DMA_ISR_TEIF3) == (DMA_ISR_TEIF3));
  968. }
  969. /**
  970. * @brief Clear Channel 1 global interrupt flag.
  971. * @rmtoll IFCR CGIF1 LL_DMA_ClearFlag_GI1
  972. * @param DMAx DMAx Instance
  973. * @retval None
  974. */
  975. __STATIC_INLINE void LL_DMA_ClearFlag_GI1(DMA_TypeDef *DMAx)
  976. {
  977. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF1);
  978. }
  979. /**
  980. * @brief Clear Channel 2 global interrupt flag.
  981. * @rmtoll IFCR CGIF2 LL_DMA_ClearFlag_GI2
  982. * @param DMAx DMAx Instance
  983. * @retval None
  984. */
  985. __STATIC_INLINE void LL_DMA_ClearFlag_GI2(DMA_TypeDef *DMAx)
  986. {
  987. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF2);
  988. }
  989. /**
  990. * @brief Clear Channel 3 global interrupt flag.
  991. * @rmtoll IFCR CGIF3 LL_DMA_ClearFlag_GI3
  992. * @param DMAx DMAx Instance
  993. * @retval None
  994. */
  995. __STATIC_INLINE void LL_DMA_ClearFlag_GI3(DMA_TypeDef *DMAx)
  996. {
  997. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF3);
  998. }
  999. /**
  1000. * @brief Clear Channel 1 transfer complete flag.
  1001. * @rmtoll IFCR CTCIF1 LL_DMA_ClearFlag_TC1
  1002. * @param DMAx DMAx Instance
  1003. * @retval None
  1004. */
  1005. __STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx)
  1006. {
  1007. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF1);
  1008. }
  1009. /**
  1010. * @brief Clear Channel 2 transfer complete flag.
  1011. * @rmtoll IFCR CTCIF2 LL_DMA_ClearFlag_TC2
  1012. * @param DMAx DMAx Instance
  1013. * @retval None
  1014. */
  1015. __STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx)
  1016. {
  1017. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF2);
  1018. }
  1019. /**
  1020. * @brief Clear Channel 3 transfer complete flag.
  1021. * @rmtoll IFCR CTCIF3 LL_DMA_ClearFlag_TC3
  1022. * @param DMAx DMAx Instance
  1023. * @retval None
  1024. */
  1025. __STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx)
  1026. {
  1027. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF3);
  1028. }
  1029. /**
  1030. * @brief Clear Channel 1 half transfer flag.
  1031. * @rmtoll IFCR CHTIF1 LL_DMA_ClearFlag_HT1
  1032. * @param DMAx DMAx Instance
  1033. * @retval None
  1034. */
  1035. __STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx)
  1036. {
  1037. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF1);
  1038. }
  1039. /**
  1040. * @brief Clear Channel 2 half transfer flag.
  1041. * @rmtoll IFCR CHTIF2 LL_DMA_ClearFlag_HT2
  1042. * @param DMAx DMAx Instance
  1043. * @retval None
  1044. */
  1045. __STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx)
  1046. {
  1047. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF2);
  1048. }
  1049. /**
  1050. * @brief Clear Channel 3 half transfer flag.
  1051. * @rmtoll IFCR CHTIF3 LL_DMA_ClearFlag_HT3
  1052. * @param DMAx DMAx Instance
  1053. * @retval None
  1054. */
  1055. __STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx)
  1056. {
  1057. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF3);
  1058. }
  1059. /**
  1060. * @brief Clear Channel 1 transfer error flag.
  1061. * @rmtoll IFCR CTEIF1 LL_DMA_ClearFlag_TE1
  1062. * @param DMAx DMAx Instance
  1063. * @retval None
  1064. */
  1065. __STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx)
  1066. {
  1067. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF1);
  1068. }
  1069. /**
  1070. * @brief Clear Channel 2 transfer error flag.
  1071. * @rmtoll IFCR CTEIF2 LL_DMA_ClearFlag_TE2
  1072. * @param DMAx DMAx Instance
  1073. * @retval None
  1074. */
  1075. __STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx)
  1076. {
  1077. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF2);
  1078. }
  1079. /**
  1080. * @brief Clear Channel 3 transfer error flag.
  1081. * @rmtoll IFCR CTEIF3 LL_DMA_ClearFlag_TE3
  1082. * @param DMAx DMAx Instance
  1083. * @retval None
  1084. */
  1085. __STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx)
  1086. {
  1087. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF3);
  1088. }
  1089. /**
  1090. * @}
  1091. */
  1092. /** @defgroup DMA_LL_EF_IT_Management IT Management
  1093. * @{
  1094. */
  1095. /**
  1096. * @brief Enable Transfer complete interrupt.
  1097. * @rmtoll CCR TCIE LL_DMA_EnableIT_TC
  1098. * @param DMAx DMAx Instance
  1099. * @param Channel This parameter can be one of the following values:
  1100. * @arg @ref LL_DMA_CHANNEL_1
  1101. * @arg @ref LL_DMA_CHANNEL_2
  1102. * @arg @ref LL_DMA_CHANNEL_3
  1103. * @retval None
  1104. */
  1105. __STATIC_INLINE void LL_DMA_EnableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
  1106. {
  1107. SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TCIE);
  1108. }
  1109. /**
  1110. * @brief Enable Half transfer interrupt.
  1111. * @rmtoll CCR HTIE LL_DMA_EnableIT_HT
  1112. * @param DMAx DMAx Instance
  1113. * @param Channel This parameter can be one of the following values:
  1114. * @arg @ref LL_DMA_CHANNEL_1
  1115. * @arg @ref LL_DMA_CHANNEL_2
  1116. * @arg @ref LL_DMA_CHANNEL_3
  1117. * @retval None
  1118. */
  1119. __STATIC_INLINE void LL_DMA_EnableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
  1120. {
  1121. SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_HTIE);
  1122. }
  1123. /**
  1124. * @brief Enable Transfer error interrupt.
  1125. * @rmtoll CCR TEIE LL_DMA_EnableIT_TE
  1126. * @param DMAx DMAx Instance
  1127. * @param Channel This parameter can be one of the following values:
  1128. * @arg @ref LL_DMA_CHANNEL_1
  1129. * @arg @ref LL_DMA_CHANNEL_2
  1130. * @arg @ref LL_DMA_CHANNEL_3
  1131. * @retval None
  1132. */
  1133. __STATIC_INLINE void LL_DMA_EnableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
  1134. {
  1135. SET_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TEIE);
  1136. }
  1137. /**
  1138. * @brief Disable Transfer complete interrupt.
  1139. * @rmtoll CCR TCIE LL_DMA_DisableIT_TC
  1140. * @param DMAx DMAx Instance
  1141. * @param Channel This parameter can be one of the following values:
  1142. * @arg @ref LL_DMA_CHANNEL_1
  1143. * @arg @ref LL_DMA_CHANNEL_2
  1144. * @arg @ref LL_DMA_CHANNEL_3
  1145. * @retval None
  1146. */
  1147. __STATIC_INLINE void LL_DMA_DisableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
  1148. {
  1149. CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TCIE);
  1150. }
  1151. /**
  1152. * @brief Disable Half transfer interrupt.
  1153. * @rmtoll CCR HTIE LL_DMA_DisableIT_HT
  1154. * @param DMAx DMAx Instance
  1155. * @param Channel This parameter can be one of the following values:
  1156. * @arg @ref LL_DMA_CHANNEL_1
  1157. * @arg @ref LL_DMA_CHANNEL_2
  1158. * @arg @ref LL_DMA_CHANNEL_3
  1159. * @retval None
  1160. */
  1161. __STATIC_INLINE void LL_DMA_DisableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
  1162. {
  1163. CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_HTIE);
  1164. }
  1165. /**
  1166. * @brief Disable Transfer error interrupt.
  1167. * @rmtoll CCR TEIE LL_DMA_DisableIT_TE
  1168. * @param DMAx DMAx Instance
  1169. * @param Channel This parameter can be one of the following values:
  1170. * @arg @ref LL_DMA_CHANNEL_1
  1171. * @arg @ref LL_DMA_CHANNEL_2
  1172. * @arg @ref LL_DMA_CHANNEL_3
  1173. * @retval None
  1174. */
  1175. __STATIC_INLINE void LL_DMA_DisableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
  1176. {
  1177. CLEAR_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR, DMA_CCR_TEIE);
  1178. }
  1179. /**
  1180. * @brief Check if Transfer complete Interrupt is enabled.
  1181. * @rmtoll CCR TCIE LL_DMA_IsEnabledIT_TC
  1182. * @param DMAx DMAx Instance
  1183. * @param Channel This parameter can be one of the following values:
  1184. * @arg @ref LL_DMA_CHANNEL_1
  1185. * @arg @ref LL_DMA_CHANNEL_2
  1186. * @arg @ref LL_DMA_CHANNEL_3
  1187. * @retval State of bit (1 or 0).
  1188. */
  1189. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
  1190. {
  1191. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  1192. DMA_CCR_TCIE) == (DMA_CCR_TCIE));
  1193. }
  1194. /**
  1195. * @brief Check if Half transfer Interrupt is enabled.
  1196. * @rmtoll CCR HTIE LL_DMA_IsEnabledIT_HT
  1197. * @param DMAx DMAx Instance
  1198. * @param Channel This parameter can be one of the following values:
  1199. * @arg @ref LL_DMA_CHANNEL_1
  1200. * @arg @ref LL_DMA_CHANNEL_2
  1201. * @arg @ref LL_DMA_CHANNEL_3
  1202. * @retval State of bit (1 or 0).
  1203. */
  1204. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
  1205. {
  1206. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  1207. DMA_CCR_HTIE) == (DMA_CCR_HTIE));
  1208. }
  1209. /**
  1210. * @brief Check if Transfer error Interrupt is enabled.
  1211. * @rmtoll CCR TEIE LL_DMA_IsEnabledIT_TE
  1212. * @param DMAx DMAx Instance
  1213. * @param Channel This parameter can be one of the following values:
  1214. * @arg @ref LL_DMA_CHANNEL_1
  1215. * @arg @ref LL_DMA_CHANNEL_2
  1216. * @arg @ref LL_DMA_CHANNEL_3
  1217. * @retval State of bit (1 or 0).
  1218. */
  1219. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
  1220. {
  1221. return (READ_BIT(((DMA_Channel_TypeDef *)((uint32_t)((uint32_t)DMAx + CHANNEL_OFFSET_TAB[Channel - 1U])))->CCR,
  1222. DMA_CCR_TEIE) == (DMA_CCR_TEIE));
  1223. }
  1224. /**
  1225. * @}
  1226. */
  1227. #if defined(USE_FULL_LL_DRIVER)
  1228. /** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions
  1229. * @{
  1230. */
  1231. uint32_t LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct);
  1232. uint32_t LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
  1233. void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct);
  1234. /**
  1235. * @}
  1236. */
  1237. #endif /* USE_FULL_LL_DRIVER */
  1238. /**
  1239. * @}
  1240. */
  1241. /**
  1242. * @}
  1243. */
  1244. #endif /* DMA1 */
  1245. /**
  1246. * @}
  1247. */
  1248. #ifdef __cplusplus
  1249. }
  1250. #endif
  1251. #endif /* __PY32F0XX_LL_DMA_H */
  1252. /************************ (C) COPYRIGHT Puya *****END OF FILE****/