stm32g0xx_ll_dma.h 91 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270
  1. /**
  2. ******************************************************************************
  3. * @file stm32g0xx_ll_dma.h
  4. * @author MCD Application Team
  5. * @brief Header file of DMA LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2018 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. ******************************************************************************
  17. */
  18. /* Define to prevent recursive inclusion -------------------------------------*/
  19. #ifndef STM32G0xx_LL_DMA_H
  20. #define STM32G0xx_LL_DMA_H
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* Includes ------------------------------------------------------------------*/
  25. #include "stm32g0xx.h"
  26. #include "stm32g0xx_ll_dmamux.h"
  27. /** @addtogroup STM32G0xx_LL_Driver
  28. * @{
  29. */
  30. #if defined (DMA1) || defined (DMA2)
  31. /** @defgroup DMA_LL DMA
  32. * @{
  33. */
  34. /* Private types -------------------------------------------------------------*/
  35. /* Private variables ---------------------------------------------------------*/
  36. /** @defgroup DMA_LL_Private_Variables DMA Private Variables
  37. * @{
  38. */
  39. /* Array used to get the DMA channel register offset versus channel index LL_DMA_CHANNEL_x */
  40. static const uint8_t CHANNEL_OFFSET_TAB[] =
  41. {
  42. (uint8_t)(DMA1_Channel1_BASE - DMA1_BASE),
  43. (uint8_t)(DMA1_Channel2_BASE - DMA1_BASE),
  44. (uint8_t)(DMA1_Channel3_BASE - DMA1_BASE),
  45. (uint8_t)(DMA1_Channel4_BASE - DMA1_BASE),
  46. (uint8_t)(DMA1_Channel5_BASE - DMA1_BASE),
  47. #if defined(DMA1_Channel6_BASE)
  48. (uint8_t)(DMA1_Channel6_BASE - DMA1_BASE),
  49. #endif /* DMA1_Channel6_BASE */
  50. #if defined(DMA1_Channel7_BASE)
  51. (uint8_t)(DMA1_Channel7_BASE - DMA1_BASE),
  52. #endif /* DMA1_Channel7_BASE */
  53. };
  54. /**
  55. * @}
  56. */
  57. /* Private constants ---------------------------------------------------------*/
  58. /* Private macros ------------------------------------------------------------*/
  59. /** @defgroup DMA_LL_Private_Macros DMA Private Macros
  60. * @{
  61. */
  62. /**
  63. * @brief Helper macro to convert DMA Instance DMAx into DMAMUX channel
  64. * @note DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7.
  65. * DMAMUX channel 7 to 11 are mapped to DMA2 channel 1 to 5 (**** only available on chip which support DMA2 ****).
  66. * @param __DMA_INSTANCE__ DMAx
  67. * @retval Channel_Offset (LL_DMA_CHANNEL_7 or 0).
  68. */
  69. #define __LL_DMA_INSTANCE_TO_DMAMUX_CHANNEL(__DMA_INSTANCE__) \
  70. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) ? 0 : LL_DMA_CHANNEL_7)
  71. /**
  72. * @}
  73. */
  74. /* Exported types ------------------------------------------------------------*/
  75. #if defined(USE_FULL_LL_DRIVER)
  76. /** @defgroup DMA_LL_ES_INIT DMA Exported Init structure
  77. * @{
  78. */
  79. typedef struct
  80. {
  81. uint32_t PeriphOrM2MSrcAddress; /*!< Specifies the peripheral base address for DMA transfer
  82. or as Source base address in case of memory to memory transfer direction.
  83. This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
  84. uint32_t MemoryOrM2MDstAddress; /*!< Specifies the memory base address for DMA transfer
  85. or as Destination base address in case of memory to memory transfer direction.
  86. This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
  87. uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral,
  88. from memory to memory or from peripheral to memory.
  89. This parameter can be a value of @ref DMA_LL_EC_DIRECTION
  90. This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataTransferDirection(). */
  91. uint32_t Mode; /*!< Specifies the normal or circular operation mode.
  92. This parameter can be a value of @ref DMA_LL_EC_MODE
  93. @note: The circular buffer mode cannot be used if the memory to memory
  94. data transfer direction is configured on the selected Channel
  95. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMode(). */
  96. uint32_t PeriphOrM2MSrcIncMode; /*!< Specifies whether the Peripheral address or Source 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_PERIPH
  99. This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphIncMode(). */
  100. uint32_t MemoryOrM2MDstIncMode; /*!< Specifies whether the Memory address or Destination address in case of memory to memory transfer direction
  101. is incremented or not.
  102. This parameter can be a value of @ref DMA_LL_EC_MEMORY
  103. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryIncMode(). */
  104. uint32_t PeriphOrM2MSrcDataSize; /*!< Specifies the Peripheral data size alignment or Source 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_PDATAALIGN
  107. This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphSize(). */
  108. uint32_t MemoryOrM2MDstDataSize; /*!< Specifies the Memory data size alignment or Destination data size alignment (byte, half word, word)
  109. in case of memory to memory transfer direction.
  110. This parameter can be a value of @ref DMA_LL_EC_MDATAALIGN
  111. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemorySize(). */
  112. uint32_t NbData; /*!< Specifies the number of data to transfer, in data unit.
  113. The data unit is equal to the source buffer configuration set in PeripheralSize
  114. or MemorySize parameters depending in the transfer direction.
  115. This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF
  116. This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataLength(). */
  117. uint32_t PeriphRequest; /*!< Specifies the peripheral request.
  118. This parameter can be a value of @ref DMAMUX_LL_EC_REQUEST
  119. This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphRequest(). */
  120. uint32_t Priority; /*!< Specifies the channel priority level.
  121. This parameter can be a value of @ref DMA_LL_EC_PRIORITY
  122. This feature can be modified afterwards using unitary function @ref LL_DMA_SetChannelPriorityLevel(). */
  123. } LL_DMA_InitTypeDef;
  124. /**
  125. * @}
  126. */
  127. #endif /*USE_FULL_LL_DRIVER*/
  128. /* Exported constants --------------------------------------------------------*/
  129. /** @defgroup DMA_LL_Exported_Constants DMA Exported Constants
  130. * @{
  131. */
  132. /** @defgroup DMA_LL_EC_CLEAR_FLAG Clear Flags Defines
  133. * @brief Flags defines which can be used with LL_DMA_WriteReg function
  134. * @{
  135. */
  136. #define LL_DMA_IFCR_CGIF1 DMA_IFCR_CGIF1 /*!< Channel 1 global flag */
  137. #define LL_DMA_IFCR_CTCIF1 DMA_IFCR_CTCIF1 /*!< Channel 1 transfer complete flag */
  138. #define LL_DMA_IFCR_CHTIF1 DMA_IFCR_CHTIF1 /*!< Channel 1 half transfer flag */
  139. #define LL_DMA_IFCR_CTEIF1 DMA_IFCR_CTEIF1 /*!< Channel 1 transfer error flag */
  140. #define LL_DMA_IFCR_CGIF2 DMA_IFCR_CGIF2 /*!< Channel 2 global flag */
  141. #define LL_DMA_IFCR_CTCIF2 DMA_IFCR_CTCIF2 /*!< Channel 2 transfer complete flag */
  142. #define LL_DMA_IFCR_CHTIF2 DMA_IFCR_CHTIF2 /*!< Channel 2 half transfer flag */
  143. #define LL_DMA_IFCR_CTEIF2 DMA_IFCR_CTEIF2 /*!< Channel 2 transfer error flag */
  144. #define LL_DMA_IFCR_CGIF3 DMA_IFCR_CGIF3 /*!< Channel 3 global flag */
  145. #define LL_DMA_IFCR_CTCIF3 DMA_IFCR_CTCIF3 /*!< Channel 3 transfer complete flag */
  146. #define LL_DMA_IFCR_CHTIF3 DMA_IFCR_CHTIF3 /*!< Channel 3 half transfer flag */
  147. #define LL_DMA_IFCR_CTEIF3 DMA_IFCR_CTEIF3 /*!< Channel 3 transfer error flag */
  148. #define LL_DMA_IFCR_CGIF4 DMA_IFCR_CGIF4 /*!< Channel 4 global flag */
  149. #define LL_DMA_IFCR_CTCIF4 DMA_IFCR_CTCIF4 /*!< Channel 4 transfer complete flag */
  150. #define LL_DMA_IFCR_CHTIF4 DMA_IFCR_CHTIF4 /*!< Channel 4 half transfer flag */
  151. #define LL_DMA_IFCR_CTEIF4 DMA_IFCR_CTEIF4 /*!< Channel 4 transfer error flag */
  152. #define LL_DMA_IFCR_CGIF5 DMA_IFCR_CGIF5 /*!< Channel 5 global flag */
  153. #define LL_DMA_IFCR_CTCIF5 DMA_IFCR_CTCIF5 /*!< Channel 5 transfer complete flag */
  154. #define LL_DMA_IFCR_CHTIF5 DMA_IFCR_CHTIF5 /*!< Channel 5 half transfer flag */
  155. #define LL_DMA_IFCR_CTEIF5 DMA_IFCR_CTEIF5 /*!< Channel 5 transfer error flag */
  156. #if defined(DMA1_Channel6)
  157. #define LL_DMA_IFCR_CGIF6 DMA_IFCR_CGIF6 /*!< Channel 6 global flag */
  158. #define LL_DMA_IFCR_CTCIF6 DMA_IFCR_CTCIF6 /*!< Channel 6 transfer complete flag */
  159. #define LL_DMA_IFCR_CHTIF6 DMA_IFCR_CHTIF6 /*!< Channel 6 half transfer flag */
  160. #define LL_DMA_IFCR_CTEIF6 DMA_IFCR_CTEIF6 /*!< Channel 6 transfer error flag */
  161. #endif /* DMA1_Channel6 */
  162. #if defined(DMA1_Channel7)
  163. #define LL_DMA_IFCR_CGIF7 DMA_IFCR_CGIF7 /*!< Channel 7 global flag */
  164. #define LL_DMA_IFCR_CTCIF7 DMA_IFCR_CTCIF7 /*!< Channel 7 transfer complete flag */
  165. #define LL_DMA_IFCR_CHTIF7 DMA_IFCR_CHTIF7 /*!< Channel 7 half transfer flag */
  166. #define LL_DMA_IFCR_CTEIF7 DMA_IFCR_CTEIF7 /*!< Channel 7 transfer error flag */
  167. #endif /* DMA1_Channel7 */
  168. /**
  169. * @}
  170. */
  171. /** @defgroup DMA_LL_EC_GET_FLAG Get Flags Defines
  172. * @brief Flags defines which can be used with LL_DMA_ReadReg function
  173. * @{
  174. */
  175. #define LL_DMA_ISR_GIF1 DMA_ISR_GIF1 /*!< Channel 1 global flag */
  176. #define LL_DMA_ISR_TCIF1 DMA_ISR_TCIF1 /*!< Channel 1 transfer complete flag */
  177. #define LL_DMA_ISR_HTIF1 DMA_ISR_HTIF1 /*!< Channel 1 half transfer flag */
  178. #define LL_DMA_ISR_TEIF1 DMA_ISR_TEIF1 /*!< Channel 1 transfer error flag */
  179. #define LL_DMA_ISR_GIF2 DMA_ISR_GIF2 /*!< Channel 2 global flag */
  180. #define LL_DMA_ISR_TCIF2 DMA_ISR_TCIF2 /*!< Channel 2 transfer complete flag */
  181. #define LL_DMA_ISR_HTIF2 DMA_ISR_HTIF2 /*!< Channel 2 half transfer flag */
  182. #define LL_DMA_ISR_TEIF2 DMA_ISR_TEIF2 /*!< Channel 2 transfer error flag */
  183. #define LL_DMA_ISR_GIF3 DMA_ISR_GIF3 /*!< Channel 3 global flag */
  184. #define LL_DMA_ISR_TCIF3 DMA_ISR_TCIF3 /*!< Channel 3 transfer complete flag */
  185. #define LL_DMA_ISR_HTIF3 DMA_ISR_HTIF3 /*!< Channel 3 half transfer flag */
  186. #define LL_DMA_ISR_TEIF3 DMA_ISR_TEIF3 /*!< Channel 3 transfer error flag */
  187. #define LL_DMA_ISR_GIF4 DMA_ISR_GIF4 /*!< Channel 4 global flag */
  188. #define LL_DMA_ISR_TCIF4 DMA_ISR_TCIF4 /*!< Channel 4 transfer complete flag */
  189. #define LL_DMA_ISR_HTIF4 DMA_ISR_HTIF4 /*!< Channel 4 half transfer flag */
  190. #define LL_DMA_ISR_TEIF4 DMA_ISR_TEIF4 /*!< Channel 4 transfer error flag */
  191. #define LL_DMA_ISR_GIF5 DMA_ISR_GIF5 /*!< Channel 5 global flag */
  192. #define LL_DMA_ISR_TCIF5 DMA_ISR_TCIF5 /*!< Channel 5 transfer complete flag */
  193. #define LL_DMA_ISR_HTIF5 DMA_ISR_HTIF5 /*!< Channel 5 half transfer flag */
  194. #define LL_DMA_ISR_TEIF5 DMA_ISR_TEIF5 /*!< Channel 5 transfer error flag */
  195. #if defined(DMA1_Channel6)
  196. #define LL_DMA_ISR_GIF6 DMA_ISR_GIF6 /*!< Channel 6 global flag */
  197. #define LL_DMA_ISR_TCIF6 DMA_ISR_TCIF6 /*!< Channel 6 transfer complete flag */
  198. #define LL_DMA_ISR_HTIF6 DMA_ISR_HTIF6 /*!< Channel 6 half transfer flag */
  199. #define LL_DMA_ISR_TEIF6 DMA_ISR_TEIF6 /*!< Channel 6 transfer error flag */
  200. #endif /* DMA1_Channel6 */
  201. #if defined(DMA1_Channel7)
  202. #define LL_DMA_ISR_GIF7 DMA_ISR_GIF7 /*!< Channel 7 global flag */
  203. #define LL_DMA_ISR_TCIF7 DMA_ISR_TCIF7 /*!< Channel 7 transfer complete flag */
  204. #define LL_DMA_ISR_HTIF7 DMA_ISR_HTIF7 /*!< Channel 7 half transfer flag */
  205. #define LL_DMA_ISR_TEIF7 DMA_ISR_TEIF7 /*!< Channel 7 transfer error flag */
  206. #endif /* DMA1_Channel7 */
  207. /**
  208. * @}
  209. */
  210. /** @defgroup DMA_LL_EC_IT IT Defines
  211. * @brief IT defines which can be used with LL_DMA_ReadReg and LL_DMA_WriteReg functions
  212. * @{
  213. */
  214. #define LL_DMA_CCR_TCIE DMA_CCR_TCIE /*!< Transfer complete interrupt */
  215. #define LL_DMA_CCR_HTIE DMA_CCR_HTIE /*!< Half Transfer interrupt */
  216. #define LL_DMA_CCR_TEIE DMA_CCR_TEIE /*!< Transfer error interrupt */
  217. /**
  218. * @}
  219. */
  220. /** @defgroup DMA_LL_EC_CHANNEL CHANNEL
  221. * @{
  222. */
  223. #define LL_DMA_CHANNEL_1 0x00000000U /*!< DMA Channel 1 */
  224. #define LL_DMA_CHANNEL_2 0x00000001U /*!< DMA Channel 2 */
  225. #define LL_DMA_CHANNEL_3 0x00000002U /*!< DMA Channel 3 */
  226. #define LL_DMA_CHANNEL_4 0x00000003U /*!< DMA Channel 4 */
  227. #define LL_DMA_CHANNEL_5 0x00000004U /*!< DMA Channel 5 */
  228. #if defined(DMA1_Channel6)
  229. #define LL_DMA_CHANNEL_6 0x00000005U /*!< DMA Channel 6 */
  230. #endif /* DMA1_Channel6 */
  231. #if defined(DMA1_Channel7)
  232. #define LL_DMA_CHANNEL_7 0x00000006U /*!< DMA Channel 7 */
  233. #endif /* DMA1_Channel7 */
  234. #if defined(USE_FULL_LL_DRIVER)
  235. #define LL_DMA_CHANNEL_ALL 0xFFFF0000U /*!< DMA Channel all (used only for function @ref LL_DMA_DeInit(). */
  236. #endif /*USE_FULL_LL_DRIVER*/
  237. /**
  238. * @}
  239. */
  240. /** @defgroup DMA_LL_EC_DIRECTION Transfer Direction
  241. * @{
  242. */
  243. #define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */
  244. #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CCR_DIR /*!< Memory to peripheral direction */
  245. #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CCR_MEM2MEM /*!< Memory to memory direction */
  246. /**
  247. * @}
  248. */
  249. /** @defgroup DMA_LL_EC_MODE Transfer mode
  250. * @{
  251. */
  252. #define LL_DMA_MODE_NORMAL 0x00000000U /*!< Normal Mode */
  253. #define LL_DMA_MODE_CIRCULAR DMA_CCR_CIRC /*!< Circular Mode */
  254. /**
  255. * @}
  256. */
  257. /** @defgroup DMA_LL_EC_PERIPH Peripheral increment mode
  258. * @{
  259. */
  260. #define LL_DMA_PERIPH_INCREMENT DMA_CCR_PINC /*!< Peripheral increment mode Enable */
  261. #define LL_DMA_PERIPH_NOINCREMENT 0x00000000U /*!< Peripheral increment mode Disable */
  262. /**
  263. * @}
  264. */
  265. /** @defgroup DMA_LL_EC_MEMORY Memory increment mode
  266. * @{
  267. */
  268. #define LL_DMA_MEMORY_INCREMENT DMA_CCR_MINC /*!< Memory increment mode Enable */
  269. #define LL_DMA_MEMORY_NOINCREMENT 0x00000000U /*!< Memory increment mode Disable */
  270. /**
  271. * @}
  272. */
  273. /** @defgroup DMA_LL_EC_PDATAALIGN Peripheral data alignment
  274. * @{
  275. */
  276. #define LL_DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment : Byte */
  277. #define LL_DMA_PDATAALIGN_HALFWORD DMA_CCR_PSIZE_0 /*!< Peripheral data alignment : HalfWord */
  278. #define LL_DMA_PDATAALIGN_WORD DMA_CCR_PSIZE_1 /*!< Peripheral data alignment : Word */
  279. /**
  280. * @}
  281. */
  282. /** @defgroup DMA_LL_EC_MDATAALIGN Memory data alignment
  283. * @{
  284. */
  285. #define LL_DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment : Byte */
  286. #define LL_DMA_MDATAALIGN_HALFWORD DMA_CCR_MSIZE_0 /*!< Memory data alignment : HalfWord */
  287. #define LL_DMA_MDATAALIGN_WORD DMA_CCR_MSIZE_1 /*!< Memory data alignment : Word */
  288. /**
  289. * @}
  290. */
  291. /** @defgroup DMA_LL_EC_PRIORITY Transfer Priority level
  292. * @{
  293. */
  294. #define LL_DMA_PRIORITY_LOW 0x00000000U /*!< Priority level : Low */
  295. #define LL_DMA_PRIORITY_MEDIUM DMA_CCR_PL_0 /*!< Priority level : Medium */
  296. #define LL_DMA_PRIORITY_HIGH DMA_CCR_PL_1 /*!< Priority level : High */
  297. #define LL_DMA_PRIORITY_VERYHIGH DMA_CCR_PL /*!< Priority level : Very_High */
  298. /**
  299. * @}
  300. */
  301. /**
  302. * @}
  303. */
  304. /* Exported macro ------------------------------------------------------------*/
  305. /** @defgroup DMA_LL_Exported_Macros DMA Exported Macros
  306. * @{
  307. */
  308. /** @defgroup DMA_LL_EM_WRITE_READ Common Write and read registers macros
  309. * @{
  310. */
  311. /**
  312. * @brief Write a value in DMA register
  313. * @param __INSTANCE__ DMA Instance
  314. * @param __REG__ Register to be written
  315. * @param __VALUE__ Value to be written in the register
  316. * @retval None
  317. */
  318. #define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
  319. /**
  320. * @brief Read a value in DMA register
  321. * @param __INSTANCE__ DMA Instance
  322. * @param __REG__ Register to be read
  323. * @retval Register value
  324. */
  325. #define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
  326. /**
  327. * @}
  328. */
  329. /** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxChannely
  330. * @{
  331. */
  332. /**
  333. * @brief Convert DMAx_Channely into DMAx
  334. * @param __CHANNEL_INSTANCE__ DMAx_Channely
  335. * @retval DMAx
  336. */
  337. #if defined(DMA2)
  338. #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) \
  339. (((uint32_t)(__CHANNEL_INSTANCE__) > ((uint32_t)DMA1_Channel7)) ? DMA2 : DMA1)
  340. #else /* DMA1 */
  341. #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) (DMA1)
  342. #endif /* DMA2 */
  343. /**
  344. * @brief Convert DMAx_Channely into LL_DMA_CHANNEL_y
  345. * @param __CHANNEL_INSTANCE__ DMAx_Channely
  346. * @retval LL_DMA_CHANNEL_y
  347. */
  348. #if defined(DMA2)
  349. #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \
  350. (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
  351. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel1)) ? LL_DMA_CHANNEL_1 : \
  352. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
  353. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel2)) ? LL_DMA_CHANNEL_2 : \
  354. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
  355. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel3)) ? LL_DMA_CHANNEL_3 : \
  356. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
  357. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel4)) ? LL_DMA_CHANNEL_4 : \
  358. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
  359. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel5)) ? LL_DMA_CHANNEL_5 : \
  360. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
  361. LL_DMA_CHANNEL_7)
  362. #else /* DMA1 */
  363. #if defined(DMA1_Channel7)
  364. #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \
  365. (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
  366. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
  367. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
  368. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
  369. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
  370. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
  371. LL_DMA_CHANNEL_7)
  372. #else
  373. #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \
  374. (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
  375. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
  376. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
  377. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
  378. LL_DMA_CHANNEL_5)
  379. #endif /* DMA1_Channel8 */
  380. #endif /* DMA2 */
  381. /**
  382. * @brief Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely
  383. * @param __DMA_INSTANCE__ DMAx
  384. * @param __CHANNEL__ LL_DMA_CHANNEL_y
  385. * @retval DMAx_Channely
  386. */
  387. #if defined(DMA2)
  388. #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \
  389. ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
  390. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA2_Channel1 : \
  391. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
  392. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA2_Channel2 : \
  393. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
  394. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA2_Channel3 : \
  395. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
  396. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA2_Channel4 : \
  397. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \
  398. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA2_Channel5 : \
  399. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \
  400. DMA1_Channel7)
  401. #else /* DMA1 */
  402. #if defined(DMA1_Channel7)
  403. #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \
  404. ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
  405. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
  406. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
  407. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
  408. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \
  409. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \
  410. DMA1_Channel7)
  411. #else
  412. #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \
  413. ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
  414. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
  415. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
  416. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
  417. DMA1_Channel5)
  418. #endif /* DMA1_Channel8 */
  419. #endif /* DMA2 */
  420. /**
  421. * @}
  422. */
  423. /**
  424. * @}
  425. */
  426. /* Exported functions --------------------------------------------------------*/
  427. /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions
  428. * @{
  429. */
  430. /** @defgroup DMA_LL_EF_Configuration Configuration
  431. * @{
  432. */
  433. /**
  434. * @brief Enable DMA channel.
  435. * @rmtoll CCR EN LL_DMA_EnableChannel
  436. * @param DMAx DMAx Instance
  437. * @param Channel This parameter can be one of the following values:
  438. * @arg @ref LL_DMA_CHANNEL_1
  439. * @arg @ref LL_DMA_CHANNEL_2
  440. * @arg @ref LL_DMA_CHANNEL_3
  441. * @arg @ref LL_DMA_CHANNEL_4
  442. * @arg @ref LL_DMA_CHANNEL_5
  443. * @arg @ref LL_DMA_CHANNEL_6
  444. * @arg @ref LL_DMA_CHANNEL_7
  445. * @retval None
  446. */
  447. __STATIC_INLINE void LL_DMA_EnableChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
  448. {
  449. uint32_t dma_base_addr = (uint32_t)DMAx;
  450. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN);
  451. }
  452. /**
  453. * @brief Disable DMA channel.
  454. * @rmtoll CCR EN LL_DMA_DisableChannel
  455. * @param DMAx DMAx Instance
  456. * @param Channel This parameter can be one of the following values:
  457. * @arg @ref LL_DMA_CHANNEL_1
  458. * @arg @ref LL_DMA_CHANNEL_2
  459. * @arg @ref LL_DMA_CHANNEL_3
  460. * @arg @ref LL_DMA_CHANNEL_4
  461. * @arg @ref LL_DMA_CHANNEL_5
  462. * @arg @ref LL_DMA_CHANNEL_6
  463. * @arg @ref LL_DMA_CHANNEL_7
  464. * @retval None
  465. */
  466. __STATIC_INLINE void LL_DMA_DisableChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
  467. {
  468. uint32_t dma_base_addr = (uint32_t)DMAx;
  469. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN);
  470. }
  471. /**
  472. * @brief Check if DMA channel is enabled or disabled.
  473. * @rmtoll CCR EN LL_DMA_IsEnabledChannel
  474. * @param DMAx DMAx Instance
  475. * @param Channel This parameter can be one of the following values:
  476. * @arg @ref LL_DMA_CHANNEL_1
  477. * @arg @ref LL_DMA_CHANNEL_2
  478. * @arg @ref LL_DMA_CHANNEL_3
  479. * @arg @ref LL_DMA_CHANNEL_4
  480. * @arg @ref LL_DMA_CHANNEL_5
  481. * @arg @ref LL_DMA_CHANNEL_6
  482. * @arg @ref LL_DMA_CHANNEL_7
  483. * @retval State of bit (1 or 0).
  484. */
  485. __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(const DMA_TypeDef *DMAx, uint32_t Channel)
  486. {
  487. uint32_t dma_base_addr = (uint32_t)DMAx;
  488. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  489. DMA_CCR_EN) == (DMA_CCR_EN)) ? 1UL : 0UL);
  490. }
  491. /**
  492. * @brief Configure all parameters link to DMA transfer.
  493. * @rmtoll CCR DIR LL_DMA_ConfigTransfer\n
  494. * CCR MEM2MEM LL_DMA_ConfigTransfer\n
  495. * CCR CIRC LL_DMA_ConfigTransfer\n
  496. * CCR PINC LL_DMA_ConfigTransfer\n
  497. * CCR MINC LL_DMA_ConfigTransfer\n
  498. * CCR PSIZE LL_DMA_ConfigTransfer\n
  499. * CCR MSIZE LL_DMA_ConfigTransfer\n
  500. * CCR PL LL_DMA_ConfigTransfer
  501. * @param DMAx DMAx Instance
  502. * @param Channel This parameter can be one of the following values:
  503. * @arg @ref LL_DMA_CHANNEL_1
  504. * @arg @ref LL_DMA_CHANNEL_2
  505. * @arg @ref LL_DMA_CHANNEL_3
  506. * @arg @ref LL_DMA_CHANNEL_4
  507. * @arg @ref LL_DMA_CHANNEL_5
  508. * @arg @ref LL_DMA_CHANNEL_6
  509. * @arg @ref LL_DMA_CHANNEL_7
  510. * @param Configuration This parameter must be a combination of all the following values:
  511. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  512. * @arg @ref LL_DMA_MODE_NORMAL or @ref LL_DMA_MODE_CIRCULAR
  513. * @arg @ref LL_DMA_PERIPH_INCREMENT or @ref LL_DMA_PERIPH_NOINCREMENT
  514. * @arg @ref LL_DMA_MEMORY_INCREMENT or @ref LL_DMA_MEMORY_NOINCREMENT
  515. * @arg @ref LL_DMA_PDATAALIGN_BYTE or @ref LL_DMA_PDATAALIGN_HALFWORD or @ref LL_DMA_PDATAALIGN_WORD
  516. * @arg @ref LL_DMA_MDATAALIGN_BYTE or @ref LL_DMA_MDATAALIGN_HALFWORD or @ref LL_DMA_MDATAALIGN_WORD
  517. * @arg @ref LL_DMA_PRIORITY_LOW or @ref LL_DMA_PRIORITY_MEDIUM or @ref LL_DMA_PRIORITY_HIGH or @ref LL_DMA_PRIORITY_VERYHIGH
  518. * @retval None
  519. */
  520. __STATIC_INLINE void LL_DMA_ConfigTransfer(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
  521. {
  522. uint32_t dma_base_addr = (uint32_t)DMAx;
  523. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  524. DMA_CCR_DIR | DMA_CCR_MEM2MEM | DMA_CCR_CIRC | DMA_CCR_PINC | DMA_CCR_MINC | DMA_CCR_PSIZE | DMA_CCR_MSIZE | DMA_CCR_PL,
  525. Configuration);
  526. }
  527. /**
  528. * @brief Set Data transfer direction (read from peripheral or from memory).
  529. * @rmtoll CCR DIR LL_DMA_SetDataTransferDirection\n
  530. * CCR MEM2MEM LL_DMA_SetDataTransferDirection
  531. * @param DMAx DMAx Instance
  532. * @param Channel This parameter can be one of the following values:
  533. * @arg @ref LL_DMA_CHANNEL_1
  534. * @arg @ref LL_DMA_CHANNEL_2
  535. * @arg @ref LL_DMA_CHANNEL_3
  536. * @arg @ref LL_DMA_CHANNEL_4
  537. * @arg @ref LL_DMA_CHANNEL_5
  538. * @arg @ref LL_DMA_CHANNEL_6
  539. * @arg @ref LL_DMA_CHANNEL_7
  540. * @param Direction This parameter can be one of the following values:
  541. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  542. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  543. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  544. * @retval None
  545. */
  546. __STATIC_INLINE void LL_DMA_SetDataTransferDirection(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Direction)
  547. {
  548. uint32_t dma_base_addr = (uint32_t)DMAx;
  549. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  550. DMA_CCR_DIR | DMA_CCR_MEM2MEM, Direction);
  551. }
  552. /**
  553. * @brief Get Data transfer direction (read from peripheral or from memory).
  554. * @rmtoll CCR DIR LL_DMA_GetDataTransferDirection\n
  555. * CCR MEM2MEM LL_DMA_GetDataTransferDirection
  556. * @param DMAx DMAx Instance
  557. * @param Channel This parameter can be one of the following values:
  558. * @arg @ref LL_DMA_CHANNEL_1
  559. * @arg @ref LL_DMA_CHANNEL_2
  560. * @arg @ref LL_DMA_CHANNEL_3
  561. * @arg @ref LL_DMA_CHANNEL_4
  562. * @arg @ref LL_DMA_CHANNEL_5
  563. * @arg @ref LL_DMA_CHANNEL_6
  564. * @arg @ref LL_DMA_CHANNEL_7
  565. * @retval Returned value can be one of the following values:
  566. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  567. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  568. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  569. */
  570. __STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(const DMA_TypeDef *DMAx, uint32_t Channel)
  571. {
  572. uint32_t dma_base_addr = (uint32_t)DMAx;
  573. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  574. DMA_CCR_DIR | DMA_CCR_MEM2MEM));
  575. }
  576. /**
  577. * @brief Set DMA mode circular or normal.
  578. * @note The circular buffer mode cannot be used if the memory-to-memory
  579. * data transfer is configured on the selected Channel.
  580. * @rmtoll CCR CIRC LL_DMA_SetMode
  581. * @param DMAx DMAx Instance
  582. * @param Channel This parameter can be one of the following values:
  583. * @arg @ref LL_DMA_CHANNEL_1
  584. * @arg @ref LL_DMA_CHANNEL_2
  585. * @arg @ref LL_DMA_CHANNEL_3
  586. * @arg @ref LL_DMA_CHANNEL_4
  587. * @arg @ref LL_DMA_CHANNEL_5
  588. * @arg @ref LL_DMA_CHANNEL_6
  589. * @arg @ref LL_DMA_CHANNEL_7
  590. * @param Mode This parameter can be one of the following values:
  591. * @arg @ref LL_DMA_MODE_NORMAL
  592. * @arg @ref LL_DMA_MODE_CIRCULAR
  593. * @retval None
  594. */
  595. __STATIC_INLINE void LL_DMA_SetMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Mode)
  596. {
  597. uint32_t dma_base_addr = (uint32_t)DMAx;
  598. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_CIRC,
  599. Mode);
  600. }
  601. /**
  602. * @brief Get DMA mode circular or normal.
  603. * @rmtoll CCR CIRC LL_DMA_GetMode
  604. * @param DMAx DMAx Instance
  605. * @param Channel This parameter can be one of the following values:
  606. * @arg @ref LL_DMA_CHANNEL_1
  607. * @arg @ref LL_DMA_CHANNEL_2
  608. * @arg @ref LL_DMA_CHANNEL_3
  609. * @arg @ref LL_DMA_CHANNEL_4
  610. * @arg @ref LL_DMA_CHANNEL_5
  611. * @arg @ref LL_DMA_CHANNEL_6
  612. * @arg @ref LL_DMA_CHANNEL_7
  613. * @retval Returned value can be one of the following values:
  614. * @arg @ref LL_DMA_MODE_NORMAL
  615. * @arg @ref LL_DMA_MODE_CIRCULAR
  616. */
  617. __STATIC_INLINE uint32_t LL_DMA_GetMode(const DMA_TypeDef *DMAx, uint32_t Channel)
  618. {
  619. uint32_t dma_base_addr = (uint32_t)DMAx;
  620. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  621. DMA_CCR_CIRC));
  622. }
  623. /**
  624. * @brief Set Peripheral increment mode.
  625. * @rmtoll CCR PINC LL_DMA_SetPeriphIncMode
  626. * @param DMAx DMAx Instance
  627. * @param Channel This parameter can be one of the following values:
  628. * @arg @ref LL_DMA_CHANNEL_1
  629. * @arg @ref LL_DMA_CHANNEL_2
  630. * @arg @ref LL_DMA_CHANNEL_3
  631. * @arg @ref LL_DMA_CHANNEL_4
  632. * @arg @ref LL_DMA_CHANNEL_5
  633. * @arg @ref LL_DMA_CHANNEL_6
  634. * @arg @ref LL_DMA_CHANNEL_7
  635. * @param PeriphOrM2MSrcIncMode This parameter can be one of the following values:
  636. * @arg @ref LL_DMA_PERIPH_INCREMENT
  637. * @arg @ref LL_DMA_PERIPH_NOINCREMENT
  638. * @retval None
  639. */
  640. __STATIC_INLINE void LL_DMA_SetPeriphIncMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcIncMode)
  641. {
  642. uint32_t dma_base_addr = (uint32_t)DMAx;
  643. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PINC,
  644. PeriphOrM2MSrcIncMode);
  645. }
  646. /**
  647. * @brief Get Peripheral increment mode.
  648. * @rmtoll CCR PINC LL_DMA_GetPeriphIncMode
  649. * @param DMAx DMAx Instance
  650. * @param Channel This parameter can be one of the following values:
  651. * @arg @ref LL_DMA_CHANNEL_1
  652. * @arg @ref LL_DMA_CHANNEL_2
  653. * @arg @ref LL_DMA_CHANNEL_3
  654. * @arg @ref LL_DMA_CHANNEL_4
  655. * @arg @ref LL_DMA_CHANNEL_5
  656. * @arg @ref LL_DMA_CHANNEL_6
  657. * @arg @ref LL_DMA_CHANNEL_7
  658. * @retval Returned value can be one of the following values:
  659. * @arg @ref LL_DMA_PERIPH_INCREMENT
  660. * @arg @ref LL_DMA_PERIPH_NOINCREMENT
  661. */
  662. __STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(const DMA_TypeDef *DMAx, uint32_t Channel)
  663. {
  664. uint32_t dma_base_addr = (uint32_t)DMAx;
  665. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  666. DMA_CCR_PINC));
  667. }
  668. /**
  669. * @brief Set Memory increment mode.
  670. * @rmtoll CCR MINC LL_DMA_SetMemoryIncMode
  671. * @param DMAx DMAx Instance
  672. * @param Channel This parameter can be one of the following values:
  673. * @arg @ref LL_DMA_CHANNEL_1
  674. * @arg @ref LL_DMA_CHANNEL_2
  675. * @arg @ref LL_DMA_CHANNEL_3
  676. * @arg @ref LL_DMA_CHANNEL_4
  677. * @arg @ref LL_DMA_CHANNEL_5
  678. * @arg @ref LL_DMA_CHANNEL_6
  679. * @arg @ref LL_DMA_CHANNEL_7
  680. * @param MemoryOrM2MDstIncMode This parameter can be one of the following values:
  681. * @arg @ref LL_DMA_MEMORY_INCREMENT
  682. * @arg @ref LL_DMA_MEMORY_NOINCREMENT
  683. * @retval None
  684. */
  685. __STATIC_INLINE void LL_DMA_SetMemoryIncMode(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstIncMode)
  686. {
  687. uint32_t dma_base_addr = (uint32_t)DMAx;
  688. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_MINC,
  689. MemoryOrM2MDstIncMode);
  690. }
  691. /**
  692. * @brief Get Memory increment mode.
  693. * @rmtoll CCR MINC LL_DMA_GetMemoryIncMode
  694. * @param DMAx DMAx Instance
  695. * @param Channel This parameter can be one of the following values:
  696. * @arg @ref LL_DMA_CHANNEL_1
  697. * @arg @ref LL_DMA_CHANNEL_2
  698. * @arg @ref LL_DMA_CHANNEL_3
  699. * @arg @ref LL_DMA_CHANNEL_4
  700. * @arg @ref LL_DMA_CHANNEL_5
  701. * @arg @ref LL_DMA_CHANNEL_6
  702. * @arg @ref LL_DMA_CHANNEL_7
  703. * @retval Returned value can be one of the following values:
  704. * @arg @ref LL_DMA_MEMORY_INCREMENT
  705. * @arg @ref LL_DMA_MEMORY_NOINCREMENT
  706. */
  707. __STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(const DMA_TypeDef *DMAx, uint32_t Channel)
  708. {
  709. uint32_t dma_base_addr = (uint32_t)DMAx;
  710. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  711. DMA_CCR_MINC));
  712. }
  713. /**
  714. * @brief Set Peripheral size.
  715. * @rmtoll CCR PSIZE LL_DMA_SetPeriphSize
  716. * @param DMAx DMAx Instance
  717. * @param Channel This parameter can be one of the following values:
  718. * @arg @ref LL_DMA_CHANNEL_1
  719. * @arg @ref LL_DMA_CHANNEL_2
  720. * @arg @ref LL_DMA_CHANNEL_3
  721. * @arg @ref LL_DMA_CHANNEL_4
  722. * @arg @ref LL_DMA_CHANNEL_5
  723. * @arg @ref LL_DMA_CHANNEL_6
  724. * @arg @ref LL_DMA_CHANNEL_7
  725. * @param PeriphOrM2MSrcDataSize This parameter can be one of the following values:
  726. * @arg @ref LL_DMA_PDATAALIGN_BYTE
  727. * @arg @ref LL_DMA_PDATAALIGN_HALFWORD
  728. * @arg @ref LL_DMA_PDATAALIGN_WORD
  729. * @retval None
  730. */
  731. __STATIC_INLINE void LL_DMA_SetPeriphSize(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcDataSize)
  732. {
  733. uint32_t dma_base_addr = (uint32_t)DMAx;
  734. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PSIZE,
  735. PeriphOrM2MSrcDataSize);
  736. }
  737. /**
  738. * @brief Get Peripheral size.
  739. * @rmtoll CCR PSIZE LL_DMA_GetPeriphSize
  740. * @param DMAx DMAx Instance
  741. * @param Channel This parameter can be one of the following values:
  742. * @arg @ref LL_DMA_CHANNEL_1
  743. * @arg @ref LL_DMA_CHANNEL_2
  744. * @arg @ref LL_DMA_CHANNEL_3
  745. * @arg @ref LL_DMA_CHANNEL_4
  746. * @arg @ref LL_DMA_CHANNEL_5
  747. * @arg @ref LL_DMA_CHANNEL_6
  748. * @arg @ref LL_DMA_CHANNEL_7
  749. * @retval Returned value can be one of the following values:
  750. * @arg @ref LL_DMA_PDATAALIGN_BYTE
  751. * @arg @ref LL_DMA_PDATAALIGN_HALFWORD
  752. * @arg @ref LL_DMA_PDATAALIGN_WORD
  753. */
  754. __STATIC_INLINE uint32_t LL_DMA_GetPeriphSize(const DMA_TypeDef *DMAx, uint32_t Channel)
  755. {
  756. uint32_t dma_base_addr = (uint32_t)DMAx;
  757. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  758. DMA_CCR_PSIZE));
  759. }
  760. /**
  761. * @brief Set Memory size.
  762. * @rmtoll CCR MSIZE LL_DMA_SetMemorySize
  763. * @param DMAx DMAx Instance
  764. * @param Channel This parameter can be one of the following values:
  765. * @arg @ref LL_DMA_CHANNEL_1
  766. * @arg @ref LL_DMA_CHANNEL_2
  767. * @arg @ref LL_DMA_CHANNEL_3
  768. * @arg @ref LL_DMA_CHANNEL_4
  769. * @arg @ref LL_DMA_CHANNEL_5
  770. * @arg @ref LL_DMA_CHANNEL_6
  771. * @arg @ref LL_DMA_CHANNEL_7
  772. * @param MemoryOrM2MDstDataSize This parameter can be one of the following values:
  773. * @arg @ref LL_DMA_MDATAALIGN_BYTE
  774. * @arg @ref LL_DMA_MDATAALIGN_HALFWORD
  775. * @arg @ref LL_DMA_MDATAALIGN_WORD
  776. * @retval None
  777. */
  778. __STATIC_INLINE void LL_DMA_SetMemorySize(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstDataSize)
  779. {
  780. uint32_t dma_base_addr = (uint32_t)DMAx;
  781. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_MSIZE,
  782. MemoryOrM2MDstDataSize);
  783. }
  784. /**
  785. * @brief Get Memory size.
  786. * @rmtoll CCR MSIZE LL_DMA_GetMemorySize
  787. * @param DMAx DMAx Instance
  788. * @param Channel This parameter can be one of the following values:
  789. * @arg @ref LL_DMA_CHANNEL_1
  790. * @arg @ref LL_DMA_CHANNEL_2
  791. * @arg @ref LL_DMA_CHANNEL_3
  792. * @arg @ref LL_DMA_CHANNEL_4
  793. * @arg @ref LL_DMA_CHANNEL_5
  794. * @arg @ref LL_DMA_CHANNEL_6
  795. * @arg @ref LL_DMA_CHANNEL_7
  796. * @retval Returned value can be one of the following values:
  797. * @arg @ref LL_DMA_MDATAALIGN_BYTE
  798. * @arg @ref LL_DMA_MDATAALIGN_HALFWORD
  799. * @arg @ref LL_DMA_MDATAALIGN_WORD
  800. */
  801. __STATIC_INLINE uint32_t LL_DMA_GetMemorySize(const DMA_TypeDef *DMAx, uint32_t Channel)
  802. {
  803. uint32_t dma_base_addr = (uint32_t)DMAx;
  804. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  805. DMA_CCR_MSIZE));
  806. }
  807. /**
  808. * @brief Set Channel priority level.
  809. * @rmtoll CCR PL LL_DMA_SetChannelPriorityLevel
  810. * @param DMAx DMAx Instance
  811. * @param Channel This parameter can be one of the following values:
  812. * @arg @ref LL_DMA_CHANNEL_1
  813. * @arg @ref LL_DMA_CHANNEL_2
  814. * @arg @ref LL_DMA_CHANNEL_3
  815. * @arg @ref LL_DMA_CHANNEL_4
  816. * @arg @ref LL_DMA_CHANNEL_5
  817. * @arg @ref LL_DMA_CHANNEL_6
  818. * @arg @ref LL_DMA_CHANNEL_7
  819. * @param Priority This parameter can be one of the following values:
  820. * @arg @ref LL_DMA_PRIORITY_LOW
  821. * @arg @ref LL_DMA_PRIORITY_MEDIUM
  822. * @arg @ref LL_DMA_PRIORITY_HIGH
  823. * @arg @ref LL_DMA_PRIORITY_VERYHIGH
  824. * @retval None
  825. */
  826. __STATIC_INLINE void LL_DMA_SetChannelPriorityLevel(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Priority)
  827. {
  828. uint32_t dma_base_addr = (uint32_t)DMAx;
  829. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PL,
  830. Priority);
  831. }
  832. /**
  833. * @brief Get Channel priority level.
  834. * @rmtoll CCR PL LL_DMA_GetChannelPriorityLevel
  835. * @param DMAx DMAx Instance
  836. * @param Channel This parameter can be one of the following values:
  837. * @arg @ref LL_DMA_CHANNEL_1
  838. * @arg @ref LL_DMA_CHANNEL_2
  839. * @arg @ref LL_DMA_CHANNEL_3
  840. * @arg @ref LL_DMA_CHANNEL_4
  841. * @arg @ref LL_DMA_CHANNEL_5
  842. * @arg @ref LL_DMA_CHANNEL_6
  843. * @arg @ref LL_DMA_CHANNEL_7
  844. * @retval Returned value can be one of the following values:
  845. * @arg @ref LL_DMA_PRIORITY_LOW
  846. * @arg @ref LL_DMA_PRIORITY_MEDIUM
  847. * @arg @ref LL_DMA_PRIORITY_HIGH
  848. * @arg @ref LL_DMA_PRIORITY_VERYHIGH
  849. */
  850. __STATIC_INLINE uint32_t LL_DMA_GetChannelPriorityLevel(const DMA_TypeDef *DMAx, uint32_t Channel)
  851. {
  852. uint32_t dma_base_addr = (uint32_t)DMAx;
  853. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  854. DMA_CCR_PL));
  855. }
  856. /**
  857. * @brief Set Number of data to transfer.
  858. * @note This action has no effect if
  859. * channel is enabled.
  860. * @rmtoll CNDTR NDT LL_DMA_SetDataLength
  861. * @param DMAx DMAx Instance
  862. * @param Channel This parameter can be one of the following values:
  863. * @arg @ref LL_DMA_CHANNEL_1
  864. * @arg @ref LL_DMA_CHANNEL_2
  865. * @arg @ref LL_DMA_CHANNEL_3
  866. * @arg @ref LL_DMA_CHANNEL_4
  867. * @arg @ref LL_DMA_CHANNEL_5
  868. * @arg @ref LL_DMA_CHANNEL_6
  869. * @arg @ref LL_DMA_CHANNEL_7
  870. * @param NbData Between Min_Data = 0 and Max_Data = 0x0000FFFF
  871. * @retval None
  872. */
  873. __STATIC_INLINE void LL_DMA_SetDataLength(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t NbData)
  874. {
  875. uint32_t dma_base_addr = (uint32_t)DMAx;
  876. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CNDTR,
  877. DMA_CNDTR_NDT, NbData);
  878. }
  879. /**
  880. * @brief Get Number of data to transfer.
  881. * @note Once the channel is enabled, the return value indicate the
  882. * remaining bytes to be transmitted.
  883. * @rmtoll CNDTR NDT LL_DMA_GetDataLength
  884. * @param DMAx DMAx Instance
  885. * @param Channel This parameter can be one of the following values:
  886. * @arg @ref LL_DMA_CHANNEL_1
  887. * @arg @ref LL_DMA_CHANNEL_2
  888. * @arg @ref LL_DMA_CHANNEL_3
  889. * @arg @ref LL_DMA_CHANNEL_4
  890. * @arg @ref LL_DMA_CHANNEL_5
  891. * @arg @ref LL_DMA_CHANNEL_6
  892. * @arg @ref LL_DMA_CHANNEL_7
  893. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  894. */
  895. __STATIC_INLINE uint32_t LL_DMA_GetDataLength(const DMA_TypeDef *DMAx, uint32_t Channel)
  896. {
  897. uint32_t dma_base_addr = (uint32_t)DMAx;
  898. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CNDTR,
  899. DMA_CNDTR_NDT));
  900. }
  901. /**
  902. * @brief Configure the Source and Destination addresses.
  903. * @note This API must not be called when the DMA channel is enabled.
  904. * @note Each peripheral using DMA provides an API to get directly the register address (LL_PPP_DMA_GetRegAddr).
  905. * @rmtoll CPAR PA LL_DMA_ConfigAddresses\n
  906. * CMAR MA LL_DMA_ConfigAddresses
  907. * @param DMAx DMAx Instance
  908. * @param Channel This parameter can be one of the following values:
  909. * @arg @ref LL_DMA_CHANNEL_1
  910. * @arg @ref LL_DMA_CHANNEL_2
  911. * @arg @ref LL_DMA_CHANNEL_3
  912. * @arg @ref LL_DMA_CHANNEL_4
  913. * @arg @ref LL_DMA_CHANNEL_5
  914. * @arg @ref LL_DMA_CHANNEL_6
  915. * @arg @ref LL_DMA_CHANNEL_7
  916. * @param SrcAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  917. * @param DstAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  918. * @param Direction This parameter can be one of the following values:
  919. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  920. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  921. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  922. * @retval None
  923. */
  924. __STATIC_INLINE void LL_DMA_ConfigAddresses(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress,
  925. uint32_t DstAddress, uint32_t Direction)
  926. {
  927. uint32_t dma_base_addr = (uint32_t)DMAx;
  928. /* Direction Memory to Periph */
  929. if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH)
  930. {
  931. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR, SrcAddress);
  932. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, DstAddress);
  933. }
  934. /* Direction Periph to Memory and Memory to Memory */
  935. else
  936. {
  937. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, SrcAddress);
  938. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR, DstAddress);
  939. }
  940. }
  941. /**
  942. * @brief Set the Memory address.
  943. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  944. * @note This API must not be called when the DMA channel is enabled.
  945. * @rmtoll CMAR MA LL_DMA_SetMemoryAddress
  946. * @param DMAx DMAx Instance
  947. * @param Channel This parameter can be one of the following values:
  948. * @arg @ref LL_DMA_CHANNEL_1
  949. * @arg @ref LL_DMA_CHANNEL_2
  950. * @arg @ref LL_DMA_CHANNEL_3
  951. * @arg @ref LL_DMA_CHANNEL_4
  952. * @arg @ref LL_DMA_CHANNEL_5
  953. * @arg @ref LL_DMA_CHANNEL_6
  954. * @arg @ref LL_DMA_CHANNEL_7
  955. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  956. * @retval None
  957. */
  958. __STATIC_INLINE void LL_DMA_SetMemoryAddress(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  959. {
  960. uint32_t dma_base_addr = (uint32_t)DMAx;
  961. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR, MemoryAddress);
  962. }
  963. /**
  964. * @brief Set the Peripheral address.
  965. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  966. * @note This API must not be called when the DMA channel is enabled.
  967. * @rmtoll CPAR PA LL_DMA_SetPeriphAddress
  968. * @param DMAx DMAx Instance
  969. * @param Channel This parameter can be one of the following values:
  970. * @arg @ref LL_DMA_CHANNEL_1
  971. * @arg @ref LL_DMA_CHANNEL_2
  972. * @arg @ref LL_DMA_CHANNEL_3
  973. * @arg @ref LL_DMA_CHANNEL_4
  974. * @arg @ref LL_DMA_CHANNEL_5
  975. * @arg @ref LL_DMA_CHANNEL_6
  976. * @arg @ref LL_DMA_CHANNEL_7
  977. * @param PeriphAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  978. * @retval None
  979. */
  980. __STATIC_INLINE void LL_DMA_SetPeriphAddress(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphAddress)
  981. {
  982. uint32_t dma_base_addr = (uint32_t)DMAx;
  983. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, PeriphAddress);
  984. }
  985. /**
  986. * @brief Get Memory address.
  987. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  988. * @rmtoll CMAR MA LL_DMA_GetMemoryAddress
  989. * @param DMAx DMAx Instance
  990. * @param Channel This parameter can be one of the following values:
  991. * @arg @ref LL_DMA_CHANNEL_1
  992. * @arg @ref LL_DMA_CHANNEL_2
  993. * @arg @ref LL_DMA_CHANNEL_3
  994. * @arg @ref LL_DMA_CHANNEL_4
  995. * @arg @ref LL_DMA_CHANNEL_5
  996. * @arg @ref LL_DMA_CHANNEL_6
  997. * @arg @ref LL_DMA_CHANNEL_7
  998. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  999. */
  1000. __STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(const DMA_TypeDef *DMAx, uint32_t Channel)
  1001. {
  1002. uint32_t dma_base_addr = (uint32_t)DMAx;
  1003. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR));
  1004. }
  1005. /**
  1006. * @brief Get Peripheral address.
  1007. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  1008. * @rmtoll CPAR PA LL_DMA_GetPeriphAddress
  1009. * @param DMAx DMAx Instance
  1010. * @param Channel This parameter can be one of the following values:
  1011. * @arg @ref LL_DMA_CHANNEL_1
  1012. * @arg @ref LL_DMA_CHANNEL_2
  1013. * @arg @ref LL_DMA_CHANNEL_3
  1014. * @arg @ref LL_DMA_CHANNEL_4
  1015. * @arg @ref LL_DMA_CHANNEL_5
  1016. * @arg @ref LL_DMA_CHANNEL_6
  1017. * @arg @ref LL_DMA_CHANNEL_7
  1018. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1019. */
  1020. __STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(const DMA_TypeDef *DMAx, uint32_t Channel)
  1021. {
  1022. uint32_t dma_base_addr = (uint32_t)DMAx;
  1023. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR));
  1024. }
  1025. /**
  1026. * @brief Set the Memory to Memory Source address.
  1027. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  1028. * @note This API must not be called when the DMA channel is enabled.
  1029. * @rmtoll CPAR PA LL_DMA_SetM2MSrcAddress
  1030. * @param DMAx DMAx Instance
  1031. * @param Channel This parameter can be one of the following values:
  1032. * @arg @ref LL_DMA_CHANNEL_1
  1033. * @arg @ref LL_DMA_CHANNEL_2
  1034. * @arg @ref LL_DMA_CHANNEL_3
  1035. * @arg @ref LL_DMA_CHANNEL_4
  1036. * @arg @ref LL_DMA_CHANNEL_5
  1037. * @arg @ref LL_DMA_CHANNEL_6
  1038. * @arg @ref LL_DMA_CHANNEL_7
  1039. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1040. * @retval None
  1041. */
  1042. __STATIC_INLINE void LL_DMA_SetM2MSrcAddress(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  1043. {
  1044. uint32_t dma_base_addr = (uint32_t)DMAx;
  1045. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, MemoryAddress);
  1046. }
  1047. /**
  1048. * @brief Set the Memory to Memory Destination address.
  1049. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  1050. * @note This API must not be called when the DMA channel is enabled.
  1051. * @rmtoll CMAR MA LL_DMA_SetM2MDstAddress
  1052. * @param DMAx DMAx Instance
  1053. * @param Channel This parameter can be one of the following values:
  1054. * @arg @ref LL_DMA_CHANNEL_1
  1055. * @arg @ref LL_DMA_CHANNEL_2
  1056. * @arg @ref LL_DMA_CHANNEL_3
  1057. * @arg @ref LL_DMA_CHANNEL_4
  1058. * @arg @ref LL_DMA_CHANNEL_5
  1059. * @arg @ref LL_DMA_CHANNEL_6
  1060. * @arg @ref LL_DMA_CHANNEL_7
  1061. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1062. * @retval None
  1063. */
  1064. __STATIC_INLINE void LL_DMA_SetM2MDstAddress(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  1065. {
  1066. uint32_t dma_base_addr = (uint32_t)DMAx;
  1067. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR, MemoryAddress);
  1068. }
  1069. /**
  1070. * @brief Get the Memory to Memory Source address.
  1071. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  1072. * @rmtoll CPAR PA LL_DMA_GetM2MSrcAddress
  1073. * @param DMAx DMAx Instance
  1074. * @param Channel This parameter can be one of the following values:
  1075. * @arg @ref LL_DMA_CHANNEL_1
  1076. * @arg @ref LL_DMA_CHANNEL_2
  1077. * @arg @ref LL_DMA_CHANNEL_3
  1078. * @arg @ref LL_DMA_CHANNEL_4
  1079. * @arg @ref LL_DMA_CHANNEL_5
  1080. * @arg @ref LL_DMA_CHANNEL_6
  1081. * @arg @ref LL_DMA_CHANNEL_7
  1082. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1083. */
  1084. __STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(const DMA_TypeDef *DMAx, uint32_t Channel)
  1085. {
  1086. uint32_t dma_base_addr = (uint32_t)DMAx;
  1087. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR));
  1088. }
  1089. /**
  1090. * @brief Get the Memory to Memory Destination address.
  1091. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  1092. * @rmtoll CMAR MA LL_DMA_GetM2MDstAddress
  1093. * @param DMAx DMAx Instance
  1094. * @param Channel This parameter can be one of the following values:
  1095. * @arg @ref LL_DMA_CHANNEL_1
  1096. * @arg @ref LL_DMA_CHANNEL_2
  1097. * @arg @ref LL_DMA_CHANNEL_3
  1098. * @arg @ref LL_DMA_CHANNEL_4
  1099. * @arg @ref LL_DMA_CHANNEL_5
  1100. * @arg @ref LL_DMA_CHANNEL_6
  1101. * @arg @ref LL_DMA_CHANNEL_7
  1102. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1103. */
  1104. __STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(const DMA_TypeDef *DMAx, uint32_t Channel)
  1105. {
  1106. uint32_t dma_base_addr = (uint32_t)DMAx;
  1107. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CMAR));
  1108. }
  1109. /**
  1110. * @brief Set DMA request for DMA Channels on DMAMUX Channel x.
  1111. * @note DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7.
  1112. * DMAMUX channel 7 to 11 are mapped to DMA2 channel 1 to 5 (**** only available on chip which support DMA2 ****).
  1113. * @rmtoll CxCR DMAREQ_ID LL_DMA_SetPeriphRequest
  1114. * @param DMAx DMAx Instance
  1115. * @param Channel This parameter can be one of the following values:
  1116. * @arg @ref LL_DMA_CHANNEL_1
  1117. * @arg @ref LL_DMA_CHANNEL_2
  1118. * @arg @ref LL_DMA_CHANNEL_3
  1119. * @arg @ref LL_DMA_CHANNEL_4
  1120. * @arg @ref LL_DMA_CHANNEL_5
  1121. * @arg @ref LL_DMA_CHANNEL_6
  1122. * @arg @ref LL_DMA_CHANNEL_7
  1123. * @param Request This parameter can be one of the following values:
  1124. * @arg @ref LL_DMAMUX_REQ_MEM2MEM
  1125. * @arg @ref LL_DMAMUX_REQ_GENERATOR0
  1126. * @arg @ref LL_DMAMUX_REQ_GENERATOR1
  1127. * @arg @ref LL_DMAMUX_REQ_GENERATOR2
  1128. * @arg @ref LL_DMAMUX_REQ_GENERATOR3
  1129. * @arg @ref LL_DMAMUX_REQ_ADC1
  1130. * @arg @ref LL_DMAMUX_REQ_AES_IN
  1131. * @arg @ref LL_DMAMUX_REQ_AES_OUT
  1132. * @arg @ref LL_DMAMUX_REQ_DAC1_CH1
  1133. * @arg @ref LL_DMAMUX_REQ_DAC1_CH2
  1134. * @arg @ref LL_DMAMUX_REQ_I2C1_RX
  1135. * @arg @ref LL_DMAMUX_REQ_I2C1_TX
  1136. * @arg @ref LL_DMAMUX_REQ_I2C2_RX
  1137. * @arg @ref LL_DMAMUX_REQ_I2C2_TX
  1138. * @arg @ref LL_DMAMUX_REQ_LPUART1_RX
  1139. * @arg @ref LL_DMAMUX_REQ_LPUART1_TX
  1140. * @arg @ref LL_DMAMUX_REQ_SPI1_RX
  1141. * @arg @ref LL_DMAMUX_REQ_SPI1_TX
  1142. * @arg @ref LL_DMAMUX_REQ_SPI2_RX
  1143. * @arg @ref LL_DMAMUX_REQ_SPI2_TX
  1144. * @arg @ref LL_DMAMUX_REQ_TIM1_CH1
  1145. * @arg @ref LL_DMAMUX_REQ_TIM1_CH2
  1146. * @arg @ref LL_DMAMUX_REQ_TIM1_CH3
  1147. * @arg @ref LL_DMAMUX_REQ_TIM1_CH4
  1148. * @arg @ref LL_DMAMUX_REQ_TIM1_TRIG_COM
  1149. * @arg @ref LL_DMAMUX_REQ_TIM1_UP
  1150. * @arg @ref LL_DMAMUX_REQ_TIM2_CH1
  1151. * @arg @ref LL_DMAMUX_REQ_TIM2_CH2
  1152. * @arg @ref LL_DMAMUX_REQ_TIM2_CH3
  1153. * @arg @ref LL_DMAMUX_REQ_TIM2_CH4
  1154. * @arg @ref LL_DMAMUX_REQ_TIM2_TRIG
  1155. * @arg @ref LL_DMAMUX_REQ_TIM2_UP
  1156. * @arg @ref LL_DMAMUX_REQ_TIM3_CH1
  1157. * @arg @ref LL_DMAMUX_REQ_TIM3_CH2
  1158. * @arg @ref LL_DMAMUX_REQ_TIM3_CH3
  1159. * @arg @ref LL_DMAMUX_REQ_TIM3_CH4
  1160. * @arg @ref LL_DMAMUX_REQ_TIM3_TRIG
  1161. * @arg @ref LL_DMAMUX_REQ_TIM3_UP
  1162. * @arg @ref LL_DMAMUX_REQ_TIM6_UP
  1163. * @arg @ref LL_DMAMUX_REQ_TIM7_UP
  1164. * @arg @ref LL_DMAMUX_REQ_TIM15_CH1
  1165. * @arg @ref LL_DMAMUX_REQ_TIM15_CH2
  1166. * @arg @ref LL_DMAMUX_REQ_TIM15_TRIG_COM
  1167. * @arg @ref LL_DMAMUX_REQ_TIM15_UP
  1168. * @arg @ref LL_DMAMUX_REQ_TIM16_CH1
  1169. * @arg @ref LL_DMAMUX_REQ_TIM16_COM
  1170. * @arg @ref LL_DMAMUX_REQ_TIM16_UP
  1171. * @arg @ref LL_DMAMUX_REQ_TIM17_CH1
  1172. * @arg @ref LL_DMAMUX_REQ_TIM17_COM
  1173. * @arg @ref LL_DMAMUX_REQ_TIM17_UP
  1174. * @arg @ref LL_DMAMUX_REQ_USART1_RX
  1175. * @arg @ref LL_DMAMUX_REQ_USART1_TX
  1176. * @arg @ref LL_DMAMUX_REQ_USART2_RX
  1177. * @arg @ref LL_DMAMUX_REQ_USART2_TX
  1178. * @arg @ref LL_DMAMUX_REQ_USART3_RX
  1179. * @arg @ref LL_DMAMUX_REQ_USART3_TX
  1180. * @arg @ref LL_DMAMUX_REQ_USART4_RX
  1181. * @arg @ref LL_DMAMUX_REQ_USART4_TX
  1182. * @arg @ref LL_DMAMUX_REQ_UCPD1_RX
  1183. * @arg @ref LL_DMAMUX_REQ_UCPD1_TX
  1184. * @arg @ref LL_DMAMUX_REQ_UCPD2_RX
  1185. * @arg @ref LL_DMAMUX_REQ_UCPD2_TX
  1186. * @retval None
  1187. */
  1188. __STATIC_INLINE void LL_DMA_SetPeriphRequest(const DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
  1189. {
  1190. uint32_t dmamux_ccr_offset = ((((uint32_t)DMAx ^ (uint32_t)DMA1) >> 10U) * 7U);
  1191. MODIFY_REG((DMAMUX1_Channel0 + Channel + dmamux_ccr_offset)->CCR, DMAMUX_CxCR_DMAREQ_ID, Request);
  1192. }
  1193. /**
  1194. * @brief Get DMA request for DMA Channels on DMAMUX Channel x.
  1195. * @note DMAMUX channel 0 to 6 are mapped to DMA1 channel 1 to 7.
  1196. * DMAMUX channel 7 to 11 are mapped to DMA2 channel 1 to 5 (**** only available on chip which support DMA2 ****).
  1197. * @rmtoll CxCR DMAREQ_ID LL_DMA_GetPeriphRequest
  1198. * @param DMAx DMAx Instance
  1199. * @param Channel This parameter can be one of the following values:
  1200. * @arg @ref LL_DMA_CHANNEL_1
  1201. * @arg @ref LL_DMA_CHANNEL_2
  1202. * @arg @ref LL_DMA_CHANNEL_3
  1203. * @arg @ref LL_DMA_CHANNEL_4
  1204. * @arg @ref LL_DMA_CHANNEL_5
  1205. * @arg @ref LL_DMA_CHANNEL_6
  1206. * @arg @ref LL_DMA_CHANNEL_7
  1207. * @retval Returned value can be one of the following values:
  1208. * @arg @ref LL_DMAMUX_REQ_MEM2MEM
  1209. * @arg @ref LL_DMAMUX_REQ_GENERATOR0
  1210. * @arg @ref LL_DMAMUX_REQ_GENERATOR1
  1211. * @arg @ref LL_DMAMUX_REQ_GENERATOR2
  1212. * @arg @ref LL_DMAMUX_REQ_GENERATOR3
  1213. * @arg @ref LL_DMAMUX_REQ_ADC1
  1214. * @arg @ref LL_DMAMUX_REQ_AES_IN
  1215. * @arg @ref LL_DMAMUX_REQ_AES_OUT
  1216. * @arg @ref LL_DMAMUX_REQ_DAC1_CH1
  1217. * @arg @ref LL_DMAMUX_REQ_DAC1_CH2
  1218. * @arg @ref LL_DMAMUX_REQ_I2C1_RX
  1219. * @arg @ref LL_DMAMUX_REQ_I2C1_TX
  1220. * @arg @ref LL_DMAMUX_REQ_I2C2_RX
  1221. * @arg @ref LL_DMAMUX_REQ_I2C2_TX
  1222. * @arg @ref LL_DMAMUX_REQ_LPUART1_RX
  1223. * @arg @ref LL_DMAMUX_REQ_LPUART1_TX
  1224. * @arg @ref LL_DMAMUX_REQ_SPI1_RX
  1225. * @arg @ref LL_DMAMUX_REQ_SPI1_TX
  1226. * @arg @ref LL_DMAMUX_REQ_SPI2_RX
  1227. * @arg @ref LL_DMAMUX_REQ_SPI2_TX
  1228. * @arg @ref LL_DMAMUX_REQ_TIM1_CH1
  1229. * @arg @ref LL_DMAMUX_REQ_TIM1_CH2
  1230. * @arg @ref LL_DMAMUX_REQ_TIM1_CH3
  1231. * @arg @ref LL_DMAMUX_REQ_TIM1_CH4
  1232. * @arg @ref LL_DMAMUX_REQ_TIM1_TRIG_COM
  1233. * @arg @ref LL_DMAMUX_REQ_TIM1_UP
  1234. * @arg @ref LL_DMAMUX_REQ_TIM2_CH1
  1235. * @arg @ref LL_DMAMUX_REQ_TIM2_CH2
  1236. * @arg @ref LL_DMAMUX_REQ_TIM2_CH3
  1237. * @arg @ref LL_DMAMUX_REQ_TIM2_CH4
  1238. * @arg @ref LL_DMAMUX_REQ_TIM2_TRIG
  1239. * @arg @ref LL_DMAMUX_REQ_TIM2_UP
  1240. * @arg @ref LL_DMAMUX_REQ_TIM3_CH1
  1241. * @arg @ref LL_DMAMUX_REQ_TIM3_CH2
  1242. * @arg @ref LL_DMAMUX_REQ_TIM3_CH3
  1243. * @arg @ref LL_DMAMUX_REQ_TIM3_CH4
  1244. * @arg @ref LL_DMAMUX_REQ_TIM3_TRIG
  1245. * @arg @ref LL_DMAMUX_REQ_TIM3_UP
  1246. * @arg @ref LL_DMAMUX_REQ_TIM6_UP
  1247. * @arg @ref LL_DMAMUX_REQ_TIM7_UP
  1248. * @arg @ref LL_DMAMUX_REQ_TIM15_CH1
  1249. * @arg @ref LL_DMAMUX_REQ_TIM15_CH2
  1250. * @arg @ref LL_DMAMUX_REQ_TIM15_TRIG_COM
  1251. * @arg @ref LL_DMAMUX_REQ_TIM15_UP
  1252. * @arg @ref LL_DMAMUX_REQ_TIM16_CH1
  1253. * @arg @ref LL_DMAMUX_REQ_TIM16_COM
  1254. * @arg @ref LL_DMAMUX_REQ_TIM16_UP
  1255. * @arg @ref LL_DMAMUX_REQ_TIM17_CH1
  1256. * @arg @ref LL_DMAMUX_REQ_TIM17_COM
  1257. * @arg @ref LL_DMAMUX_REQ_TIM17_UP
  1258. * @arg @ref LL_DMAMUX_REQ_USART1_RX
  1259. * @arg @ref LL_DMAMUX_REQ_USART1_TX
  1260. * @arg @ref LL_DMAMUX_REQ_USART2_RX
  1261. * @arg @ref LL_DMAMUX_REQ_USART2_TX
  1262. * @arg @ref LL_DMAMUX_REQ_USART3_RX
  1263. * @arg @ref LL_DMAMUX_REQ_USART3_TX
  1264. * @arg @ref LL_DMAMUX_REQ_USART4_RX
  1265. * @arg @ref LL_DMAMUX_REQ_USART4_TX
  1266. * @arg @ref LL_DMAMUX_REQ_UCPD1_RX
  1267. * @arg @ref LL_DMAMUX_REQ_UCPD1_TX
  1268. * @arg @ref LL_DMAMUX_REQ_UCPD2_RX
  1269. * @arg @ref LL_DMAMUX_REQ_UCPD2_TX
  1270. */
  1271. __STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(const DMA_TypeDef *DMAx, uint32_t Channel)
  1272. {
  1273. uint32_t dmamux_ccr_offset = ((((uint32_t)DMAx ^ (uint32_t)DMA1) >> 10U) * 7U);
  1274. return (READ_BIT((DMAMUX1_Channel0 + Channel + dmamux_ccr_offset)->CCR, DMAMUX_CxCR_DMAREQ_ID));
  1275. }
  1276. /**
  1277. * @}
  1278. */
  1279. /** @defgroup DMA_LL_EF_FLAG_Management FLAG_Management
  1280. * @{
  1281. */
  1282. /**
  1283. * @brief Get Channel 1 global interrupt flag.
  1284. * @rmtoll ISR GIF1 LL_DMA_IsActiveFlag_GI1
  1285. * @param DMAx DMAx Instance
  1286. * @retval State of bit (1 or 0).
  1287. */
  1288. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI1(const DMA_TypeDef *DMAx)
  1289. {
  1290. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF1) == (DMA_ISR_GIF1)) ? 1UL : 0UL);
  1291. }
  1292. /**
  1293. * @brief Get Channel 2 global interrupt flag.
  1294. * @rmtoll ISR GIF2 LL_DMA_IsActiveFlag_GI2
  1295. * @param DMAx DMAx Instance
  1296. * @retval State of bit (1 or 0).
  1297. */
  1298. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI2(const DMA_TypeDef *DMAx)
  1299. {
  1300. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF2) == (DMA_ISR_GIF2)) ? 1UL : 0UL);
  1301. }
  1302. /**
  1303. * @brief Get Channel 3 global interrupt flag.
  1304. * @rmtoll ISR GIF3 LL_DMA_IsActiveFlag_GI3
  1305. * @param DMAx DMAx Instance
  1306. * @retval State of bit (1 or 0).
  1307. */
  1308. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI3(const DMA_TypeDef *DMAx)
  1309. {
  1310. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF3) == (DMA_ISR_GIF3)) ? 1UL : 0UL);
  1311. }
  1312. /**
  1313. * @brief Get Channel 4 global interrupt flag.
  1314. * @rmtoll ISR GIF4 LL_DMA_IsActiveFlag_GI4
  1315. * @param DMAx DMAx Instance
  1316. * @retval State of bit (1 or 0).
  1317. */
  1318. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI4(const DMA_TypeDef *DMAx)
  1319. {
  1320. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF4) == (DMA_ISR_GIF4)) ? 1UL : 0UL);
  1321. }
  1322. /**
  1323. * @brief Get Channel 5 global interrupt flag.
  1324. * @rmtoll ISR GIF5 LL_DMA_IsActiveFlag_GI5
  1325. * @param DMAx DMAx Instance
  1326. * @retval State of bit (1 or 0).
  1327. */
  1328. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI5(const DMA_TypeDef *DMAx)
  1329. {
  1330. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF5) == (DMA_ISR_GIF5)) ? 1UL : 0UL);
  1331. }
  1332. #if defined(DMA1_Channel6)
  1333. /**
  1334. * @brief Get Channel 6 global interrupt flag.
  1335. * @rmtoll ISR GIF6 LL_DMA_IsActiveFlag_GI6
  1336. * @param DMAx DMAx Instance
  1337. * @retval State of bit (1 or 0).
  1338. */
  1339. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI6(const DMA_TypeDef *DMAx)
  1340. {
  1341. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF6) == (DMA_ISR_GIF6)) ? 1UL : 0UL);
  1342. }
  1343. #endif /* DMA1_Channel6 */
  1344. #if defined(DMA1_Channel7)
  1345. /**
  1346. * @brief Get Channel 7 global interrupt flag.
  1347. * @rmtoll ISR GIF7 LL_DMA_IsActiveFlag_GI7
  1348. * @param DMAx DMAx Instance
  1349. * @retval State of bit (1 or 0).
  1350. */
  1351. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI7(const DMA_TypeDef *DMAx)
  1352. {
  1353. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF7) == (DMA_ISR_GIF7)) ? 1UL : 0UL);
  1354. }
  1355. #endif /* DMA1_Channel7 */
  1356. /**
  1357. * @brief Get Channel 1 transfer complete flag.
  1358. * @rmtoll ISR TCIF1 LL_DMA_IsActiveFlag_TC1
  1359. * @param DMAx DMAx Instance
  1360. * @retval State of bit (1 or 0).
  1361. */
  1362. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC1(const DMA_TypeDef *DMAx)
  1363. {
  1364. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF1) == (DMA_ISR_TCIF1)) ? 1UL : 0UL);
  1365. }
  1366. /**
  1367. * @brief Get Channel 2 transfer complete flag.
  1368. * @rmtoll ISR TCIF2 LL_DMA_IsActiveFlag_TC2
  1369. * @param DMAx DMAx Instance
  1370. * @retval State of bit (1 or 0).
  1371. */
  1372. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC2(const DMA_TypeDef *DMAx)
  1373. {
  1374. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF2) == (DMA_ISR_TCIF2)) ? 1UL : 0UL);
  1375. }
  1376. /**
  1377. * @brief Get Channel 3 transfer complete flag.
  1378. * @rmtoll ISR TCIF3 LL_DMA_IsActiveFlag_TC3
  1379. * @param DMAx DMAx Instance
  1380. * @retval State of bit (1 or 0).
  1381. */
  1382. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC3(const DMA_TypeDef *DMAx)
  1383. {
  1384. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF3) == (DMA_ISR_TCIF3)) ? 1UL : 0UL);
  1385. }
  1386. /**
  1387. * @brief Get Channel 4 transfer complete flag.
  1388. * @rmtoll ISR TCIF4 LL_DMA_IsActiveFlag_TC4
  1389. * @param DMAx DMAx Instance
  1390. * @retval State of bit (1 or 0).
  1391. */
  1392. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC4(const DMA_TypeDef *DMAx)
  1393. {
  1394. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF4) == (DMA_ISR_TCIF4)) ? 1UL : 0UL);
  1395. }
  1396. /**
  1397. * @brief Get Channel 5 transfer complete flag.
  1398. * @rmtoll ISR TCIF5 LL_DMA_IsActiveFlag_TC5
  1399. * @param DMAx DMAx Instance
  1400. * @retval State of bit (1 or 0).
  1401. */
  1402. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC5(const DMA_TypeDef *DMAx)
  1403. {
  1404. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF5) == (DMA_ISR_TCIF5)) ? 1UL : 0UL);
  1405. }
  1406. #if defined(DMA1_Channel6)
  1407. /**
  1408. * @brief Get Channel 6 transfer complete flag.
  1409. * @rmtoll ISR TCIF6 LL_DMA_IsActiveFlag_TC6
  1410. * @param DMAx DMAx Instance
  1411. * @retval State of bit (1 or 0).
  1412. */
  1413. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC6(const DMA_TypeDef *DMAx)
  1414. {
  1415. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF6) == (DMA_ISR_TCIF6)) ? 1UL : 0UL);
  1416. }
  1417. #endif /* DMA1_Channel6 */
  1418. #if defined(DMA1_Channel7)
  1419. /**
  1420. * @brief Get Channel 7 transfer complete flag.
  1421. * @rmtoll ISR TCIF7 LL_DMA_IsActiveFlag_TC7
  1422. * @param DMAx DMAx Instance
  1423. * @retval State of bit (1 or 0).
  1424. */
  1425. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC7(const DMA_TypeDef *DMAx)
  1426. {
  1427. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF7) == (DMA_ISR_TCIF7)) ? 1UL : 0UL);
  1428. }
  1429. #endif /* DMA1_Channel7 */
  1430. /**
  1431. * @brief Get Channel 1 half transfer flag.
  1432. * @rmtoll ISR HTIF1 LL_DMA_IsActiveFlag_HT1
  1433. * @param DMAx DMAx Instance
  1434. * @retval State of bit (1 or 0).
  1435. */
  1436. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT1(const DMA_TypeDef *DMAx)
  1437. {
  1438. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF1) == (DMA_ISR_HTIF1)) ? 1UL : 0UL);
  1439. }
  1440. /**
  1441. * @brief Get Channel 2 half transfer flag.
  1442. * @rmtoll ISR HTIF2 LL_DMA_IsActiveFlag_HT2
  1443. * @param DMAx DMAx Instance
  1444. * @retval State of bit (1 or 0).
  1445. */
  1446. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT2(const DMA_TypeDef *DMAx)
  1447. {
  1448. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF2) == (DMA_ISR_HTIF2)) ? 1UL : 0UL);
  1449. }
  1450. /**
  1451. * @brief Get Channel 3 half transfer flag.
  1452. * @rmtoll ISR HTIF3 LL_DMA_IsActiveFlag_HT3
  1453. * @param DMAx DMAx Instance
  1454. * @retval State of bit (1 or 0).
  1455. */
  1456. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT3(const DMA_TypeDef *DMAx)
  1457. {
  1458. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF3) == (DMA_ISR_HTIF3)) ? 1UL : 0UL);
  1459. }
  1460. /**
  1461. * @brief Get Channel 4 half transfer flag.
  1462. * @rmtoll ISR HTIF4 LL_DMA_IsActiveFlag_HT4
  1463. * @param DMAx DMAx Instance
  1464. * @retval State of bit (1 or 0).
  1465. */
  1466. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT4(const DMA_TypeDef *DMAx)
  1467. {
  1468. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF4) == (DMA_ISR_HTIF4)) ? 1UL : 0UL);
  1469. }
  1470. /**
  1471. * @brief Get Channel 5 half transfer flag.
  1472. * @rmtoll ISR HTIF5 LL_DMA_IsActiveFlag_HT5
  1473. * @param DMAx DMAx Instance
  1474. * @retval State of bit (1 or 0).
  1475. */
  1476. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT5(const DMA_TypeDef *DMAx)
  1477. {
  1478. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF5) == (DMA_ISR_HTIF5)) ? 1UL : 0UL);
  1479. }
  1480. #if defined(DMA1_Channel6)
  1481. /**
  1482. * @brief Get Channel 6 half transfer flag.
  1483. * @rmtoll ISR HTIF6 LL_DMA_IsActiveFlag_HT6
  1484. * @param DMAx DMAx Instance
  1485. * @retval State of bit (1 or 0).
  1486. */
  1487. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT6(const DMA_TypeDef *DMAx)
  1488. {
  1489. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF6) == (DMA_ISR_HTIF6)) ? 1UL : 0UL);
  1490. }
  1491. #endif /* DMA1_Channel6 */
  1492. #if defined(DMA1_Channel7)
  1493. /**
  1494. * @brief Get Channel 7 half transfer flag.
  1495. * @rmtoll ISR HTIF7 LL_DMA_IsActiveFlag_HT7
  1496. * @param DMAx DMAx Instance
  1497. * @retval State of bit (1 or 0).
  1498. */
  1499. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT7(const DMA_TypeDef *DMAx)
  1500. {
  1501. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF7) == (DMA_ISR_HTIF7)) ? 1UL : 0UL);
  1502. }
  1503. #endif /* DMA1_Channel7 */
  1504. /**
  1505. * @brief Get Channel 1 transfer error flag.
  1506. * @rmtoll ISR TEIF1 LL_DMA_IsActiveFlag_TE1
  1507. * @param DMAx DMAx Instance
  1508. * @retval State of bit (1 or 0).
  1509. */
  1510. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE1(const DMA_TypeDef *DMAx)
  1511. {
  1512. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF1) == (DMA_ISR_TEIF1)) ? 1UL : 0UL);
  1513. }
  1514. /**
  1515. * @brief Get Channel 2 transfer error flag.
  1516. * @rmtoll ISR TEIF2 LL_DMA_IsActiveFlag_TE2
  1517. * @param DMAx DMAx Instance
  1518. * @retval State of bit (1 or 0).
  1519. */
  1520. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE2(const DMA_TypeDef *DMAx)
  1521. {
  1522. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF2) == (DMA_ISR_TEIF2)) ? 1UL : 0UL);
  1523. }
  1524. /**
  1525. * @brief Get Channel 3 transfer error flag.
  1526. * @rmtoll ISR TEIF3 LL_DMA_IsActiveFlag_TE3
  1527. * @param DMAx DMAx Instance
  1528. * @retval State of bit (1 or 0).
  1529. */
  1530. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE3(const DMA_TypeDef *DMAx)
  1531. {
  1532. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF3) == (DMA_ISR_TEIF3)) ? 1UL : 0UL);
  1533. }
  1534. /**
  1535. * @brief Get Channel 4 transfer error flag.
  1536. * @rmtoll ISR TEIF4 LL_DMA_IsActiveFlag_TE4
  1537. * @param DMAx DMAx Instance
  1538. * @retval State of bit (1 or 0).
  1539. */
  1540. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE4(const DMA_TypeDef *DMAx)
  1541. {
  1542. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF4) == (DMA_ISR_TEIF4)) ? 1UL : 0UL);
  1543. }
  1544. /**
  1545. * @brief Get Channel 5 transfer error flag.
  1546. * @rmtoll ISR TEIF5 LL_DMA_IsActiveFlag_TE5
  1547. * @param DMAx DMAx Instance
  1548. * @retval State of bit (1 or 0).
  1549. */
  1550. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE5(const DMA_TypeDef *DMAx)
  1551. {
  1552. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF5) == (DMA_ISR_TEIF5)) ? 1UL : 0UL);
  1553. }
  1554. #if defined(DMA1_Channel6)
  1555. /**
  1556. * @brief Get Channel 6 transfer error flag.
  1557. * @rmtoll ISR TEIF6 LL_DMA_IsActiveFlag_TE6
  1558. * @param DMAx DMAx Instance
  1559. * @retval State of bit (1 or 0).
  1560. */
  1561. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE6(const DMA_TypeDef *DMAx)
  1562. {
  1563. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF6) == (DMA_ISR_TEIF6)) ? 1UL : 0UL);
  1564. }
  1565. #endif /* DMA1_Channel6 */
  1566. #if defined(DMA1_Channel7)
  1567. /**
  1568. * @brief Get Channel 7 transfer error flag.
  1569. * @rmtoll ISR TEIF7 LL_DMA_IsActiveFlag_TE7
  1570. * @param DMAx DMAx Instance
  1571. * @retval State of bit (1 or 0).
  1572. */
  1573. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE7(const DMA_TypeDef *DMAx)
  1574. {
  1575. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF7) == (DMA_ISR_TEIF7)) ? 1UL : 0UL);
  1576. }
  1577. #endif /* DMA1_Channel7 */
  1578. /**
  1579. * @brief Clear Channel 1 global interrupt flag.
  1580. * @note Do not Clear Channel 1 global interrupt flag when the channel in ON.
  1581. Instead clear specific flags transfer complete, half transfer & transfer
  1582. error flag with LL_DMA_ClearFlag_TC1, LL_DMA_ClearFlag_HT1,
  1583. LL_DMA_ClearFlag_TE1. bug id 2.4.1 in Product Errata Sheet.
  1584. * @rmtoll IFCR CGIF1 LL_DMA_ClearFlag_GI1
  1585. * @param DMAx DMAx Instance
  1586. * @retval None
  1587. */
  1588. __STATIC_INLINE void LL_DMA_ClearFlag_GI1(DMA_TypeDef *DMAx)
  1589. {
  1590. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF1);
  1591. }
  1592. /**
  1593. * @brief Clear Channel 2 global interrupt flag.
  1594. * @note Do not Clear Channel 2 global interrupt flag when the channel in ON.
  1595. Instead clear specific flags transfer complete, half transfer & transfer
  1596. error flag with LL_DMA_ClearFlag_TC2, LL_DMA_ClearFlag_HT2,
  1597. LL_DMA_ClearFlag_TE2. bug id 2.4.1 in Product Errata Sheet.
  1598. * @rmtoll IFCR CGIF2 LL_DMA_ClearFlag_GI2
  1599. * @param DMAx DMAx Instance
  1600. * @retval None
  1601. */
  1602. __STATIC_INLINE void LL_DMA_ClearFlag_GI2(DMA_TypeDef *DMAx)
  1603. {
  1604. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF2);
  1605. }
  1606. /**
  1607. * @brief Clear Channel 3 global interrupt flag.
  1608. * @note Do not Clear Channel 3 global interrupt flag when the channel in ON.
  1609. Instead clear specific flags transfer complete, half transfer & transfer
  1610. error flag with LL_DMA_ClearFlag_TC3, LL_DMA_ClearFlag_HT3,
  1611. LL_DMA_ClearFlag_TE3. bug id 2.4.1 in Product Errata Sheet.
  1612. * @rmtoll IFCR CGIF3 LL_DMA_ClearFlag_GI3
  1613. * @param DMAx DMAx Instance
  1614. * @retval None
  1615. */
  1616. __STATIC_INLINE void LL_DMA_ClearFlag_GI3(DMA_TypeDef *DMAx)
  1617. {
  1618. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF3);
  1619. }
  1620. /**
  1621. * @brief Clear Channel 4 global interrupt flag.
  1622. * @note Do not Clear Channel 4 global interrupt flag when the channel in ON.
  1623. Instead clear specific flags transfer complete, half transfer & transfer
  1624. error flag with LL_DMA_ClearFlag_TC4, LL_DMA_ClearFlag_HT4,
  1625. LL_DMA_ClearFlag_TE4. bug id 2.4.1 in Product Errata Sheet.
  1626. * @rmtoll IFCR CGIF4 LL_DMA_ClearFlag_GI4
  1627. * @param DMAx DMAx Instance
  1628. * @retval None
  1629. */
  1630. __STATIC_INLINE void LL_DMA_ClearFlag_GI4(DMA_TypeDef *DMAx)
  1631. {
  1632. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF4);
  1633. }
  1634. /**
  1635. * @brief Clear Channel 5 global interrupt flag.
  1636. * @note Do not Clear Channel 5 global interrupt flag when the channel in ON.
  1637. Instead clear specific flags transfer complete, half transfer & transfer
  1638. error flag with LL_DMA_ClearFlag_TC5, LL_DMA_ClearFlag_HT5,
  1639. LL_DMA_ClearFlag_TE5. bug id 2.4.1 in Product Errata Sheet.
  1640. * @rmtoll IFCR CGIF5 LL_DMA_ClearFlag_GI5
  1641. * @param DMAx DMAx Instance
  1642. * @retval None
  1643. */
  1644. __STATIC_INLINE void LL_DMA_ClearFlag_GI5(DMA_TypeDef *DMAx)
  1645. {
  1646. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF5);
  1647. }
  1648. #if defined(DMA1_Channel6)
  1649. /**
  1650. * @brief Clear Channel 6 global interrupt flag.
  1651. * @note Do not Clear Channel 6 global interrupt flag when the channel in ON.
  1652. Instead clear specific flags transfer complete, half transfer & transfer
  1653. error flag with LL_DMA_ClearFlag_TC6, LL_DMA_ClearFlag_HT6,
  1654. LL_DMA_ClearFlag_TE6. bug id 2.4.1 in Product Errata Sheet.
  1655. * @rmtoll IFCR CGIF6 LL_DMA_ClearFlag_GI6
  1656. * @param DMAx DMAx Instance
  1657. * @retval None
  1658. */
  1659. __STATIC_INLINE void LL_DMA_ClearFlag_GI6(DMA_TypeDef *DMAx)
  1660. {
  1661. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF6);
  1662. }
  1663. #endif /* DMA1_Channel6 */
  1664. #if defined(DMA1_Channel7)
  1665. /**
  1666. * @brief Clear Channel 7 global interrupt flag.
  1667. * @note Do not Clear Channel 7 global interrupt flag when the channel in ON.
  1668. Instead clear specific flags transfer complete, half transfer & transfer
  1669. error flag with LL_DMA_ClearFlag_TC7, LL_DMA_ClearFlag_HT7,
  1670. LL_DMA_ClearFlag_TE7. bug id 2.4.1 in Product Errata Sheet.
  1671. * @rmtoll IFCR CGIF7 LL_DMA_ClearFlag_GI7
  1672. * @param DMAx DMAx Instance
  1673. * @retval None
  1674. */
  1675. __STATIC_INLINE void LL_DMA_ClearFlag_GI7(DMA_TypeDef *DMAx)
  1676. {
  1677. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF7);
  1678. }
  1679. #endif /* DMA1_Channel7 */
  1680. /**
  1681. * @brief Clear Channel 1 transfer complete flag.
  1682. * @rmtoll IFCR CTCIF1 LL_DMA_ClearFlag_TC1
  1683. * @param DMAx DMAx Instance
  1684. * @retval None
  1685. */
  1686. __STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx)
  1687. {
  1688. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF1);
  1689. }
  1690. /**
  1691. * @brief Clear Channel 2 transfer complete flag.
  1692. * @rmtoll IFCR CTCIF2 LL_DMA_ClearFlag_TC2
  1693. * @param DMAx DMAx Instance
  1694. * @retval None
  1695. */
  1696. __STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx)
  1697. {
  1698. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF2);
  1699. }
  1700. /**
  1701. * @brief Clear Channel 3 transfer complete flag.
  1702. * @rmtoll IFCR CTCIF3 LL_DMA_ClearFlag_TC3
  1703. * @param DMAx DMAx Instance
  1704. * @retval None
  1705. */
  1706. __STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx)
  1707. {
  1708. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF3);
  1709. }
  1710. /**
  1711. * @brief Clear Channel 4 transfer complete flag.
  1712. * @rmtoll IFCR CTCIF4 LL_DMA_ClearFlag_TC4
  1713. * @param DMAx DMAx Instance
  1714. * @retval None
  1715. */
  1716. __STATIC_INLINE void LL_DMA_ClearFlag_TC4(DMA_TypeDef *DMAx)
  1717. {
  1718. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF4);
  1719. }
  1720. /**
  1721. * @brief Clear Channel 5 transfer complete flag.
  1722. * @rmtoll IFCR CTCIF5 LL_DMA_ClearFlag_TC5
  1723. * @param DMAx DMAx Instance
  1724. * @retval None
  1725. */
  1726. __STATIC_INLINE void LL_DMA_ClearFlag_TC5(DMA_TypeDef *DMAx)
  1727. {
  1728. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF5);
  1729. }
  1730. #if defined(DMA1_Channel6)
  1731. /**
  1732. * @brief Clear Channel 6 transfer complete flag.
  1733. * @rmtoll IFCR CTCIF6 LL_DMA_ClearFlag_TC6
  1734. * @param DMAx DMAx Instance
  1735. * @retval None
  1736. */
  1737. __STATIC_INLINE void LL_DMA_ClearFlag_TC6(DMA_TypeDef *DMAx)
  1738. {
  1739. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF6);
  1740. }
  1741. #endif /* DMA1_Channel6 */
  1742. #if defined(DMA1_Channel7)
  1743. /**
  1744. * @brief Clear Channel 7 transfer complete flag.
  1745. * @rmtoll IFCR CTCIF7 LL_DMA_ClearFlag_TC7
  1746. * @param DMAx DMAx Instance
  1747. * @retval None
  1748. */
  1749. __STATIC_INLINE void LL_DMA_ClearFlag_TC7(DMA_TypeDef *DMAx)
  1750. {
  1751. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF7);
  1752. }
  1753. #endif /* DMA1_Channel7 */
  1754. /**
  1755. * @brief Clear Channel 1 half transfer flag.
  1756. * @rmtoll IFCR CHTIF1 LL_DMA_ClearFlag_HT1
  1757. * @param DMAx DMAx Instance
  1758. * @retval None
  1759. */
  1760. __STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx)
  1761. {
  1762. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF1);
  1763. }
  1764. /**
  1765. * @brief Clear Channel 2 half transfer flag.
  1766. * @rmtoll IFCR CHTIF2 LL_DMA_ClearFlag_HT2
  1767. * @param DMAx DMAx Instance
  1768. * @retval None
  1769. */
  1770. __STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx)
  1771. {
  1772. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF2);
  1773. }
  1774. /**
  1775. * @brief Clear Channel 3 half transfer flag.
  1776. * @rmtoll IFCR CHTIF3 LL_DMA_ClearFlag_HT3
  1777. * @param DMAx DMAx Instance
  1778. * @retval None
  1779. */
  1780. __STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx)
  1781. {
  1782. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF3);
  1783. }
  1784. /**
  1785. * @brief Clear Channel 4 half transfer flag.
  1786. * @rmtoll IFCR CHTIF4 LL_DMA_ClearFlag_HT4
  1787. * @param DMAx DMAx Instance
  1788. * @retval None
  1789. */
  1790. __STATIC_INLINE void LL_DMA_ClearFlag_HT4(DMA_TypeDef *DMAx)
  1791. {
  1792. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF4);
  1793. }
  1794. /**
  1795. * @brief Clear Channel 5 half transfer flag.
  1796. * @rmtoll IFCR CHTIF5 LL_DMA_ClearFlag_HT5
  1797. * @param DMAx DMAx Instance
  1798. * @retval None
  1799. */
  1800. __STATIC_INLINE void LL_DMA_ClearFlag_HT5(DMA_TypeDef *DMAx)
  1801. {
  1802. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF5);
  1803. }
  1804. #if defined(DMA1_Channel6)
  1805. /**
  1806. * @brief Clear Channel 6 half transfer flag.
  1807. * @rmtoll IFCR CHTIF6 LL_DMA_ClearFlag_HT6
  1808. * @param DMAx DMAx Instance
  1809. * @retval None
  1810. */
  1811. __STATIC_INLINE void LL_DMA_ClearFlag_HT6(DMA_TypeDef *DMAx)
  1812. {
  1813. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF6);
  1814. }
  1815. #endif /* DMA1_Channel6 */
  1816. #if defined(DMA1_Channel7)
  1817. /**
  1818. * @brief Clear Channel 7 half transfer flag.
  1819. * @rmtoll IFCR CHTIF7 LL_DMA_ClearFlag_HT7
  1820. * @param DMAx DMAx Instance
  1821. * @retval None
  1822. */
  1823. __STATIC_INLINE void LL_DMA_ClearFlag_HT7(DMA_TypeDef *DMAx)
  1824. {
  1825. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF7);
  1826. }
  1827. #endif /* DMA1_Channel7 */
  1828. /**
  1829. * @brief Clear Channel 1 transfer error flag.
  1830. * @rmtoll IFCR CTEIF1 LL_DMA_ClearFlag_TE1
  1831. * @param DMAx DMAx Instance
  1832. * @retval None
  1833. */
  1834. __STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx)
  1835. {
  1836. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF1);
  1837. }
  1838. /**
  1839. * @brief Clear Channel 2 transfer error flag.
  1840. * @rmtoll IFCR CTEIF2 LL_DMA_ClearFlag_TE2
  1841. * @param DMAx DMAx Instance
  1842. * @retval None
  1843. */
  1844. __STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx)
  1845. {
  1846. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF2);
  1847. }
  1848. /**
  1849. * @brief Clear Channel 3 transfer error flag.
  1850. * @rmtoll IFCR CTEIF3 LL_DMA_ClearFlag_TE3
  1851. * @param DMAx DMAx Instance
  1852. * @retval None
  1853. */
  1854. __STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx)
  1855. {
  1856. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF3);
  1857. }
  1858. /**
  1859. * @brief Clear Channel 4 transfer error flag.
  1860. * @rmtoll IFCR CTEIF4 LL_DMA_ClearFlag_TE4
  1861. * @param DMAx DMAx Instance
  1862. * @retval None
  1863. */
  1864. __STATIC_INLINE void LL_DMA_ClearFlag_TE4(DMA_TypeDef *DMAx)
  1865. {
  1866. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF4);
  1867. }
  1868. /**
  1869. * @brief Clear Channel 5 transfer error flag.
  1870. * @rmtoll IFCR CTEIF5 LL_DMA_ClearFlag_TE5
  1871. * @param DMAx DMAx Instance
  1872. * @retval None
  1873. */
  1874. __STATIC_INLINE void LL_DMA_ClearFlag_TE5(DMA_TypeDef *DMAx)
  1875. {
  1876. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF5);
  1877. }
  1878. #if defined(DMA1_Channel6)
  1879. /**
  1880. * @brief Clear Channel 6 transfer error flag.
  1881. * @rmtoll IFCR CTEIF6 LL_DMA_ClearFlag_TE6
  1882. * @param DMAx DMAx Instance
  1883. * @retval None
  1884. */
  1885. __STATIC_INLINE void LL_DMA_ClearFlag_TE6(DMA_TypeDef *DMAx)
  1886. {
  1887. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF6);
  1888. }
  1889. #endif /* DMA1_Channel6 */
  1890. #if defined(DMA1_Channel7)
  1891. /**
  1892. * @brief Clear Channel 7 transfer error flag.
  1893. * @rmtoll IFCR CTEIF7 LL_DMA_ClearFlag_TE7
  1894. * @param DMAx DMAx Instance
  1895. * @retval None
  1896. */
  1897. __STATIC_INLINE void LL_DMA_ClearFlag_TE7(DMA_TypeDef *DMAx)
  1898. {
  1899. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF7);
  1900. }
  1901. #endif /* DMA1_Channel7 */
  1902. /**
  1903. * @}
  1904. */
  1905. /** @defgroup DMA_LL_EF_IT_Management IT_Management
  1906. * @{
  1907. */
  1908. /**
  1909. * @brief Enable Transfer complete interrupt.
  1910. * @rmtoll CCR TCIE LL_DMA_EnableIT_TC
  1911. * @param DMAx DMAx Instance
  1912. * @param Channel This parameter can be one of the following values:
  1913. * @arg @ref LL_DMA_CHANNEL_1
  1914. * @arg @ref LL_DMA_CHANNEL_2
  1915. * @arg @ref LL_DMA_CHANNEL_3
  1916. * @arg @ref LL_DMA_CHANNEL_4
  1917. * @arg @ref LL_DMA_CHANNEL_5
  1918. * @arg @ref LL_DMA_CHANNEL_6
  1919. * @arg @ref LL_DMA_CHANNEL_7
  1920. * @retval None
  1921. */
  1922. __STATIC_INLINE void LL_DMA_EnableIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
  1923. {
  1924. uint32_t dma_base_addr = (uint32_t)DMAx;
  1925. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
  1926. }
  1927. /**
  1928. * @brief Enable Half transfer interrupt.
  1929. * @rmtoll CCR HTIE LL_DMA_EnableIT_HT
  1930. * @param DMAx DMAx Instance
  1931. * @param Channel This parameter can be one of the following values:
  1932. * @arg @ref LL_DMA_CHANNEL_1
  1933. * @arg @ref LL_DMA_CHANNEL_2
  1934. * @arg @ref LL_DMA_CHANNEL_3
  1935. * @arg @ref LL_DMA_CHANNEL_4
  1936. * @arg @ref LL_DMA_CHANNEL_5
  1937. * @arg @ref LL_DMA_CHANNEL_6
  1938. * @arg @ref LL_DMA_CHANNEL_7
  1939. * @retval None
  1940. */
  1941. __STATIC_INLINE void LL_DMA_EnableIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
  1942. {
  1943. uint32_t dma_base_addr = (uint32_t)DMAx;
  1944. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
  1945. }
  1946. /**
  1947. * @brief Enable Transfer error interrupt.
  1948. * @rmtoll CCR TEIE LL_DMA_EnableIT_TE
  1949. * @param DMAx DMAx Instance
  1950. * @param Channel This parameter can be one of the following values:
  1951. * @arg @ref LL_DMA_CHANNEL_1
  1952. * @arg @ref LL_DMA_CHANNEL_2
  1953. * @arg @ref LL_DMA_CHANNEL_3
  1954. * @arg @ref LL_DMA_CHANNEL_4
  1955. * @arg @ref LL_DMA_CHANNEL_5
  1956. * @arg @ref LL_DMA_CHANNEL_6
  1957. * @arg @ref LL_DMA_CHANNEL_7
  1958. * @retval None
  1959. */
  1960. __STATIC_INLINE void LL_DMA_EnableIT_TE(const DMA_TypeDef *DMAx, uint32_t Channel)
  1961. {
  1962. uint32_t dma_base_addr = (uint32_t)DMAx;
  1963. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TEIE);
  1964. }
  1965. /**
  1966. * @brief Disable Transfer complete interrupt.
  1967. * @rmtoll CCR TCIE LL_DMA_DisableIT_TC
  1968. * @param DMAx DMAx Instance
  1969. * @param Channel This parameter can be one of the following values:
  1970. * @arg @ref LL_DMA_CHANNEL_1
  1971. * @arg @ref LL_DMA_CHANNEL_2
  1972. * @arg @ref LL_DMA_CHANNEL_3
  1973. * @arg @ref LL_DMA_CHANNEL_4
  1974. * @arg @ref LL_DMA_CHANNEL_5
  1975. * @arg @ref LL_DMA_CHANNEL_6
  1976. * @arg @ref LL_DMA_CHANNEL_7
  1977. * @retval None
  1978. */
  1979. __STATIC_INLINE void LL_DMA_DisableIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
  1980. {
  1981. uint32_t dma_base_addr = (uint32_t)DMAx;
  1982. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
  1983. }
  1984. /**
  1985. * @brief Disable Half transfer interrupt.
  1986. * @rmtoll CCR HTIE LL_DMA_DisableIT_HT
  1987. * @param DMAx DMAx Instance
  1988. * @param Channel This parameter can be one of the following values:
  1989. * @arg @ref LL_DMA_CHANNEL_1
  1990. * @arg @ref LL_DMA_CHANNEL_2
  1991. * @arg @ref LL_DMA_CHANNEL_3
  1992. * @arg @ref LL_DMA_CHANNEL_4
  1993. * @arg @ref LL_DMA_CHANNEL_5
  1994. * @arg @ref LL_DMA_CHANNEL_6
  1995. * @arg @ref LL_DMA_CHANNEL_7
  1996. * @retval None
  1997. */
  1998. __STATIC_INLINE void LL_DMA_DisableIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
  1999. {
  2000. uint32_t dma_base_addr = (uint32_t)DMAx;
  2001. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
  2002. }
  2003. /**
  2004. * @brief Disable Transfer error interrupt.
  2005. * @rmtoll CCR TEIE LL_DMA_DisableIT_TE
  2006. * @param DMAx DMAx Instance
  2007. * @param Channel This parameter can be one of the following values:
  2008. * @arg @ref LL_DMA_CHANNEL_1
  2009. * @arg @ref LL_DMA_CHANNEL_2
  2010. * @arg @ref LL_DMA_CHANNEL_3
  2011. * @arg @ref LL_DMA_CHANNEL_4
  2012. * @arg @ref LL_DMA_CHANNEL_5
  2013. * @arg @ref LL_DMA_CHANNEL_6
  2014. * @arg @ref LL_DMA_CHANNEL_7
  2015. * @retval None
  2016. */
  2017. __STATIC_INLINE void LL_DMA_DisableIT_TE(const DMA_TypeDef *DMAx, uint32_t Channel)
  2018. {
  2019. uint32_t dma_base_addr = (uint32_t)DMAx;
  2020. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TEIE);
  2021. }
  2022. /**
  2023. * @brief Check if Transfer complete Interrupt is enabled.
  2024. * @rmtoll CCR TCIE LL_DMA_IsEnabledIT_TC
  2025. * @param DMAx DMAx Instance
  2026. * @param Channel This parameter can be one of the following values:
  2027. * @arg @ref LL_DMA_CHANNEL_1
  2028. * @arg @ref LL_DMA_CHANNEL_2
  2029. * @arg @ref LL_DMA_CHANNEL_3
  2030. * @arg @ref LL_DMA_CHANNEL_4
  2031. * @arg @ref LL_DMA_CHANNEL_5
  2032. * @arg @ref LL_DMA_CHANNEL_6
  2033. * @arg @ref LL_DMA_CHANNEL_7
  2034. * @retval State of bit (1 or 0).
  2035. */
  2036. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(const DMA_TypeDef *DMAx, uint32_t Channel)
  2037. {
  2038. uint32_t dma_base_addr = (uint32_t)DMAx;
  2039. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  2040. DMA_CCR_TCIE) == (DMA_CCR_TCIE)) ? 1UL : 0UL);
  2041. }
  2042. /**
  2043. * @brief Check if Half transfer Interrupt is enabled.
  2044. * @rmtoll CCR HTIE LL_DMA_IsEnabledIT_HT
  2045. * @param DMAx DMAx Instance
  2046. * @param Channel This parameter can be one of the following values:
  2047. * @arg @ref LL_DMA_CHANNEL_1
  2048. * @arg @ref LL_DMA_CHANNEL_2
  2049. * @arg @ref LL_DMA_CHANNEL_3
  2050. * @arg @ref LL_DMA_CHANNEL_4
  2051. * @arg @ref LL_DMA_CHANNEL_5
  2052. * @arg @ref LL_DMA_CHANNEL_6
  2053. * @arg @ref LL_DMA_CHANNEL_7
  2054. * @retval State of bit (1 or 0).
  2055. */
  2056. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(const DMA_TypeDef *DMAx, uint32_t Channel)
  2057. {
  2058. uint32_t dma_base_addr = (uint32_t)DMAx;
  2059. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  2060. DMA_CCR_HTIE) == (DMA_CCR_HTIE)) ? 1UL : 0UL);
  2061. }
  2062. /**
  2063. * @brief Check if Transfer error Interrupt is enabled.
  2064. * @rmtoll CCR TEIE LL_DMA_IsEnabledIT_TE
  2065. * @param DMAx DMAx Instance
  2066. * @param Channel This parameter can be one of the following values:
  2067. * @arg @ref LL_DMA_CHANNEL_1
  2068. * @arg @ref LL_DMA_CHANNEL_2
  2069. * @arg @ref LL_DMA_CHANNEL_3
  2070. * @arg @ref LL_DMA_CHANNEL_4
  2071. * @arg @ref LL_DMA_CHANNEL_5
  2072. * @arg @ref LL_DMA_CHANNEL_6
  2073. * @arg @ref LL_DMA_CHANNEL_7
  2074. * @retval State of bit (1 or 0).
  2075. */
  2076. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(const DMA_TypeDef *DMAx, uint32_t Channel)
  2077. {
  2078. uint32_t dma_base_addr = (uint32_t)DMAx;
  2079. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  2080. DMA_CCR_TEIE) == (DMA_CCR_TEIE)) ? 1UL : 0UL);
  2081. }
  2082. /**
  2083. * @}
  2084. */
  2085. #if defined(USE_FULL_LL_DRIVER)
  2086. /** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions
  2087. * @{
  2088. */
  2089. ErrorStatus LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct);
  2090. ErrorStatus LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
  2091. void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct);
  2092. /**
  2093. * @}
  2094. */
  2095. #endif /* USE_FULL_LL_DRIVER */
  2096. /**
  2097. * @}
  2098. */
  2099. /**
  2100. * @}
  2101. */
  2102. #endif /* DMA1 || DMA2 */
  2103. /**
  2104. * @}
  2105. */
  2106. #ifdef __cplusplus
  2107. }
  2108. #endif
  2109. #endif /* STM32G0xx_LL_DMA_H */