stm32l5xx_ll_dma.h 115 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889
  1. /**
  2. ******************************************************************************
  3. * @file stm32l5xx_ll_dma.h
  4. * @author MCD Application Team
  5. * @brief Header file of DMA LL module.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2019 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 STM32L5xx_LL_DMA_H
  20. #define STM32L5xx_LL_DMA_H
  21. #ifdef __cplusplus
  22. extern "C" {
  23. #endif
  24. /* Includes ------------------------------------------------------------------*/
  25. #include "stm32l5xx.h"
  26. #include "stm32l5xx_ll_dmamux.h"
  27. /** @addtogroup STM32L5xx_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. (uint8_t)(DMA1_Channel6_BASE - DMA1_BASE),
  48. (uint8_t)(DMA1_Channel7_BASE - DMA1_BASE),
  49. (uint8_t)(DMA1_Channel8_BASE - DMA1_BASE)
  50. };
  51. /**
  52. * @}
  53. */
  54. /* Private constants ---------------------------------------------------------*/
  55. /* Private macros ------------------------------------------------------------*/
  56. /* Exported types ------------------------------------------------------------*/
  57. #if defined(USE_FULL_LL_DRIVER)
  58. /** @defgroup DMA_LL_ES_INIT DMA Exported Init structure
  59. * @{
  60. */
  61. typedef struct
  62. {
  63. uint32_t PeriphOrM2MSrcAddress; /*!< Specifies the peripheral base address for DMA transfer
  64. or as Source base address in case of memory to memory transfer direction.
  65. This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
  66. uint32_t MemoryOrM2MDstAddress; /*!< Specifies the memory base address for DMA transfer
  67. or as Destination base address in case of memory to memory transfer direction.
  68. This parameter must be a value between Min_Data = 0 and Max_Data = 0xFFFFFFFF. */
  69. uint32_t Direction; /*!< Specifies if the data will be transferred from memory to peripheral,
  70. from memory to memory or from peripheral to memory.
  71. This parameter can be a value of @ref DMA_LL_EC_DIRECTION
  72. This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataTransferDirection(). */
  73. uint32_t Mode; /*!< Specifies the normal or circular operation mode.
  74. This parameter can be a value of @ref DMA_LL_EC_MODE
  75. @note: The circular buffer mode cannot be used if the memory to memory
  76. data transfer direction is configured on the selected Channel
  77. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMode(). */
  78. uint32_t PeriphOrM2MSrcIncMode; /*!< Specifies whether the Peripheral address or Source address in case of memory to memory transfer direction
  79. is incremented or not.
  80. This parameter can be a value of @ref DMA_LL_EC_PERIPH
  81. This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphIncMode(). */
  82. uint32_t MemoryOrM2MDstIncMode; /*!< Specifies whether the Memory address or Destination address in case of memory to memory transfer direction
  83. is incremented or not.
  84. This parameter can be a value of @ref DMA_LL_EC_MEMORY
  85. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemoryIncMode(). */
  86. uint32_t PeriphOrM2MSrcDataSize; /*!< Specifies the Peripheral data size alignment or Source data size alignment (byte, half word, word)
  87. in case of memory to memory transfer direction.
  88. This parameter can be a value of @ref DMA_LL_EC_PDATAALIGN
  89. This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphSize(). */
  90. uint32_t MemoryOrM2MDstDataSize; /*!< Specifies the Memory data size alignment or Destination data size alignment (byte, half word, word)
  91. in case of memory to memory transfer direction.
  92. This parameter can be a value of @ref DMA_LL_EC_MDATAALIGN
  93. This feature can be modified afterwards using unitary function @ref LL_DMA_SetMemorySize(). */
  94. uint32_t NbData; /*!< Specifies the number of data to transfer, in data unit.
  95. The data unit is equal to the source buffer configuration set in PeripheralSize
  96. or MemorySize parameters depending in the transfer direction.
  97. This parameter must be a value between Min_Data = 0 and Max_Data = 0x0000FFFF
  98. This feature can be modified afterwards using unitary function @ref LL_DMA_SetDataLength(). */
  99. uint32_t PeriphRequest; /*!< Specifies the peripheral request.
  100. This parameter can be a value of @ref DMAMUX_LL_EC_REQUEST
  101. This feature can be modified afterwards using unitary function @ref LL_DMA_SetPeriphRequest(). */
  102. uint32_t Priority; /*!< Specifies the channel priority level.
  103. This parameter can be a value of @ref DMA_LL_EC_PRIORITY
  104. This feature can be modified afterwards using unitary function @ref LL_DMA_SetChannelPriorityLevel(). */
  105. uint32_t DoubleBufferMode; /*!< Specifies the double buffer mode.
  106. This parameter can be a value of @ref DMA_LL_EC_DOUBLEBUFFER_MODE
  107. This feature can be modified afterwards using unitary function @ref LL_DMA_EnableDoubleBufferMode() & LL_DMA_DisableDoubleBufferMode(). */
  108. uint32_t TargetMemInDoubleBufferMode;
  109. /*!< Specifies the target memory in double buffer mode.
  110. This parameter can be a value of @ref DMA_LL_EC_CURRENTTARGETMEM
  111. This feature can be modified afterwards using unitary function @ref LL_DMA_SetCurrentTargetMem(). */
  112. } LL_DMA_InitTypeDef;
  113. /**
  114. * @}
  115. */
  116. #endif /*USE_FULL_LL_DRIVER*/
  117. /* Exported constants --------------------------------------------------------*/
  118. /** @defgroup DMA_LL_Exported_Constants DMA Exported Constants
  119. * @{
  120. */
  121. /** @defgroup DMA_LL_EC_CLEAR_FLAG Clear Flags Defines
  122. * @brief Flags defines which can be used with LL_DMA_WriteReg function
  123. * @{
  124. */
  125. #define LL_DMA_IFCR_CGIF1 DMA_IFCR_CGIF1 /*!< Channel 1 global flag */
  126. #define LL_DMA_IFCR_CTCIF1 DMA_IFCR_CTCIF1 /*!< Channel 1 transfer complete flag */
  127. #define LL_DMA_IFCR_CHTIF1 DMA_IFCR_CHTIF1 /*!< Channel 1 half transfer flag */
  128. #define LL_DMA_IFCR_CTEIF1 DMA_IFCR_CTEIF1 /*!< Channel 1 transfer error flag */
  129. #define LL_DMA_IFCR_CGIF2 DMA_IFCR_CGIF2 /*!< Channel 2 global flag */
  130. #define LL_DMA_IFCR_CTCIF2 DMA_IFCR_CTCIF2 /*!< Channel 2 transfer complete flag */
  131. #define LL_DMA_IFCR_CHTIF2 DMA_IFCR_CHTIF2 /*!< Channel 2 half transfer flag */
  132. #define LL_DMA_IFCR_CTEIF2 DMA_IFCR_CTEIF2 /*!< Channel 2 transfer error flag */
  133. #define LL_DMA_IFCR_CGIF3 DMA_IFCR_CGIF3 /*!< Channel 3 global flag */
  134. #define LL_DMA_IFCR_CTCIF3 DMA_IFCR_CTCIF3 /*!< Channel 3 transfer complete flag */
  135. #define LL_DMA_IFCR_CHTIF3 DMA_IFCR_CHTIF3 /*!< Channel 3 half transfer flag */
  136. #define LL_DMA_IFCR_CTEIF3 DMA_IFCR_CTEIF3 /*!< Channel 3 transfer error flag */
  137. #define LL_DMA_IFCR_CGIF4 DMA_IFCR_CGIF4 /*!< Channel 4 global flag */
  138. #define LL_DMA_IFCR_CTCIF4 DMA_IFCR_CTCIF4 /*!< Channel 4 transfer complete flag */
  139. #define LL_DMA_IFCR_CHTIF4 DMA_IFCR_CHTIF4 /*!< Channel 4 half transfer flag */
  140. #define LL_DMA_IFCR_CTEIF4 DMA_IFCR_CTEIF4 /*!< Channel 4 transfer error flag */
  141. #define LL_DMA_IFCR_CGIF5 DMA_IFCR_CGIF5 /*!< Channel 5 global flag */
  142. #define LL_DMA_IFCR_CTCIF5 DMA_IFCR_CTCIF5 /*!< Channel 5 transfer complete flag */
  143. #define LL_DMA_IFCR_CHTIF5 DMA_IFCR_CHTIF5 /*!< Channel 5 half transfer flag */
  144. #define LL_DMA_IFCR_CTEIF5 DMA_IFCR_CTEIF5 /*!< Channel 5 transfer error flag */
  145. #define LL_DMA_IFCR_CGIF6 DMA_IFCR_CGIF6 /*!< Channel 6 global flag */
  146. #define LL_DMA_IFCR_CTCIF6 DMA_IFCR_CTCIF6 /*!< Channel 6 transfer complete flag */
  147. #define LL_DMA_IFCR_CHTIF6 DMA_IFCR_CHTIF6 /*!< Channel 6 half transfer flag */
  148. #define LL_DMA_IFCR_CTEIF6 DMA_IFCR_CTEIF6 /*!< Channel 6 transfer error flag */
  149. #define LL_DMA_IFCR_CGIF7 DMA_IFCR_CGIF7 /*!< Channel 7 global flag */
  150. #define LL_DMA_IFCR_CTCIF7 DMA_IFCR_CTCIF7 /*!< Channel 7 transfer complete flag */
  151. #define LL_DMA_IFCR_CHTIF7 DMA_IFCR_CHTIF7 /*!< Channel 7 half transfer flag */
  152. #define LL_DMA_IFCR_CTEIF7 DMA_IFCR_CTEIF7 /*!< Channel 7 transfer error flag */
  153. #define LL_DMA_IFCR_CGIF8 DMA_IFCR_CGIF8 /*!< Channel 8 global flag */
  154. #define LL_DMA_IFCR_CTCIF8 DMA_IFCR_CTCIF8 /*!< Channel 8 transfer complete flag */
  155. #define LL_DMA_IFCR_CHTIF8 DMA_IFCR_CHTIF8 /*!< Channel 8 half transfer flag */
  156. #define LL_DMA_IFCR_CTEIF8 DMA_IFCR_CTEIF8 /*!< Channel 8 transfer error flag */
  157. /**
  158. * @}
  159. */
  160. /** @defgroup DMA_LL_EC_GET_FLAG Get Flags Defines
  161. * @brief Flags defines which can be used with LL_DMA_ReadReg function
  162. * @{
  163. */
  164. #define LL_DMA_ISR_GIF1 DMA_ISR_GIF1 /*!< Channel 1 global flag */
  165. #define LL_DMA_ISR_TCIF1 DMA_ISR_TCIF1 /*!< Channel 1 transfer complete flag */
  166. #define LL_DMA_ISR_HTIF1 DMA_ISR_HTIF1 /*!< Channel 1 half transfer flag */
  167. #define LL_DMA_ISR_TEIF1 DMA_ISR_TEIF1 /*!< Channel 1 transfer error flag */
  168. #define LL_DMA_ISR_GIF2 DMA_ISR_GIF2 /*!< Channel 2 global flag */
  169. #define LL_DMA_ISR_TCIF2 DMA_ISR_TCIF2 /*!< Channel 2 transfer complete flag */
  170. #define LL_DMA_ISR_HTIF2 DMA_ISR_HTIF2 /*!< Channel 2 half transfer flag */
  171. #define LL_DMA_ISR_TEIF2 DMA_ISR_TEIF2 /*!< Channel 2 transfer error flag */
  172. #define LL_DMA_ISR_GIF3 DMA_ISR_GIF3 /*!< Channel 3 global flag */
  173. #define LL_DMA_ISR_TCIF3 DMA_ISR_TCIF3 /*!< Channel 3 transfer complete flag */
  174. #define LL_DMA_ISR_HTIF3 DMA_ISR_HTIF3 /*!< Channel 3 half transfer flag */
  175. #define LL_DMA_ISR_TEIF3 DMA_ISR_TEIF3 /*!< Channel 3 transfer error flag */
  176. #define LL_DMA_ISR_GIF4 DMA_ISR_GIF4 /*!< Channel 4 global flag */
  177. #define LL_DMA_ISR_TCIF4 DMA_ISR_TCIF4 /*!< Channel 4 transfer complete flag */
  178. #define LL_DMA_ISR_HTIF4 DMA_ISR_HTIF4 /*!< Channel 4 half transfer flag */
  179. #define LL_DMA_ISR_TEIF4 DMA_ISR_TEIF4 /*!< Channel 4 transfer error flag */
  180. #define LL_DMA_ISR_GIF5 DMA_ISR_GIF5 /*!< Channel 5 global flag */
  181. #define LL_DMA_ISR_TCIF5 DMA_ISR_TCIF5 /*!< Channel 5 transfer complete flag */
  182. #define LL_DMA_ISR_HTIF5 DMA_ISR_HTIF5 /*!< Channel 5 half transfer flag */
  183. #define LL_DMA_ISR_TEIF5 DMA_ISR_TEIF5 /*!< Channel 5 transfer error flag */
  184. #define LL_DMA_ISR_GIF6 DMA_ISR_GIF6 /*!< Channel 6 global flag */
  185. #define LL_DMA_ISR_TCIF6 DMA_ISR_TCIF6 /*!< Channel 6 transfer complete flag */
  186. #define LL_DMA_ISR_HTIF6 DMA_ISR_HTIF6 /*!< Channel 6 half transfer flag */
  187. #define LL_DMA_ISR_TEIF6 DMA_ISR_TEIF6 /*!< Channel 6 transfer error flag */
  188. #define LL_DMA_ISR_GIF7 DMA_ISR_GIF7 /*!< Channel 7 global flag */
  189. #define LL_DMA_ISR_TCIF7 DMA_ISR_TCIF7 /*!< Channel 7 transfer complete flag */
  190. #define LL_DMA_ISR_HTIF7 DMA_ISR_HTIF7 /*!< Channel 7 half transfer flag */
  191. #define LL_DMA_ISR_TEIF7 DMA_ISR_TEIF7 /*!< Channel 7 transfer error flag */
  192. #define LL_DMA_ISR_GIF8 DMA_ISR_GIF8 /*!< Channel 8 global flag */
  193. #define LL_DMA_ISR_TCIF8 DMA_ISR_TCIF8 /*!< Channel 8 transfer complete flag */
  194. #define LL_DMA_ISR_HTIF8 DMA_ISR_HTIF8 /*!< Channel 8 half transfer flag */
  195. #define LL_DMA_ISR_TEIF8 DMA_ISR_TEIF8 /*!< Channel 8 transfer error flag */
  196. /**
  197. * @}
  198. */
  199. /** @defgroup DMA_LL_EC_IT IT Defines
  200. * @brief IT defines which can be used with LL_DMA_ReadReg and LL_DMA_WriteReg functions
  201. * @{
  202. */
  203. #define LL_DMA_CCR_TCIE DMA_CCR_TCIE /*!< Transfer complete interrupt */
  204. #define LL_DMA_CCR_HTIE DMA_CCR_HTIE /*!< Half Transfer interrupt */
  205. #define LL_DMA_CCR_TEIE DMA_CCR_TEIE /*!< Transfer error interrupt */
  206. /**
  207. * @}
  208. */
  209. /** @defgroup DMA_LL_EC_CHANNEL CHANNEL
  210. * @{
  211. */
  212. #define LL_DMA_CHANNEL_1 0x00000000U /*!< DMA Channel 1 */
  213. #define LL_DMA_CHANNEL_2 0x00000001U /*!< DMA Channel 2 */
  214. #define LL_DMA_CHANNEL_3 0x00000002U /*!< DMA Channel 3 */
  215. #define LL_DMA_CHANNEL_4 0x00000003U /*!< DMA Channel 4 */
  216. #define LL_DMA_CHANNEL_5 0x00000004U /*!< DMA Channel 5 */
  217. #define LL_DMA_CHANNEL_6 0x00000005U /*!< DMA Channel 6 */
  218. #define LL_DMA_CHANNEL_7 0x00000006U /*!< DMA Channel 7 */
  219. #define LL_DMA_CHANNEL_8 0x00000007U /*!< DMA Channel 8 */
  220. #if defined(USE_FULL_LL_DRIVER)
  221. #define LL_DMA_CHANNEL_ALL 0xFFFF0000U /*!< DMA Channel all (used only for function @ref LL_DMA_DeInit(). */
  222. #endif /*USE_FULL_LL_DRIVER*/
  223. /**
  224. * @}
  225. */
  226. /** @defgroup DMA_LL_EC_DIRECTION Transfer Direction
  227. * @{
  228. */
  229. #define LL_DMA_DIRECTION_PERIPH_TO_MEMORY 0x00000000U /*!< Peripheral to memory direction */
  230. #define LL_DMA_DIRECTION_MEMORY_TO_PERIPH DMA_CCR_DIR /*!< Memory to peripheral direction */
  231. #define LL_DMA_DIRECTION_MEMORY_TO_MEMORY DMA_CCR_MEM2MEM /*!< Memory to memory direction */
  232. /**
  233. * @}
  234. */
  235. /** @defgroup DMA_LL_EC_MODE Transfer mode
  236. * @{
  237. */
  238. #define LL_DMA_MODE_NORMAL 0x00000000U /*!< Normal Mode */
  239. #define LL_DMA_MODE_CIRCULAR DMA_CCR_CIRC /*!< Circular Mode */
  240. /**
  241. * @}
  242. */
  243. /** @defgroup DMA_LL_EC_PERIPH Peripheral increment mode
  244. * @{
  245. */
  246. #define LL_DMA_PERIPH_INCREMENT DMA_CCR_PINC /*!< Peripheral increment mode Enable */
  247. #define LL_DMA_PERIPH_NOINCREMENT 0x00000000U /*!< Peripheral increment mode Disable */
  248. /**
  249. * @}
  250. */
  251. /** @defgroup DMA_LL_EC_MEMORY Memory increment mode
  252. * @{
  253. */
  254. #define LL_DMA_MEMORY_INCREMENT DMA_CCR_MINC /*!< Memory increment mode Enable */
  255. #define LL_DMA_MEMORY_NOINCREMENT 0x00000000U /*!< Memory increment mode Disable */
  256. /**
  257. * @}
  258. */
  259. /** @defgroup DMA_LL_EC_PDATAALIGN Peripheral data alignment
  260. * @{
  261. */
  262. #define LL_DMA_PDATAALIGN_BYTE 0x00000000U /*!< Peripheral data alignment : Byte */
  263. #define LL_DMA_PDATAALIGN_HALFWORD DMA_CCR_PSIZE_0 /*!< Peripheral data alignment : HalfWord */
  264. #define LL_DMA_PDATAALIGN_WORD DMA_CCR_PSIZE_1 /*!< Peripheral data alignment : Word */
  265. /**
  266. * @}
  267. */
  268. /** @defgroup DMA_LL_EC_MDATAALIGN Memory data alignment
  269. * @{
  270. */
  271. #define LL_DMA_MDATAALIGN_BYTE 0x00000000U /*!< Memory data alignment : Byte */
  272. #define LL_DMA_MDATAALIGN_HALFWORD DMA_CCR_MSIZE_0 /*!< Memory data alignment : HalfWord */
  273. #define LL_DMA_MDATAALIGN_WORD DMA_CCR_MSIZE_1 /*!< Memory data alignment : Word */
  274. /**
  275. * @}
  276. */
  277. /** @defgroup DMA_LL_EC_PRIORITY Transfer Priority level
  278. * @{
  279. */
  280. #define LL_DMA_PRIORITY_LOW 0x00000000U /*!< Priority level : Low */
  281. #define LL_DMA_PRIORITY_MEDIUM DMA_CCR_PL_0 /*!< Priority level : Medium */
  282. #define LL_DMA_PRIORITY_HIGH DMA_CCR_PL_1 /*!< Priority level : High */
  283. #define LL_DMA_PRIORITY_VERYHIGH DMA_CCR_PL /*!< Priority level : Very_High */
  284. /**
  285. * @}
  286. */
  287. /** @defgroup DMA_LL_EC_DOUBLEBUFFER_MODE DOUBLEBUFFER MODE
  288. * @{
  289. */
  290. #define LL_DMA_DOUBLEBUFFER_MODE_DISABLE 0x00000000U /*!< Disable double buffering mode */
  291. #define LL_DMA_DOUBLEBUFFER_MODE_ENABLE DMA_CCR_DBM /*!< Enable double buffering mode */
  292. /**
  293. * @}
  294. */
  295. /** @defgroup DMA_LL_EC_CURRENTTARGETMEM CURRENT TARGET MEMORY
  296. * @{
  297. */
  298. #define LL_DMA_CURRENTTARGETMEM0 0x00000000U /*!< Set CurrentTarget Memory to Memory 0 */
  299. #define LL_DMA_CURRENTTARGETMEM1 DMA_CCR_CT /*!< Set CurrentTarget Memory to Memory 1 */
  300. /**
  301. * @}
  302. */
  303. /** @defgroup DMA_LL_CHANNEL_SEC_MODE CHANNEL SECURITY MODE
  304. * @{
  305. */
  306. #define LL_DMA_CHANNEL_NSEC 0x00000000U /*!< Disable secure DMA channel */
  307. #define LL_DMA_CHANNEL_SEC DMA_CCR_SECM /*!< Enable secure DMA channel */
  308. /**
  309. * @}
  310. */
  311. /** @defgroup DMA_LL_SOURCE_TRANSFER_SEC_MODE TRANSFER SECURITY SOURCE MODE
  312. * @{
  313. */
  314. #define LL_DMA_CHANNEL_SRC_NSEC 0x00000000U /*!< Disable secure DMA transfer from the source */
  315. #define LL_DMA_CHANNEL_SRC_SEC DMA_CCR_SSEC /*!< Enable secure DMA transfer from the source */
  316. /**
  317. * @}
  318. */
  319. /** @defgroup DMA_LL_DEST_TRANSFER_SEC_MODE TRANSFER SECURITY DESTINATION MODE
  320. * @{
  321. */
  322. #define LL_DMA_CHANNEL_DEST_NSEC 0x00000000U /*!< Disable secure DMA transfer to the destination */
  323. #define LL_DMA_CHANNEL_DEST_SEC DMA_CCR_DSEC /*!< Enable secure DMA transfer to the destination */
  324. /**
  325. * @}
  326. */
  327. /** @defgroup DMA_LL_SEC_PRIVILEGE_MODE PRIVILEGE MODE
  328. * @{
  329. */
  330. #define LL_DMA_CHANNEL_NPRIV 0x00000000U /*!< Disable privilege transfer to the destination */
  331. #define LL_DMA_CHANNEL_PRIV DMA_CCR_PRIV /*!< Enable privilege transfer to the destination */
  332. /**
  333. * @}
  334. */
  335. /**
  336. * @}
  337. */
  338. /* Exported macro ------------------------------------------------------------*/
  339. /** @defgroup DMA_LL_Exported_Macros DMA Exported Macros
  340. * @{
  341. */
  342. /** @defgroup DMA_LL_EM_WRITE_READ Common Write and read registers macros
  343. * @{
  344. */
  345. /**
  346. * @brief Write a value in DMA register
  347. * @param __INSTANCE__ DMA Instance
  348. * @param __REG__ Register to be written
  349. * @param __VALUE__ Value to be written in the register
  350. * @retval None
  351. */
  352. #define LL_DMA_WriteReg(__INSTANCE__, __REG__, __VALUE__) WRITE_REG(__INSTANCE__->__REG__, (__VALUE__))
  353. /**
  354. * @brief Read a value in DMA register
  355. * @param __INSTANCE__ DMA Instance
  356. * @param __REG__ Register to be read
  357. * @retval Register value
  358. */
  359. #define LL_DMA_ReadReg(__INSTANCE__, __REG__) READ_REG(__INSTANCE__->__REG__)
  360. /**
  361. * @}
  362. */
  363. /** @defgroup DMA_LL_EM_CONVERT_DMAxCHANNELy Convert DMAxChannely
  364. * @{
  365. */
  366. /**
  367. * @brief Convert DMAx_Channely into DMAx
  368. * @param __CHANNEL_INSTANCE__ DMAx_Channely
  369. * @retval DMAx
  370. */
  371. #if defined(DMA2)
  372. #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) \
  373. (((uint32_t)(__CHANNEL_INSTANCE__) > ((uint32_t)DMA1_Channel8)) ? DMA2 : DMA1)
  374. #else
  375. #define __LL_DMA_GET_INSTANCE(__CHANNEL_INSTANCE__) (DMA1)
  376. #endif
  377. /**
  378. * @brief Convert DMAx_Channely into LL_DMA_CHANNEL_y
  379. * @param __CHANNEL_INSTANCE__ DMAx_Channely
  380. * @retval LL_DMA_CHANNEL_y
  381. */
  382. #define __LL_DMA_GET_CHANNEL(__CHANNEL_INSTANCE__) \
  383. (((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel1)) ? LL_DMA_CHANNEL_1 : \
  384. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel1)) ? LL_DMA_CHANNEL_1 : \
  385. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel2)) ? LL_DMA_CHANNEL_2 : \
  386. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel2)) ? LL_DMA_CHANNEL_2 : \
  387. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel3)) ? LL_DMA_CHANNEL_3 : \
  388. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel3)) ? LL_DMA_CHANNEL_3 : \
  389. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel4)) ? LL_DMA_CHANNEL_4 : \
  390. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel4)) ? LL_DMA_CHANNEL_4 : \
  391. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel5)) ? LL_DMA_CHANNEL_5 : \
  392. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel5)) ? LL_DMA_CHANNEL_5 : \
  393. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel6)) ? LL_DMA_CHANNEL_6 : \
  394. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel6)) ? LL_DMA_CHANNEL_6 : \
  395. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA1_Channel7)) ? LL_DMA_CHANNEL_7 : \
  396. ((uint32_t)(__CHANNEL_INSTANCE__) == ((uint32_t)DMA2_Channel7)) ? LL_DMA_CHANNEL_7 : \
  397. LL_DMA_CHANNEL_8)
  398. /**
  399. * @brief Convert DMA Instance DMAx and LL_DMA_CHANNEL_y into DMAx_Channely
  400. * @param __DMA_INSTANCE__ DMAx
  401. * @param __CHANNEL__ LL_DMA_CHANNEL_y
  402. * @retval DMAx_Channely
  403. */
  404. #define __LL_DMA_GET_CHANNEL_INSTANCE(__DMA_INSTANCE__, __CHANNEL__) \
  405. ((((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA1_Channel1 : \
  406. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_1))) ? DMA2_Channel1 : \
  407. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA1_Channel2 : \
  408. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_2))) ? DMA2_Channel2 : \
  409. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA1_Channel3 : \
  410. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_3))) ? DMA2_Channel3 : \
  411. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA1_Channel4 : \
  412. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_4))) ? DMA2_Channel4 : \
  413. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA1_Channel5 : \
  414. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_5))) ? DMA2_Channel5 : \
  415. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA1_Channel6 : \
  416. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_6))) ? DMA2_Channel6 : \
  417. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_7))) ? DMA1_Channel7 : \
  418. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA2)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_7))) ? DMA2_Channel7 : \
  419. (((uint32_t)(__DMA_INSTANCE__) == ((uint32_t)DMA1)) && ((uint32_t)(__CHANNEL__) == ((uint32_t)LL_DMA_CHANNEL_8))) ? DMA1_Channel8 : \
  420. DMA2_Channel8)
  421. /**
  422. * @}
  423. */
  424. /**
  425. * @}
  426. */
  427. /* Exported functions --------------------------------------------------------*/
  428. /** @defgroup DMA_LL_Exported_Functions DMA Exported Functions
  429. * @{
  430. */
  431. /** @defgroup DMA_LL_EF_Configuration Configuration
  432. * @{
  433. */
  434. /**
  435. * @brief Enable DMA channel.
  436. * @rmtoll CCR EN LL_DMA_EnableChannel
  437. * @param DMAx DMAx Instance
  438. * @param Channel This parameter can be one of the following values:
  439. * @arg @ref LL_DMA_CHANNEL_1
  440. * @arg @ref LL_DMA_CHANNEL_2
  441. * @arg @ref LL_DMA_CHANNEL_3
  442. * @arg @ref LL_DMA_CHANNEL_4
  443. * @arg @ref LL_DMA_CHANNEL_5
  444. * @arg @ref LL_DMA_CHANNEL_6
  445. * @arg @ref LL_DMA_CHANNEL_7
  446. * @arg @ref LL_DMA_CHANNEL_8
  447. * @retval None
  448. */
  449. __STATIC_INLINE void LL_DMA_EnableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
  450. {
  451. uint32_t dma_base_addr = (uint32_t)DMAx;
  452. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN);
  453. }
  454. /**
  455. * @brief Disable DMA channel.
  456. * @rmtoll CCR EN LL_DMA_DisableChannel
  457. * @param DMAx DMAx Instance
  458. * @param Channel This parameter can be one of the following values:
  459. * @arg @ref LL_DMA_CHANNEL_1
  460. * @arg @ref LL_DMA_CHANNEL_2
  461. * @arg @ref LL_DMA_CHANNEL_3
  462. * @arg @ref LL_DMA_CHANNEL_4
  463. * @arg @ref LL_DMA_CHANNEL_5
  464. * @arg @ref LL_DMA_CHANNEL_6
  465. * @arg @ref LL_DMA_CHANNEL_7
  466. * @arg @ref LL_DMA_CHANNEL_8
  467. * @retval None
  468. */
  469. __STATIC_INLINE void LL_DMA_DisableChannel(DMA_TypeDef *DMAx, uint32_t Channel)
  470. {
  471. uint32_t dma_base_addr = (uint32_t)DMAx;
  472. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_EN);
  473. }
  474. /**
  475. * @brief Check if DMA channel is enabled or disabled.
  476. * @rmtoll CCR EN LL_DMA_IsEnabledChannel
  477. * @param DMAx DMAx Instance
  478. * @param Channel This parameter can be one of the following values:
  479. * @arg @ref LL_DMA_CHANNEL_1
  480. * @arg @ref LL_DMA_CHANNEL_2
  481. * @arg @ref LL_DMA_CHANNEL_3
  482. * @arg @ref LL_DMA_CHANNEL_4
  483. * @arg @ref LL_DMA_CHANNEL_5
  484. * @arg @ref LL_DMA_CHANNEL_6
  485. * @arg @ref LL_DMA_CHANNEL_7
  486. * @arg @ref LL_DMA_CHANNEL_8
  487. * @retval State of bit (1 or 0).
  488. */
  489. __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannel(DMA_TypeDef *DMAx, uint32_t Channel)
  490. {
  491. uint32_t dma_base_addr = (uint32_t)DMAx;
  492. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  493. DMA_CCR_EN) == (DMA_CCR_EN)) ? 1UL : 0UL);
  494. }
  495. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  496. /**
  497. * @brief Configure all secure parameters link to DMA transfer.
  498. * @rmtoll CCR SECM LL_DMA_ConfigChannelSecure\n
  499. * CCR SSEC LL_DMA_ConfigChannelSecure\n
  500. * CCR DSEC LL_DMA_ConfigChannelSecure\n
  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. * @arg @ref LL_DMA_CHANNEL_8
  511. * @param Configuration This parameter must be a combination of all the following values:
  512. * @arg @ref LL_DMA_CHANNEL_SEC or @ref LL_DMA_CHANNEL_NSEC
  513. * @arg @ref LL_DMA_CHANNEL_SRC_SEC or @ref LL_DMA_CHANNEL_SRC_NSEC
  514. * @arg @ref LL_DMA_CHANNEL_DEST_SEC or LL_DMA_CHANNEL_DEST_NSEC
  515. * @retval None
  516. */
  517. __STATIC_INLINE void LL_DMA_ConfigChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
  518. {
  519. uint32_t dma_base_addr = (uint32_t)DMAx;
  520. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + (uint32_t)(CHANNEL_OFFSET_TAB[Channel & 0x07U])))->CCR,
  521. DMA_CCR_SECM | DMA_CCR_SSEC | DMA_CCR_DSEC,
  522. Configuration);
  523. }
  524. /**
  525. * @brief Configure all secure parameters link to DMA transfer.
  526. * @rmtoll CCR SECM LL_DMA_GetConfigChannelSecure\n
  527. * CCR SSEC LL_DMA_GetConfigChannelSecure\n
  528. * CCR DSEC LL_DMA_GetConfigChannelSecure\n
  529. * @param DMAx DMAx Instance
  530. * @param Channel This parameter can be one of the following values:
  531. * @arg @ref LL_DMA_CHANNEL_1
  532. * @arg @ref LL_DMA_CHANNEL_2
  533. * @arg @ref LL_DMA_CHANNEL_3
  534. * @arg @ref LL_DMA_CHANNEL_4
  535. * @arg @ref LL_DMA_CHANNEL_5
  536. * @arg @ref LL_DMA_CHANNEL_6
  537. * @arg @ref LL_DMA_CHANNEL_7
  538. * @arg @ref LL_DMA_CHANNEL_8
  539. * @retval Configuration This parameter must be a combination of all the following values:
  540. * @arg @ref LL_DMA_CHANNEL_SEC or @ref LL_DMA_CHANNEL_NSEC
  541. * @arg @ref LL_DMA_CHANNEL_SRC_SEC or @ref LL_DMA_CHANNEL_SRC_NSEC
  542. * @arg @ref LL_DMA_CHANNEL_DEST_SEC or LL_DMA_CHANNEL_DEST_NSEC
  543. */
  544. __STATIC_INLINE uint32_t LL_DMA_GetConfigChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  545. {
  546. uint32_t dma_base_addr = (uint32_t)DMAx;
  547. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  548. DMA_CCR_SECM | DMA_CCR_SSEC | DMA_CCR_DSEC));
  549. }
  550. #endif /* __ARM_FEATURE_CMSE */
  551. /**
  552. * @brief Configure all parameters link to DMA transfer.
  553. * @rmtoll CCR DIR LL_DMA_ConfigTransfer\n
  554. * CCR MEM2MEM LL_DMA_ConfigTransfer\n
  555. * CCR CIRC LL_DMA_ConfigTransfer\n
  556. * CCR PINC LL_DMA_ConfigTransfer\n
  557. * CCR MINC LL_DMA_ConfigTransfer\n
  558. * CCR PSIZE LL_DMA_ConfigTransfer\n
  559. * CCR MSIZE LL_DMA_ConfigTransfer\n
  560. * CCR PL LL_DMA_ConfigTransfer
  561. * @param DMAx DMAx Instance
  562. * @param Channel This parameter can be one of the following values:
  563. * @arg @ref LL_DMA_CHANNEL_1
  564. * @arg @ref LL_DMA_CHANNEL_2
  565. * @arg @ref LL_DMA_CHANNEL_3
  566. * @arg @ref LL_DMA_CHANNEL_4
  567. * @arg @ref LL_DMA_CHANNEL_5
  568. * @arg @ref LL_DMA_CHANNEL_6
  569. * @arg @ref LL_DMA_CHANNEL_7
  570. * @arg @ref LL_DMA_CHANNEL_8
  571. * @param Configuration This parameter must be a combination of all the following values:
  572. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY or @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH or @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  573. * @arg @ref LL_DMA_MODE_NORMAL or @ref LL_DMA_MODE_CIRCULAR
  574. * @arg @ref LL_DMA_PERIPH_INCREMENT or @ref LL_DMA_PERIPH_NOINCREMENT
  575. * @arg @ref LL_DMA_MEMORY_INCREMENT or @ref LL_DMA_MEMORY_NOINCREMENT
  576. * @arg @ref LL_DMA_PDATAALIGN_BYTE or @ref LL_DMA_PDATAALIGN_HALFWORD or @ref LL_DMA_PDATAALIGN_WORD
  577. * @arg @ref LL_DMA_MDATAALIGN_BYTE or @ref LL_DMA_MDATAALIGN_HALFWORD or @ref LL_DMA_MDATAALIGN_WORD
  578. * @arg @ref LL_DMA_PRIORITY_LOW or @ref LL_DMA_PRIORITY_MEDIUM or @ref LL_DMA_PRIORITY_HIGH or @ref LL_DMA_PRIORITY_VERYHIGH
  579. * @arg @ref LL_DMA_DOUBLEBUFFER_MODE_DISABLE OR LL_DMA_DOUBLEBUFFER_MODE_ENABLE
  580. * @arg @ref LL_DMA_CURRENTTARGETMEM0 or LL_DMA_CURRENTTARGETMEM1
  581. * @retval None
  582. */
  583. __STATIC_INLINE void LL_DMA_ConfigTransfer(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Configuration)
  584. {
  585. uint32_t dma_base_addr = (uint32_t)DMAx;
  586. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  587. DMA_CCR_DIR | DMA_CCR_MEM2MEM | DMA_CCR_CIRC | DMA_CCR_PINC | DMA_CCR_MINC | DMA_CCR_PSIZE | DMA_CCR_MSIZE | DMA_CCR_PL | DMA_CCR_DBM | DMA_CCR_CT,
  588. Configuration);
  589. }
  590. /**
  591. * @brief Set Data transfer direction (read from peripheral or from memory).
  592. * @rmtoll CCR DIR LL_DMA_SetDataTransferDirection\n
  593. * CCR MEM2MEM LL_DMA_SetDataTransferDirection
  594. * @param DMAx DMAx Instance
  595. * @param Channel This parameter can be one of the following values:
  596. * @arg @ref LL_DMA_CHANNEL_1
  597. * @arg @ref LL_DMA_CHANNEL_2
  598. * @arg @ref LL_DMA_CHANNEL_3
  599. * @arg @ref LL_DMA_CHANNEL_4
  600. * @arg @ref LL_DMA_CHANNEL_5
  601. * @arg @ref LL_DMA_CHANNEL_6
  602. * @arg @ref LL_DMA_CHANNEL_7
  603. * @arg @ref LL_DMA_CHANNEL_8
  604. * @param Direction This parameter can be one of the following values:
  605. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  606. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  607. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  608. * @retval None
  609. */
  610. __STATIC_INLINE void LL_DMA_SetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Direction)
  611. {
  612. uint32_t dma_base_addr = (uint32_t)DMAx;
  613. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  614. DMA_CCR_DIR | DMA_CCR_MEM2MEM, Direction);
  615. }
  616. /**
  617. * @brief Get Data transfer direction (read from peripheral or from memory).
  618. * @rmtoll CCR DIR LL_DMA_GetDataTransferDirection\n
  619. * CCR MEM2MEM LL_DMA_GetDataTransferDirection
  620. * @param DMAx DMAx Instance
  621. * @param Channel This parameter can be one of the following values:
  622. * @arg @ref LL_DMA_CHANNEL_1
  623. * @arg @ref LL_DMA_CHANNEL_2
  624. * @arg @ref LL_DMA_CHANNEL_3
  625. * @arg @ref LL_DMA_CHANNEL_4
  626. * @arg @ref LL_DMA_CHANNEL_5
  627. * @arg @ref LL_DMA_CHANNEL_6
  628. * @arg @ref LL_DMA_CHANNEL_7
  629. * @arg @ref LL_DMA_CHANNEL_8
  630. * @retval Returned value can be one of the following values:
  631. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  632. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  633. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  634. */
  635. __STATIC_INLINE uint32_t LL_DMA_GetDataTransferDirection(DMA_TypeDef *DMAx, uint32_t Channel)
  636. {
  637. uint32_t dma_base_addr = (uint32_t)DMAx;
  638. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  639. DMA_CCR_DIR | DMA_CCR_MEM2MEM));
  640. }
  641. /**
  642. * @brief Set DMA mode circular or normal.
  643. * @note The circular buffer mode cannot be used if the memory-to-memory
  644. * data transfer is configured on the selected Channel.
  645. * @rmtoll CCR CIRC LL_DMA_SetMode
  646. * @param DMAx DMAx Instance
  647. * @param Channel This parameter can be one of the following values:
  648. * @arg @ref LL_DMA_CHANNEL_1
  649. * @arg @ref LL_DMA_CHANNEL_2
  650. * @arg @ref LL_DMA_CHANNEL_3
  651. * @arg @ref LL_DMA_CHANNEL_4
  652. * @arg @ref LL_DMA_CHANNEL_5
  653. * @arg @ref LL_DMA_CHANNEL_6
  654. * @arg @ref LL_DMA_CHANNEL_7
  655. * @arg @ref LL_DMA_CHANNEL_8
  656. * @param Mode This parameter can be one of the following values:
  657. * @arg @ref LL_DMA_MODE_NORMAL
  658. * @arg @ref LL_DMA_MODE_CIRCULAR
  659. * @retval None
  660. */
  661. __STATIC_INLINE void LL_DMA_SetMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Mode)
  662. {
  663. uint32_t dma_base_addr = (uint32_t)DMAx;
  664. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_CIRC,
  665. Mode);
  666. }
  667. /**
  668. * @brief Get DMA mode circular or normal.
  669. * @rmtoll CCR CIRC LL_DMA_GetMode
  670. * @param DMAx DMAx Instance
  671. * @param Channel This parameter can be one of the following values:
  672. * @arg @ref LL_DMA_CHANNEL_1
  673. * @arg @ref LL_DMA_CHANNEL_2
  674. * @arg @ref LL_DMA_CHANNEL_3
  675. * @arg @ref LL_DMA_CHANNEL_4
  676. * @arg @ref LL_DMA_CHANNEL_5
  677. * @arg @ref LL_DMA_CHANNEL_6
  678. * @arg @ref LL_DMA_CHANNEL_7
  679. * @arg @ref LL_DMA_CHANNEL_8
  680. * @retval Returned value can be one of the following values:
  681. * @arg @ref LL_DMA_MODE_NORMAL
  682. * @arg @ref LL_DMA_MODE_CIRCULAR
  683. */
  684. __STATIC_INLINE uint32_t LL_DMA_GetMode(DMA_TypeDef *DMAx, uint32_t Channel)
  685. {
  686. uint32_t dma_base_addr = (uint32_t)DMAx;
  687. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  688. DMA_CCR_CIRC));
  689. }
  690. /**
  691. * @brief Set Peripheral increment mode.
  692. * @rmtoll CCR PINC LL_DMA_SetPeriphIncMode
  693. * @param DMAx DMAx Instance
  694. * @param Channel This parameter can be one of the following values:
  695. * @arg @ref LL_DMA_CHANNEL_1
  696. * @arg @ref LL_DMA_CHANNEL_2
  697. * @arg @ref LL_DMA_CHANNEL_3
  698. * @arg @ref LL_DMA_CHANNEL_4
  699. * @arg @ref LL_DMA_CHANNEL_5
  700. * @arg @ref LL_DMA_CHANNEL_6
  701. * @arg @ref LL_DMA_CHANNEL_7
  702. * @arg @ref LL_DMA_CHANNEL_8
  703. * @param PeriphOrM2MSrcIncMode This parameter can be one of the following values:
  704. * @arg @ref LL_DMA_PERIPH_INCREMENT
  705. * @arg @ref LL_DMA_PERIPH_NOINCREMENT
  706. * @retval None
  707. */
  708. __STATIC_INLINE void LL_DMA_SetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcIncMode)
  709. {
  710. uint32_t dma_base_addr = (uint32_t)DMAx;
  711. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PINC,
  712. PeriphOrM2MSrcIncMode);
  713. }
  714. /**
  715. * @brief Get Peripheral increment mode.
  716. * @rmtoll CCR PINC LL_DMA_GetPeriphIncMode
  717. * @param DMAx DMAx Instance
  718. * @param Channel This parameter can be one of the following values:
  719. * @arg @ref LL_DMA_CHANNEL_1
  720. * @arg @ref LL_DMA_CHANNEL_2
  721. * @arg @ref LL_DMA_CHANNEL_3
  722. * @arg @ref LL_DMA_CHANNEL_4
  723. * @arg @ref LL_DMA_CHANNEL_5
  724. * @arg @ref LL_DMA_CHANNEL_6
  725. * @arg @ref LL_DMA_CHANNEL_7
  726. * @arg @ref LL_DMA_CHANNEL_8
  727. * @retval Returned value can be one of the following values:
  728. * @arg @ref LL_DMA_PERIPH_INCREMENT
  729. * @arg @ref LL_DMA_PERIPH_NOINCREMENT
  730. */
  731. __STATIC_INLINE uint32_t LL_DMA_GetPeriphIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
  732. {
  733. uint32_t dma_base_addr = (uint32_t)DMAx;
  734. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  735. DMA_CCR_PINC));
  736. }
  737. /**
  738. * @brief Set Memory increment mode.
  739. * @rmtoll CCR MINC LL_DMA_SetMemoryIncMode
  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. * @arg @ref LL_DMA_CHANNEL_8
  750. * @param MemoryOrM2MDstIncMode This parameter can be one of the following values:
  751. * @arg @ref LL_DMA_MEMORY_INCREMENT
  752. * @arg @ref LL_DMA_MEMORY_NOINCREMENT
  753. * @retval None
  754. */
  755. __STATIC_INLINE void LL_DMA_SetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstIncMode)
  756. {
  757. uint32_t dma_base_addr = (uint32_t)DMAx;
  758. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_MINC,
  759. MemoryOrM2MDstIncMode);
  760. }
  761. /**
  762. * @brief Get Memory increment mode.
  763. * @rmtoll CCR MINC LL_DMA_GetMemoryIncMode
  764. * @param DMAx DMAx Instance
  765. * @param Channel This parameter can be one of the following values:
  766. * @arg @ref LL_DMA_CHANNEL_1
  767. * @arg @ref LL_DMA_CHANNEL_2
  768. * @arg @ref LL_DMA_CHANNEL_3
  769. * @arg @ref LL_DMA_CHANNEL_4
  770. * @arg @ref LL_DMA_CHANNEL_5
  771. * @arg @ref LL_DMA_CHANNEL_6
  772. * @arg @ref LL_DMA_CHANNEL_7
  773. * @arg @ref LL_DMA_CHANNEL_8
  774. * @retval Returned value can be one of the following values:
  775. * @arg @ref LL_DMA_MEMORY_INCREMENT
  776. * @arg @ref LL_DMA_MEMORY_NOINCREMENT
  777. */
  778. __STATIC_INLINE uint32_t LL_DMA_GetMemoryIncMode(DMA_TypeDef *DMAx, uint32_t Channel)
  779. {
  780. uint32_t dma_base_addr = (uint32_t)DMAx;
  781. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  782. DMA_CCR_MINC));
  783. }
  784. /**
  785. * @brief Set Peripheral size.
  786. * @rmtoll CCR PSIZE LL_DMA_SetPeriphSize
  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. * @arg @ref LL_DMA_CHANNEL_8
  797. * @param PeriphOrM2MSrcDataSize This parameter can be one of the following values:
  798. * @arg @ref LL_DMA_PDATAALIGN_BYTE
  799. * @arg @ref LL_DMA_PDATAALIGN_HALFWORD
  800. * @arg @ref LL_DMA_PDATAALIGN_WORD
  801. * @retval None
  802. */
  803. __STATIC_INLINE void LL_DMA_SetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphOrM2MSrcDataSize)
  804. {
  805. uint32_t dma_base_addr = (uint32_t)DMAx;
  806. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PSIZE,
  807. PeriphOrM2MSrcDataSize);
  808. }
  809. /**
  810. * @brief Get Peripheral size.
  811. * @rmtoll CCR PSIZE LL_DMA_GetPeriphSize
  812. * @param DMAx DMAx Instance
  813. * @param Channel This parameter can be one of the following values:
  814. * @arg @ref LL_DMA_CHANNEL_1
  815. * @arg @ref LL_DMA_CHANNEL_2
  816. * @arg @ref LL_DMA_CHANNEL_3
  817. * @arg @ref LL_DMA_CHANNEL_4
  818. * @arg @ref LL_DMA_CHANNEL_5
  819. * @arg @ref LL_DMA_CHANNEL_6
  820. * @arg @ref LL_DMA_CHANNEL_7
  821. * @arg @ref LL_DMA_CHANNEL_8
  822. * @retval Returned value can be one of the following values:
  823. * @arg @ref LL_DMA_PDATAALIGN_BYTE
  824. * @arg @ref LL_DMA_PDATAALIGN_HALFWORD
  825. * @arg @ref LL_DMA_PDATAALIGN_WORD
  826. */
  827. __STATIC_INLINE uint32_t LL_DMA_GetPeriphSize(DMA_TypeDef *DMAx, uint32_t Channel)
  828. {
  829. uint32_t dma_base_addr = (uint32_t)DMAx;
  830. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  831. DMA_CCR_PSIZE));
  832. }
  833. /**
  834. * @brief Set Memory size.
  835. * @rmtoll CCR MSIZE LL_DMA_SetMemorySize
  836. * @param DMAx DMAx Instance
  837. * @param Channel This parameter can be one of the following values:
  838. * @arg @ref LL_DMA_CHANNEL_1
  839. * @arg @ref LL_DMA_CHANNEL_2
  840. * @arg @ref LL_DMA_CHANNEL_3
  841. * @arg @ref LL_DMA_CHANNEL_4
  842. * @arg @ref LL_DMA_CHANNEL_5
  843. * @arg @ref LL_DMA_CHANNEL_6
  844. * @arg @ref LL_DMA_CHANNEL_7
  845. * @arg @ref LL_DMA_CHANNEL_8
  846. * @param MemoryOrM2MDstDataSize This parameter can be one of the following values:
  847. * @arg @ref LL_DMA_MDATAALIGN_BYTE
  848. * @arg @ref LL_DMA_MDATAALIGN_HALFWORD
  849. * @arg @ref LL_DMA_MDATAALIGN_WORD
  850. * @retval None
  851. */
  852. __STATIC_INLINE void LL_DMA_SetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryOrM2MDstDataSize)
  853. {
  854. uint32_t dma_base_addr = (uint32_t)DMAx;
  855. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_MSIZE,
  856. MemoryOrM2MDstDataSize);
  857. }
  858. /**
  859. * @brief Get Memory size.
  860. * @rmtoll CCR MSIZE LL_DMA_GetMemorySize
  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. * @arg @ref LL_DMA_CHANNEL_8
  871. * @retval Returned value can be one of the following values:
  872. * @arg @ref LL_DMA_MDATAALIGN_BYTE
  873. * @arg @ref LL_DMA_MDATAALIGN_HALFWORD
  874. * @arg @ref LL_DMA_MDATAALIGN_WORD
  875. */
  876. __STATIC_INLINE uint32_t LL_DMA_GetMemorySize(DMA_TypeDef *DMAx, uint32_t Channel)
  877. {
  878. uint32_t dma_base_addr = (uint32_t)DMAx;
  879. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  880. DMA_CCR_MSIZE));
  881. }
  882. /**
  883. * @brief Set Channel priority level.
  884. * @rmtoll CCR PL LL_DMA_SetChannelPriorityLevel
  885. * @param DMAx DMAx Instance
  886. * @param Channel This parameter can be one of the following values:
  887. * @arg @ref LL_DMA_CHANNEL_1
  888. * @arg @ref LL_DMA_CHANNEL_2
  889. * @arg @ref LL_DMA_CHANNEL_3
  890. * @arg @ref LL_DMA_CHANNEL_4
  891. * @arg @ref LL_DMA_CHANNEL_5
  892. * @arg @ref LL_DMA_CHANNEL_6
  893. * @arg @ref LL_DMA_CHANNEL_7
  894. * @arg @ref LL_DMA_CHANNEL_8
  895. * @param Priority This parameter can be one of the following values:
  896. * @arg @ref LL_DMA_PRIORITY_LOW
  897. * @arg @ref LL_DMA_PRIORITY_MEDIUM
  898. * @arg @ref LL_DMA_PRIORITY_HIGH
  899. * @arg @ref LL_DMA_PRIORITY_VERYHIGH
  900. * @retval None
  901. */
  902. __STATIC_INLINE void LL_DMA_SetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Priority)
  903. {
  904. uint32_t dma_base_addr = (uint32_t)DMAx;
  905. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PL,
  906. Priority);
  907. }
  908. /**
  909. * @brief Get Channel priority level.
  910. * @rmtoll CCR PL LL_DMA_GetChannelPriorityLevel
  911. * @param DMAx DMAx Instance
  912. * @param Channel This parameter can be one of the following values:
  913. * @arg @ref LL_DMA_CHANNEL_1
  914. * @arg @ref LL_DMA_CHANNEL_2
  915. * @arg @ref LL_DMA_CHANNEL_3
  916. * @arg @ref LL_DMA_CHANNEL_4
  917. * @arg @ref LL_DMA_CHANNEL_5
  918. * @arg @ref LL_DMA_CHANNEL_6
  919. * @arg @ref LL_DMA_CHANNEL_7
  920. * @arg @ref LL_DMA_CHANNEL_8
  921. * @retval Returned value can be one of the following values:
  922. * @arg @ref LL_DMA_PRIORITY_LOW
  923. * @arg @ref LL_DMA_PRIORITY_MEDIUM
  924. * @arg @ref LL_DMA_PRIORITY_HIGH
  925. * @arg @ref LL_DMA_PRIORITY_VERYHIGH
  926. */
  927. __STATIC_INLINE uint32_t LL_DMA_GetChannelPriorityLevel(DMA_TypeDef *DMAx, uint32_t Channel)
  928. {
  929. uint32_t dma_base_addr = (uint32_t)DMAx;
  930. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  931. DMA_CCR_PL));
  932. }
  933. /**
  934. * @brief Enable the double buffer mode.
  935. * @rmtoll CR DBM LL_DMA_EnableDoubleBufferMode
  936. * @param DMAx DMAx Instance
  937. * @param Channel This parameter can be one of the following values:
  938. * @arg @ref LL_DMA_CHANNEL_1
  939. * @arg @ref LL_DMA_CHANNEL_2
  940. * @arg @ref LL_DMA_CHANNEL_3
  941. * @arg @ref LL_DMA_CHANNEL_4
  942. * @arg @ref LL_DMA_CHANNEL_5
  943. * @arg @ref LL_DMA_CHANNEL_6
  944. * @arg @ref LL_DMA_CHANNEL_7
  945. * @arg @ref LL_DMA_CHANNEL_8
  946. * @retval None
  947. */
  948. __STATIC_INLINE void LL_DMA_EnableDoubleBufferMode(DMA_TypeDef *DMAx, uint32_t Channel)
  949. {
  950. uint32_t dma_base_addr = (uint32_t)DMAx;
  951. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DBM);
  952. }
  953. /**
  954. * @brief Disable the double buffer mode.
  955. * @rmtoll CR DBM LL_DMA_DisableDoubleBufferMode
  956. * @param DMAx DMAx Instance
  957. * @param Channel This parameter can be one of the following values:
  958. * @arg @ref LL_DMA_CHANNEL_1
  959. * @arg @ref LL_DMA_CHANNEL_2
  960. * @arg @ref LL_DMA_CHANNEL_3
  961. * @arg @ref LL_DMA_CHANNEL_4
  962. * @arg @ref LL_DMA_CHANNEL_5
  963. * @arg @ref LL_DMA_CHANNEL_6
  964. * @arg @ref LL_DMA_CHANNEL_7
  965. * @arg @ref LL_DMA_CHANNEL_8
  966. * @retval None
  967. */
  968. __STATIC_INLINE void LL_DMA_DisableDoubleBufferMode(DMA_TypeDef *DMAx, uint32_t Channel)
  969. {
  970. uint32_t dma_base_addr = (uint32_t)DMAx;
  971. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DBM);
  972. }
  973. /**
  974. * @brief Check if double buffer mode is enabled or not.
  975. * @rmtoll CCR DBM LL_DMA_IsEnabledDoubleBufferMode\n
  976. * @param DMAx DMAx Instance
  977. * @param Channel This parameter can be one of the following values:
  978. * @arg @ref LL_DMA_CHANNEL_1
  979. * @arg @ref LL_DMA_CHANNEL_2
  980. * @arg @ref LL_DMA_CHANNEL_3
  981. * @arg @ref LL_DMA_CHANNEL_4
  982. * @arg @ref LL_DMA_CHANNEL_5
  983. * @arg @ref LL_DMA_CHANNEL_6
  984. * @arg @ref LL_DMA_CHANNEL_7
  985. * @arg @ref LL_DMA_CHANNEL_8
  986. * @retval State of bit (1 or 0).
  987. */
  988. __STATIC_INLINE uint32_t LL_DMA_IsEnabledDoubleBufferMode (DMA_TypeDef *DMAx, uint32_t Channel)
  989. {
  990. uint32_t dma_base_addr = (uint32_t)DMAx;
  991. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  992. DMA_CCR_DBM) == (DMA_CCR_DBM)) ? 1UL : 0UL);
  993. }
  994. /**
  995. * @brief Set Current target (only in double buffer mode) to Memory 1 or Memory 0.
  996. * @rmtoll CR CT LL_DMA_SetCurrentTargetMem
  997. * @param DMAx DMAx Instance
  998. * @param Channel This parameter can be one of the following values:
  999. * @arg @ref LL_DMA_CHANNEL_1
  1000. * @arg @ref LL_DMA_CHANNEL_2
  1001. * @arg @ref LL_DMA_CHANNEL_3
  1002. * @arg @ref LL_DMA_CHANNEL_4
  1003. * @arg @ref LL_DMA_CHANNEL_5
  1004. * @arg @ref LL_DMA_CHANNEL_6
  1005. * @arg @ref LL_DMA_CHANNEL_7
  1006. * @arg @ref LL_DMA_CHANNEL_8
  1007. * @param CurrentMemory This parameter can be one of the following values:
  1008. * @arg @ref LL_DMA_CURRENTTARGETMEM0
  1009. * @arg @ref LL_DMA_CURRENTTARGETMEM1
  1010. * @retval None
  1011. */
  1012. __STATIC_INLINE void LL_DMA_SetCurrentTargetMem(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t CurrentMemory)
  1013. {
  1014. uint32_t dma_base_addr = (uint32_t)DMAx;
  1015. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_CT, CurrentMemory);
  1016. }
  1017. /**
  1018. * @brief Get Current target (only in double buffer mode)
  1019. * @rmtoll CR CT LL_DMA_GetCurrentTargetMem
  1020. * @param DMAx DMAx Instance
  1021. * @param Channel This parameter can be one of the following values:
  1022. * @arg @ref LL_DMA_CHANNEL_1
  1023. * @arg @ref LL_DMA_CHANNEL_2
  1024. * @arg @ref LL_DMA_CHANNEL_3
  1025. * @arg @ref LL_DMA_CHANNEL_4
  1026. * @arg @ref LL_DMA_CHANNEL_5
  1027. * @arg @ref LL_DMA_CHANNEL_6
  1028. * @arg @ref LL_DMA_CHANNEL_7
  1029. * @arg @ref LL_DMA_CHANNEL_8
  1030. * @retval Returned value can be one of the following values:
  1031. * @arg @ref LL_DMA_CURRENTTARGETMEM0
  1032. * @arg @ref LL_DMA_CURRENTTARGETMEM1
  1033. */
  1034. __STATIC_INLINE uint32_t LL_DMA_GetCurrentTargetMem(DMA_TypeDef *DMAx, uint32_t Channel)
  1035. {
  1036. uint32_t dma_base_addr = (uint32_t)DMAx;
  1037. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  1038. DMA_CCR_CT));
  1039. }
  1040. #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
  1041. /**
  1042. * @brief Enable the DMA Channel secure attribute.
  1043. * @rmtoll CCR SECM LL_DMA_EnableChannelSecure\n
  1044. * @param DMAx DMAx Instance
  1045. * @param Channel This parameter can be one of the following values:
  1046. * @arg @ref LL_DMA_CHANNEL_1
  1047. * @arg @ref LL_DMA_CHANNEL_2
  1048. * @arg @ref LL_DMA_CHANNEL_3
  1049. * @arg @ref LL_DMA_CHANNEL_4
  1050. * @arg @ref LL_DMA_CHANNEL_5
  1051. * @arg @ref LL_DMA_CHANNEL_6
  1052. * @arg @ref LL_DMA_CHANNEL_7
  1053. * @arg @ref LL_DMA_CHANNEL_8
  1054. * @retval None
  1055. */
  1056. __STATIC_INLINE void LL_DMA_EnableChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1057. {
  1058. uint32_t dma_base_addr = (uint32_t)DMAx;
  1059. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SECM);
  1060. }
  1061. /**
  1062. * @brief Disable the DMA channel secure attribute.
  1063. * @rmtoll CCR SECM LL_DMA_DisableChannelSecure\n
  1064. * @param DMAx DMAx Instance
  1065. * @param Channel This parameter can be one of the following values:
  1066. * @arg @ref LL_DMA_CHANNEL_1
  1067. * @arg @ref LL_DMA_CHANNEL_2
  1068. * @arg @ref LL_DMA_CHANNEL_3
  1069. * @arg @ref LL_DMA_CHANNEL_4
  1070. * @arg @ref LL_DMA_CHANNEL_5
  1071. * @arg @ref LL_DMA_CHANNEL_6
  1072. * @arg @ref LL_DMA_CHANNEL_7
  1073. * @arg @ref LL_DMA_CHANNEL_8
  1074. * @retval None
  1075. */
  1076. __STATIC_INLINE void LL_DMA_DisableChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1077. {
  1078. uint32_t dma_base_addr = (uint32_t)DMAx;
  1079. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SECM);
  1080. }
  1081. /**
  1082. * @brief Check if DMA channel is secure or not.
  1083. * @rmtoll CCR SECM LL_DMA_IsEnabledChannelSecure\n
  1084. * @param DMAx DMAx Instance
  1085. * @param Channel This parameter can be one of the following values:
  1086. * @arg @ref LL_DMA_CHANNEL_1
  1087. * @arg @ref LL_DMA_CHANNEL_2
  1088. * @arg @ref LL_DMA_CHANNEL_3
  1089. * @arg @ref LL_DMA_CHANNEL_4
  1090. * @arg @ref LL_DMA_CHANNEL_5
  1091. * @arg @ref LL_DMA_CHANNEL_6
  1092. * @arg @ref LL_DMA_CHANNEL_7
  1093. * @arg @ref LL_DMA_CHANNEL_8
  1094. * @retval State of bit (1 or 0).
  1095. */
  1096. __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1097. {
  1098. uint32_t dma_base_addr = (uint32_t)DMAx;
  1099. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  1100. DMA_CCR_SECM) == (DMA_CCR_SECM)) ? 1UL : 0UL);
  1101. }
  1102. /**
  1103. * @brief Enable the secure attribute on DMA channel source.
  1104. * @rmtoll CCR SSEC LL_DMA_EnableChannelSrcSecure\n
  1105. * @param DMAx DMAx Instance
  1106. * @param Channel This parameter can be one of the following values:
  1107. * @arg @ref LL_DMA_CHANNEL_1
  1108. * @arg @ref LL_DMA_CHANNEL_2
  1109. * @arg @ref LL_DMA_CHANNEL_3
  1110. * @arg @ref LL_DMA_CHANNEL_4
  1111. * @arg @ref LL_DMA_CHANNEL_5
  1112. * @arg @ref LL_DMA_CHANNEL_6
  1113. * @arg @ref LL_DMA_CHANNEL_7
  1114. * @arg @ref LL_DMA_CHANNEL_8
  1115. * @retval None
  1116. */
  1117. __STATIC_INLINE void LL_DMA_EnableChannelSrcSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1118. {
  1119. uint32_t dma_base_addr = (uint32_t)DMAx;
  1120. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SSEC);
  1121. }
  1122. /**
  1123. * @brief Disable the secure attribute on DMA channel source.
  1124. * @rmtoll CCR SSEC LL_DMA_DisableChannelSrcSecure\n
  1125. * @param DMAx DMAx Instance
  1126. * @param Channel This parameter can be one of the following values:
  1127. * @arg @ref LL_DMA_CHANNEL_1
  1128. * @arg @ref LL_DMA_CHANNEL_2
  1129. * @arg @ref LL_DMA_CHANNEL_3
  1130. * @arg @ref LL_DMA_CHANNEL_4
  1131. * @arg @ref LL_DMA_CHANNEL_5
  1132. * @arg @ref LL_DMA_CHANNEL_6
  1133. * @arg @ref LL_DMA_CHANNEL_7
  1134. * @arg @ref LL_DMA_CHANNEL_8
  1135. * @retval None
  1136. */
  1137. __STATIC_INLINE void LL_DMA_DisableChannelSrcSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1138. {
  1139. uint32_t dma_base_addr = (uint32_t)DMAx;
  1140. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_SSEC);
  1141. }
  1142. /**
  1143. * @brief Check if DMA channel source attribute is secure or not.
  1144. * @rmtoll CCR SSEC LL_DMA_IsEnabledChannelSrcSecure\n
  1145. * @param DMAx DMAx Instance
  1146. * @param Channel This parameter can be one of the following values:
  1147. * @arg @ref LL_DMA_CHANNEL_1
  1148. * @arg @ref LL_DMA_CHANNEL_2
  1149. * @arg @ref LL_DMA_CHANNEL_3
  1150. * @arg @ref LL_DMA_CHANNEL_4
  1151. * @arg @ref LL_DMA_CHANNEL_5
  1152. * @arg @ref LL_DMA_CHANNEL_6
  1153. * @arg @ref LL_DMA_CHANNEL_7
  1154. * @arg @ref LL_DMA_CHANNEL_8
  1155. * @retval State of bit (1 or 0).
  1156. */
  1157. __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelSrcSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1158. {
  1159. uint32_t dma_base_addr = (uint32_t)DMAx;
  1160. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  1161. DMA_CCR_SSEC) == (DMA_CCR_SSEC)) ? 1UL : 0UL);
  1162. }
  1163. /**
  1164. * @brief Enable the secure attribute on DMA channel destination
  1165. * @rmtoll CCR DSEC LL_DMA_EnableChannelDestSecure\n
  1166. * @param DMAx DMAx Instance
  1167. * @param Channel This parameter can be one of the following values:
  1168. * @arg @ref LL_DMA_CHANNEL_1
  1169. * @arg @ref LL_DMA_CHANNEL_2
  1170. * @arg @ref LL_DMA_CHANNEL_3
  1171. * @arg @ref LL_DMA_CHANNEL_4
  1172. * @arg @ref LL_DMA_CHANNEL_5
  1173. * @arg @ref LL_DMA_CHANNEL_6
  1174. * @arg @ref LL_DMA_CHANNEL_7
  1175. * @arg @ref LL_DMA_CHANNEL_8
  1176. * @retval None
  1177. */
  1178. __STATIC_INLINE void LL_DMA_EnableChannelDestSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1179. {
  1180. uint32_t dma_base_addr = (uint32_t)DMAx;
  1181. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DSEC);
  1182. }
  1183. /**
  1184. * @brief Disable the secure attribute on DMA channel destination.
  1185. * @rmtoll CCR DSEC LL_DMA_DisableChannelDestSecure\n
  1186. * @param DMAx DMAx Instance
  1187. * @param Channel This parameter can be one of the following values:
  1188. * @arg @ref LL_DMA_CHANNEL_1
  1189. * @arg @ref LL_DMA_CHANNEL_2
  1190. * @arg @ref LL_DMA_CHANNEL_3
  1191. * @arg @ref LL_DMA_CHANNEL_4
  1192. * @arg @ref LL_DMA_CHANNEL_5
  1193. * @arg @ref LL_DMA_CHANNEL_6
  1194. * @arg @ref LL_DMA_CHANNEL_7
  1195. * @arg @ref LL_DMA_CHANNEL_8
  1196. * @retval None
  1197. */
  1198. __STATIC_INLINE void LL_DMA_DisableChannelDestSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1199. {
  1200. uint32_t dma_base_addr = (uint32_t)DMAx;
  1201. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_DSEC);
  1202. }
  1203. /**
  1204. * @brief Check if DMA channel destination attribute is secure or not.
  1205. * @rmtoll CCR DSEC LL_DMA_IsEnabledChannelDestSecure\n
  1206. * @param DMAx DMAx Instance
  1207. * @param Channel This parameter can be one of the following values:
  1208. * @arg @ref LL_DMA_CHANNEL_1
  1209. * @arg @ref LL_DMA_CHANNEL_2
  1210. * @arg @ref LL_DMA_CHANNEL_3
  1211. * @arg @ref LL_DMA_CHANNEL_4
  1212. * @arg @ref LL_DMA_CHANNEL_5
  1213. * @arg @ref LL_DMA_CHANNEL_6
  1214. * @arg @ref LL_DMA_CHANNEL_7
  1215. * @arg @ref LL_DMA_CHANNEL_8
  1216. * @retval State of bit (1 or 0).
  1217. */
  1218. __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelDestSecure(DMA_TypeDef *DMAx, uint32_t Channel)
  1219. {
  1220. uint32_t dma_base_addr = (uint32_t)DMAx;
  1221. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  1222. DMA_CCR_DSEC) == (DMA_CCR_DSEC)) ? 1UL : 0UL);
  1223. }
  1224. #endif /* __ARM_FEATURE_CMSE */
  1225. /**
  1226. * @brief Enable the privilege attribute on DMA channel.
  1227. * @rmtoll CCR PRIV LL_DMA_EnableChannelPrivilege\n
  1228. * @param DMAx DMAx Instance
  1229. * @param Channel This parameter can be one of the following values:
  1230. * @arg @ref LL_DMA_CHANNEL_1
  1231. * @arg @ref LL_DMA_CHANNEL_2
  1232. * @arg @ref LL_DMA_CHANNEL_3
  1233. * @arg @ref LL_DMA_CHANNEL_4
  1234. * @arg @ref LL_DMA_CHANNEL_5
  1235. * @arg @ref LL_DMA_CHANNEL_6
  1236. * @arg @ref LL_DMA_CHANNEL_7
  1237. * @arg @ref LL_DMA_CHANNEL_8
  1238. * @retval None
  1239. */
  1240. __STATIC_INLINE void LL_DMA_EnableChannelPrivilege(DMA_TypeDef *DMAx, uint32_t Channel)
  1241. {
  1242. uint32_t dma_base_addr = (uint32_t)DMAx;
  1243. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PRIV);
  1244. }
  1245. /**
  1246. * @brief Disable the privilege attribute on DMA channel.
  1247. * @rmtoll CCR PRIV LL_DMA_DisableChannelPrivilege\n
  1248. * @param DMAx DMAx Instance
  1249. * @param Channel This parameter can be one of the following values:
  1250. * @arg @ref LL_DMA_CHANNEL_1
  1251. * @arg @ref LL_DMA_CHANNEL_2
  1252. * @arg @ref LL_DMA_CHANNEL_3
  1253. * @arg @ref LL_DMA_CHANNEL_4
  1254. * @arg @ref LL_DMA_CHANNEL_5
  1255. * @arg @ref LL_DMA_CHANNEL_6
  1256. * @arg @ref LL_DMA_CHANNEL_7
  1257. * @arg @ref LL_DMA_CHANNEL_8
  1258. * @retval None
  1259. */
  1260. __STATIC_INLINE void LL_DMA_DisableChannelPrivilege(DMA_TypeDef *DMAx, uint32_t Channel)
  1261. {
  1262. uint32_t dma_base_addr = (uint32_t)DMAx;
  1263. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_PRIV);
  1264. }
  1265. /**
  1266. * @brief Check if DMA channel attribute is privilege or not.
  1267. * @rmtoll CCR PRIV LL_DMA_IsEnabledChannelPrivilege\n
  1268. * @param DMAx DMAx Instance
  1269. * @param Channel This parameter can be one of the following values:
  1270. * @arg @ref LL_DMA_CHANNEL_1
  1271. * @arg @ref LL_DMA_CHANNEL_2
  1272. * @arg @ref LL_DMA_CHANNEL_3
  1273. * @arg @ref LL_DMA_CHANNEL_4
  1274. * @arg @ref LL_DMA_CHANNEL_5
  1275. * @arg @ref LL_DMA_CHANNEL_6
  1276. * @arg @ref LL_DMA_CHANNEL_7
  1277. * @arg @ref LL_DMA_CHANNEL_8
  1278. * @retval State of bit (1 or 0).
  1279. */
  1280. __STATIC_INLINE uint32_t LL_DMA_IsEnabledChannelPrivilege(DMA_TypeDef *DMAx, uint32_t Channel)
  1281. {
  1282. uint32_t dma_base_addr = (uint32_t)DMAx;
  1283. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  1284. DMA_CCR_PRIV) == (DMA_CCR_PRIV)) ? 1UL : 0UL);
  1285. }
  1286. /**
  1287. * @brief Set Number of data to transfer.
  1288. * @note This action has no effect if
  1289. * channel is enabled.
  1290. * @rmtoll CNDTR NDT LL_DMA_SetDataLength
  1291. * @param DMAx DMAx Instance
  1292. * @param Channel This parameter can be one of the following values:
  1293. * @arg @ref LL_DMA_CHANNEL_1
  1294. * @arg @ref LL_DMA_CHANNEL_2
  1295. * @arg @ref LL_DMA_CHANNEL_3
  1296. * @arg @ref LL_DMA_CHANNEL_4
  1297. * @arg @ref LL_DMA_CHANNEL_5
  1298. * @arg @ref LL_DMA_CHANNEL_6
  1299. * @arg @ref LL_DMA_CHANNEL_7
  1300. * @arg @ref LL_DMA_CHANNEL_8
  1301. * @param NbData Between Min_Data = 0 and Max_Data = 0x0000FFFF
  1302. * @retval None
  1303. */
  1304. __STATIC_INLINE void LL_DMA_SetDataLength(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t NbData)
  1305. {
  1306. uint32_t dma_base_addr = (uint32_t)DMAx;
  1307. MODIFY_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CNDTR,
  1308. DMA_CNDTR_NDT, NbData);
  1309. }
  1310. /**
  1311. * @brief Get Number of data to transfer.
  1312. * @note Once the channel is enabled, the return value indicate the
  1313. * remaining bytes to be transmitted.
  1314. * @rmtoll CNDTR NDT LL_DMA_GetDataLength
  1315. * @param DMAx DMAx Instance
  1316. * @param Channel This parameter can be one of the following values:
  1317. * @arg @ref LL_DMA_CHANNEL_1
  1318. * @arg @ref LL_DMA_CHANNEL_2
  1319. * @arg @ref LL_DMA_CHANNEL_3
  1320. * @arg @ref LL_DMA_CHANNEL_4
  1321. * @arg @ref LL_DMA_CHANNEL_5
  1322. * @arg @ref LL_DMA_CHANNEL_6
  1323. * @arg @ref LL_DMA_CHANNEL_7
  1324. * @arg @ref LL_DMA_CHANNEL_8
  1325. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1326. */
  1327. __STATIC_INLINE uint32_t LL_DMA_GetDataLength(DMA_TypeDef *DMAx, uint32_t Channel)
  1328. {
  1329. uint32_t dma_base_addr = (uint32_t)DMAx;
  1330. return (READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CNDTR,
  1331. DMA_CNDTR_NDT));
  1332. }
  1333. /**
  1334. * @brief Configure the Source and Destination addresses.
  1335. * @note This API must not be called when the DMA channel is enabled.
  1336. * @note Each IP using DMA provides an API to get directly the register address (LL_PPP_DMA_GetRegAddr).
  1337. * @rmtoll CPAR PA LL_DMA_ConfigAddresses\n
  1338. * CM0AR MA LL_DMA_ConfigAddresses
  1339. * @param DMAx DMAx Instance
  1340. * @param Channel This parameter can be one of the following values:
  1341. * @arg @ref LL_DMA_CHANNEL_1
  1342. * @arg @ref LL_DMA_CHANNEL_2
  1343. * @arg @ref LL_DMA_CHANNEL_3
  1344. * @arg @ref LL_DMA_CHANNEL_4
  1345. * @arg @ref LL_DMA_CHANNEL_5
  1346. * @arg @ref LL_DMA_CHANNEL_6
  1347. * @arg @ref LL_DMA_CHANNEL_7
  1348. * @arg @ref LL_DMA_CHANNEL_8
  1349. * @param SrcAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1350. * @param DstAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1351. * @param Direction This parameter can be one of the following values:
  1352. * @arg @ref LL_DMA_DIRECTION_PERIPH_TO_MEMORY
  1353. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_PERIPH
  1354. * @arg @ref LL_DMA_DIRECTION_MEMORY_TO_MEMORY
  1355. * @retval None
  1356. */
  1357. __STATIC_INLINE void LL_DMA_ConfigAddresses(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t SrcAddress,
  1358. uint32_t DstAddress, uint32_t Direction)
  1359. {
  1360. uint32_t dma_base_addr = (uint32_t)DMAx;
  1361. /* Direction Memory to Periph */
  1362. if (Direction == LL_DMA_DIRECTION_MEMORY_TO_PERIPH)
  1363. {
  1364. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CM0AR, SrcAddress);
  1365. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, DstAddress);
  1366. }
  1367. /* Direction Periph to Memory and Memory to Memory */
  1368. else
  1369. {
  1370. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, SrcAddress);
  1371. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CM0AR, DstAddress);
  1372. }
  1373. }
  1374. /**
  1375. * @brief Set the Memory address.
  1376. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  1377. * @note This API must not be called when the DMA channel is enabled.
  1378. * @rmtoll CM0AR MA LL_DMA_SetMemoryAddress
  1379. * @param DMAx DMAx Instance
  1380. * @param Channel This parameter can be one of the following values:
  1381. * @arg @ref LL_DMA_CHANNEL_1
  1382. * @arg @ref LL_DMA_CHANNEL_2
  1383. * @arg @ref LL_DMA_CHANNEL_3
  1384. * @arg @ref LL_DMA_CHANNEL_4
  1385. * @arg @ref LL_DMA_CHANNEL_5
  1386. * @arg @ref LL_DMA_CHANNEL_6
  1387. * @arg @ref LL_DMA_CHANNEL_7
  1388. * @arg @ref LL_DMA_CHANNEL_8
  1389. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1390. * @retval None
  1391. */
  1392. __STATIC_INLINE void LL_DMA_SetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  1393. {
  1394. uint32_t dma_base_addr = (uint32_t)DMAx;
  1395. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CM0AR, MemoryAddress);
  1396. }
  1397. /**
  1398. * @brief Set the Peripheral address.
  1399. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  1400. * @note This API must not be called when the DMA channel is enabled.
  1401. * @rmtoll CPAR PA LL_DMA_SetPeriphAddress
  1402. * @param DMAx DMAx Instance
  1403. * @param Channel This parameter can be one of the following values:
  1404. * @arg @ref LL_DMA_CHANNEL_1
  1405. * @arg @ref LL_DMA_CHANNEL_2
  1406. * @arg @ref LL_DMA_CHANNEL_3
  1407. * @arg @ref LL_DMA_CHANNEL_4
  1408. * @arg @ref LL_DMA_CHANNEL_5
  1409. * @arg @ref LL_DMA_CHANNEL_6
  1410. * @arg @ref LL_DMA_CHANNEL_7
  1411. * @arg @ref LL_DMA_CHANNEL_8
  1412. * @param PeriphAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1413. * @retval None
  1414. */
  1415. __STATIC_INLINE void LL_DMA_SetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t PeriphAddress)
  1416. {
  1417. uint32_t dma_base_addr = (uint32_t)DMAx;
  1418. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, PeriphAddress);
  1419. }
  1420. /**
  1421. * @brief Get Memory address.
  1422. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  1423. * @rmtoll CM0AR MA LL_DMA_GetMemoryAddress
  1424. * @param DMAx DMAx Instance
  1425. * @param Channel This parameter can be one of the following values:
  1426. * @arg @ref LL_DMA_CHANNEL_1
  1427. * @arg @ref LL_DMA_CHANNEL_2
  1428. * @arg @ref LL_DMA_CHANNEL_3
  1429. * @arg @ref LL_DMA_CHANNEL_4
  1430. * @arg @ref LL_DMA_CHANNEL_5
  1431. * @arg @ref LL_DMA_CHANNEL_6
  1432. * @arg @ref LL_DMA_CHANNEL_7
  1433. * @arg @ref LL_DMA_CHANNEL_8
  1434. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1435. */
  1436. __STATIC_INLINE uint32_t LL_DMA_GetMemoryAddress(DMA_TypeDef *DMAx, uint32_t Channel)
  1437. {
  1438. uint32_t dma_base_addr = (uint32_t)DMAx;
  1439. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CM0AR));
  1440. }
  1441. /**
  1442. * @brief Get Peripheral address.
  1443. * @note Interface used for direction LL_DMA_DIRECTION_PERIPH_TO_MEMORY or LL_DMA_DIRECTION_MEMORY_TO_PERIPH only.
  1444. * @rmtoll CPAR PA LL_DMA_GetPeriphAddress
  1445. * @param DMAx DMAx Instance
  1446. * @param Channel This parameter can be one of the following values:
  1447. * @arg @ref LL_DMA_CHANNEL_1
  1448. * @arg @ref LL_DMA_CHANNEL_2
  1449. * @arg @ref LL_DMA_CHANNEL_3
  1450. * @arg @ref LL_DMA_CHANNEL_4
  1451. * @arg @ref LL_DMA_CHANNEL_5
  1452. * @arg @ref LL_DMA_CHANNEL_6
  1453. * @arg @ref LL_DMA_CHANNEL_7
  1454. * @arg @ref LL_DMA_CHANNEL_8
  1455. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1456. */
  1457. __STATIC_INLINE uint32_t LL_DMA_GetPeriphAddress(DMA_TypeDef *DMAx, uint32_t Channel)
  1458. {
  1459. uint32_t dma_base_addr = (uint32_t)DMAx;
  1460. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR));
  1461. }
  1462. /**
  1463. * @brief Set the Memory to Memory Source address.
  1464. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  1465. * @note This API must not be called when the DMA channel is enabled.
  1466. * @rmtoll CPAR PA LL_DMA_SetM2MSrcAddress
  1467. * @param DMAx DMAx Instance
  1468. * @param Channel This parameter can be one of the following values:
  1469. * @arg @ref LL_DMA_CHANNEL_1
  1470. * @arg @ref LL_DMA_CHANNEL_2
  1471. * @arg @ref LL_DMA_CHANNEL_3
  1472. * @arg @ref LL_DMA_CHANNEL_4
  1473. * @arg @ref LL_DMA_CHANNEL_5
  1474. * @arg @ref LL_DMA_CHANNEL_6
  1475. * @arg @ref LL_DMA_CHANNEL_7
  1476. * @arg @ref LL_DMA_CHANNEL_8
  1477. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1478. * @retval None
  1479. */
  1480. __STATIC_INLINE void LL_DMA_SetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  1481. {
  1482. uint32_t dma_base_addr = (uint32_t)DMAx;
  1483. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR, MemoryAddress);
  1484. }
  1485. /**
  1486. * @brief Set the Memory to Memory Destination address.
  1487. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  1488. * @note This API must not be called when the DMA channel is enabled.
  1489. * @rmtoll CM0AR MA LL_DMA_SetM2MDstAddress
  1490. * @param DMAx DMAx Instance
  1491. * @param Channel This parameter can be one of the following values:
  1492. * @arg @ref LL_DMA_CHANNEL_1
  1493. * @arg @ref LL_DMA_CHANNEL_2
  1494. * @arg @ref LL_DMA_CHANNEL_3
  1495. * @arg @ref LL_DMA_CHANNEL_4
  1496. * @arg @ref LL_DMA_CHANNEL_5
  1497. * @arg @ref LL_DMA_CHANNEL_6
  1498. * @arg @ref LL_DMA_CHANNEL_7
  1499. * @arg @ref LL_DMA_CHANNEL_8
  1500. * @param MemoryAddress Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1501. * @retval None
  1502. */
  1503. __STATIC_INLINE void LL_DMA_SetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  1504. {
  1505. uint32_t dma_base_addr = (uint32_t)DMAx;
  1506. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CM0AR, MemoryAddress);
  1507. }
  1508. /**
  1509. * @brief Get the Memory to Memory Source address.
  1510. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  1511. * @rmtoll CPAR PA LL_DMA_GetM2MSrcAddress
  1512. * @param DMAx DMAx Instance
  1513. * @param Channel This parameter can be one of the following values:
  1514. * @arg @ref LL_DMA_CHANNEL_1
  1515. * @arg @ref LL_DMA_CHANNEL_2
  1516. * @arg @ref LL_DMA_CHANNEL_3
  1517. * @arg @ref LL_DMA_CHANNEL_4
  1518. * @arg @ref LL_DMA_CHANNEL_5
  1519. * @arg @ref LL_DMA_CHANNEL_6
  1520. * @arg @ref LL_DMA_CHANNEL_7
  1521. * @arg @ref LL_DMA_CHANNEL_8
  1522. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1523. */
  1524. __STATIC_INLINE uint32_t LL_DMA_GetM2MSrcAddress(DMA_TypeDef *DMAx, uint32_t Channel)
  1525. {
  1526. uint32_t dma_base_addr = (uint32_t)DMAx;
  1527. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CPAR));
  1528. }
  1529. /**
  1530. * @brief Get the Memory to Memory Destination address.
  1531. * @note Interface used for direction LL_DMA_DIRECTION_MEMORY_TO_MEMORY only.
  1532. * @rmtoll CM0AR MA LL_DMA_GetM2MDstAddress
  1533. * @param DMAx DMAx Instance
  1534. * @param Channel This parameter can be one of the following values:
  1535. * @arg @ref LL_DMA_CHANNEL_1
  1536. * @arg @ref LL_DMA_CHANNEL_2
  1537. * @arg @ref LL_DMA_CHANNEL_3
  1538. * @arg @ref LL_DMA_CHANNEL_4
  1539. * @arg @ref LL_DMA_CHANNEL_5
  1540. * @arg @ref LL_DMA_CHANNEL_6
  1541. * @arg @ref LL_DMA_CHANNEL_7
  1542. * @arg @ref LL_DMA_CHANNEL_8
  1543. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1544. */
  1545. __STATIC_INLINE uint32_t LL_DMA_GetM2MDstAddress(DMA_TypeDef *DMAx, uint32_t Channel)
  1546. {
  1547. uint32_t dma_base_addr = (uint32_t)DMAx;
  1548. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CM0AR));
  1549. }
  1550. /**
  1551. * @brief Set DMA request for DMA Channels on DMAMUX Channel x.
  1552. * @note DMAMUX channel 0 to 7 are mapped to DMA1 channel 1 to 8.
  1553. * DMAMUX channel 8 to 15 are mapped to DMA2 channel 1 to 8.
  1554. * @rmtoll CxCR DMAREQ_ID LL_DMA_SetPeriphRequest
  1555. * @param DMAx DMAx Instance
  1556. * @param Channel This parameter can be one of the following values:
  1557. * @arg @ref LL_DMA_CHANNEL_1
  1558. * @arg @ref LL_DMA_CHANNEL_2
  1559. * @arg @ref LL_DMA_CHANNEL_3
  1560. * @arg @ref LL_DMA_CHANNEL_4
  1561. * @arg @ref LL_DMA_CHANNEL_5
  1562. * @arg @ref LL_DMA_CHANNEL_6
  1563. * @arg @ref LL_DMA_CHANNEL_7
  1564. * @arg @ref LL_DMA_CHANNEL_8
  1565. * @param Request This parameter can be one of the following values:
  1566. * @arg @ref LL_DMAMUX_REQ_MEM2MEM
  1567. * @arg @ref LL_DMAMUX_REQ_GENERATOR0
  1568. * @arg @ref LL_DMAMUX_REQ_GENERATOR1
  1569. * @arg @ref LL_DMAMUX_REQ_GENERATOR2
  1570. * @arg @ref LL_DMAMUX_REQ_GENERATOR3
  1571. * @arg @ref LL_DMAMUX_REQ_ADC1
  1572. * @arg @ref LL_DMAMUX_REQ_ADC2
  1573. * @arg @ref LL_DMAMUX_REQ_DAC1_CH1
  1574. * @arg @ref LL_DMAMUX_REQ_DAC1_CH2
  1575. * @arg @ref LL_DMAMUX_REQ_TIM6_UP
  1576. * @arg @ref LL_DMAMUX_REQ_TIM7_UP
  1577. * @arg @ref LL_DMAMUX_REQ_SPI1_RX
  1578. * @arg @ref LL_DMAMUX_REQ_SPI1_TX
  1579. * @arg @ref LL_DMAMUX_REQ_SPI2_RX
  1580. * @arg @ref LL_DMAMUX_REQ_SPI2_TX
  1581. * @arg @ref LL_DMAMUX_REQ_SPI3_RX
  1582. * @arg @ref LL_DMAMUX_REQ_SPI3_TX
  1583. * @arg @ref LL_DMAMUX_REQ_I2C1_RX
  1584. * @arg @ref LL_DMAMUX_REQ_I2C1_TX
  1585. * @arg @ref LL_DMAMUX_REQ_I2C2_RX
  1586. * @arg @ref LL_DMAMUX_REQ_I2C2_TX
  1587. * @arg @ref LL_DMAMUX_REQ_I2C3_RX
  1588. * @arg @ref LL_DMAMUX_REQ_I2C3_TX
  1589. * @arg @ref LL_DMAMUX_REQ_I2C4_RX
  1590. * @arg @ref LL_DMAMUX_REQ_I2C4_TX
  1591. * @arg @ref LL_DMAMUX_REQ_USART1_RX
  1592. * @arg @ref LL_DMAMUX_REQ_USART1_TX
  1593. * @arg @ref LL_DMAMUX_REQ_USART2_RX
  1594. * @arg @ref LL_DMAMUX_REQ_USART2_TX
  1595. * @arg @ref LL_DMAMUX_REQ_USART3_RX
  1596. * @arg @ref LL_DMAMUX_REQ_USART3_TX
  1597. * @arg @ref LL_DMAMUX_REQ_UART4_RX
  1598. * @arg @ref LL_DMAMUX_REQ_UART4_TX
  1599. * @arg @ref LL_DMAMUX_REQ_UART5_RX
  1600. * @arg @ref LL_DMAMUX_REQ_UART5_TX
  1601. * @arg @ref LL_DMAMUX_REQ_LPUART1_RX
  1602. * @arg @ref LL_DMAMUX_REQ_LPUART1_TX
  1603. * @arg @ref LL_DMAMUX_REQ_SAI1_A
  1604. * @arg @ref LL_DMAMUX_REQ_SAI1_B
  1605. * @arg @ref LL_DMAMUX_REQ_SAI2_A
  1606. * @arg @ref LL_DMAMUX_REQ_SAI2_B
  1607. * @arg @ref LL_DMAMUX_REQ_OSPI1
  1608. * @arg @ref LL_DMAMUX_REQ_TIM1_CH1
  1609. * @arg @ref LL_DMAMUX_REQ_TIM1_CH2
  1610. * @arg @ref LL_DMAMUX_REQ_TIM1_CH3
  1611. * @arg @ref LL_DMAMUX_REQ_TIM1_CH4
  1612. * @arg @ref LL_DMAMUX_REQ_TIM1_UP
  1613. * @arg @ref LL_DMAMUX_REQ_TIM1_TRIG
  1614. * @arg @ref LL_DMAMUX_REQ_TIM1_COM
  1615. * @arg @ref LL_DMAMUX_REQ_TIM8_CH1
  1616. * @arg @ref LL_DMAMUX_REQ_TIM8_CH2
  1617. * @arg @ref LL_DMAMUX_REQ_TIM8_CH3
  1618. * @arg @ref LL_DMAMUX_REQ_TIM8_CH4
  1619. * @arg @ref LL_DMAMUX_REQ_TIM8_UP
  1620. * @arg @ref LL_DMAMUX_REQ_TIM8_TRIG
  1621. * @arg @ref LL_DMAMUX_REQ_TIM8_COM
  1622. * @arg @ref LL_DMAMUX_REQ_TIM2_CH1
  1623. * @arg @ref LL_DMAMUX_REQ_TIM2_CH2
  1624. * @arg @ref LL_DMAMUX_REQ_TIM2_CH3
  1625. * @arg @ref LL_DMAMUX_REQ_TIM2_CH4
  1626. * @arg @ref LL_DMAMUX_REQ_TIM2_UP
  1627. * @arg @ref LL_DMAMUX_REQ_TIM3_CH1
  1628. * @arg @ref LL_DMAMUX_REQ_TIM3_CH2
  1629. * @arg @ref LL_DMAMUX_REQ_TIM3_CH3
  1630. * @arg @ref LL_DMAMUX_REQ_TIM3_CH4
  1631. * @arg @ref LL_DMAMUX_REQ_TIM3_UP
  1632. * @arg @ref LL_DMAMUX_REQ_TIM3_TRIG
  1633. * @arg @ref LL_DMAMUX_REQ_TIM4_CH1
  1634. * @arg @ref LL_DMAMUX_REQ_TIM4_CH2
  1635. * @arg @ref LL_DMAMUX_REQ_TIM4_CH3
  1636. * @arg @ref LL_DMAMUX_REQ_TIM4_CH4
  1637. * @arg @ref LL_DMAMUX_REQ_TIM4_UP
  1638. * @arg @ref LL_DMAMUX_REQ_TIM5_CH1
  1639. * @arg @ref LL_DMAMUX_REQ_TIM5_CH2
  1640. * @arg @ref LL_DMAMUX_REQ_TIM5_CH3
  1641. * @arg @ref LL_DMAMUX_REQ_TIM5_CH4
  1642. * @arg @ref LL_DMAMUX_REQ_TIM5_UP
  1643. * @arg @ref LL_DMAMUX_REQ_TIM5_TRIG
  1644. * @arg @ref LL_DMAMUX_REQ_TIM15_CH1
  1645. * @arg @ref LL_DMAMUX_REQ_TIM15_UP
  1646. * @arg @ref LL_DMAMUX_REQ_TIM15_TRIG
  1647. * @arg @ref LL_DMAMUX_REQ_TIM15_COM
  1648. * @arg @ref LL_DMAMUX_REQ_TIM16_CH1
  1649. * @arg @ref LL_DMAMUX_REQ_TIM16_UP
  1650. * @arg @ref LL_DMAMUX_REQ_TIM17_CH1
  1651. * @arg @ref LL_DMAMUX_REQ_TIM17_UP
  1652. * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT0
  1653. * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT1
  1654. * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT2
  1655. * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT3
  1656. * @arg @ref LL_DMAMUX_REQ_AES_IN
  1657. * @arg @ref LL_DMAMUX_REQ_AES_OUT
  1658. * @arg @ref LL_DMAMUX_REQ_HASH_IN
  1659. * @arg @ref LL_DMAMUX_REQ_UCPD1_TX
  1660. * @arg @ref LL_DMAMUX_REQ_UCPD1_RX
  1661. * @retval None
  1662. */
  1663. __STATIC_INLINE void LL_DMA_SetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t Request)
  1664. {
  1665. uint32_t dmamux_ccr_offset = ((((uint32_t)DMAx ^ (uint32_t)DMA1) >> 10U) * 8U);
  1666. MODIFY_REG((DMAMUX1_Channel0 + Channel + dmamux_ccr_offset)->CCR, DMAMUX_CxCR_DMAREQ_ID, Request);
  1667. }
  1668. /**
  1669. * @brief Get DMA request for DMA Channels on DMAMUX Channel x.
  1670. * @note DMAMUX channel 0 to 7 are mapped to DMA1 channel 1 to 8.
  1671. * DMAMUX channel 8 to 15 are mapped to DMA2 channel 1 to 8.
  1672. * @rmtoll CxCR DMAREQ_ID LL_DMA_GetPeriphRequest
  1673. * @param DMAx DMAx Instance
  1674. * @param Channel This parameter can be one of the following values:
  1675. * @arg @ref LL_DMA_CHANNEL_1
  1676. * @arg @ref LL_DMA_CHANNEL_2
  1677. * @arg @ref LL_DMA_CHANNEL_3
  1678. * @arg @ref LL_DMA_CHANNEL_4
  1679. * @arg @ref LL_DMA_CHANNEL_5
  1680. * @arg @ref LL_DMA_CHANNEL_6
  1681. * @arg @ref LL_DMA_CHANNEL_7
  1682. * @arg @ref LL_DMA_CHANNEL_8
  1683. * @retval Returned value can be one of the following values:
  1684. * @arg @ref LL_DMAMUX_REQ_MEM2MEM
  1685. * @arg @ref LL_DMAMUX_REQ_GENERATOR0
  1686. * @arg @ref LL_DMAMUX_REQ_GENERATOR1
  1687. * @arg @ref LL_DMAMUX_REQ_GENERATOR2
  1688. * @arg @ref LL_DMAMUX_REQ_GENERATOR3
  1689. * @arg @ref LL_DMAMUX_REQ_ADC1
  1690. * @arg @ref LL_DMAMUX_REQ_ADC2
  1691. * @arg @ref LL_DMAMUX_REQ_DAC1_CH1
  1692. * @arg @ref LL_DMAMUX_REQ_DAC1_CH2
  1693. * @arg @ref LL_DMAMUX_REQ_TIM6_UP
  1694. * @arg @ref LL_DMAMUX_REQ_TIM7_UP
  1695. * @arg @ref LL_DMAMUX_REQ_SPI1_RX
  1696. * @arg @ref LL_DMAMUX_REQ_SPI1_TX
  1697. * @arg @ref LL_DMAMUX_REQ_SPI2_RX
  1698. * @arg @ref LL_DMAMUX_REQ_SPI2_TX
  1699. * @arg @ref LL_DMAMUX_REQ_SPI3_RX
  1700. * @arg @ref LL_DMAMUX_REQ_SPI3_TX
  1701. * @arg @ref LL_DMAMUX_REQ_I2C1_RX
  1702. * @arg @ref LL_DMAMUX_REQ_I2C1_TX
  1703. * @arg @ref LL_DMAMUX_REQ_I2C2_RX
  1704. * @arg @ref LL_DMAMUX_REQ_I2C2_TX
  1705. * @arg @ref LL_DMAMUX_REQ_I2C3_RX
  1706. * @arg @ref LL_DMAMUX_REQ_I2C3_TX
  1707. * @arg @ref LL_DMAMUX_REQ_I2C4_RX
  1708. * @arg @ref LL_DMAMUX_REQ_I2C4_TX
  1709. * @arg @ref LL_DMAMUX_REQ_USART1_RX
  1710. * @arg @ref LL_DMAMUX_REQ_USART1_TX
  1711. * @arg @ref LL_DMAMUX_REQ_USART2_RX
  1712. * @arg @ref LL_DMAMUX_REQ_USART2_TX
  1713. * @arg @ref LL_DMAMUX_REQ_USART3_RX
  1714. * @arg @ref LL_DMAMUX_REQ_USART3_TX
  1715. * @arg @ref LL_DMAMUX_REQ_UART4_RX
  1716. * @arg @ref LL_DMAMUX_REQ_UART4_TX
  1717. * @arg @ref LL_DMAMUX_REQ_UART5_RX
  1718. * @arg @ref LL_DMAMUX_REQ_UART5_TX
  1719. * @arg @ref LL_DMAMUX_REQ_LPUART1_RX
  1720. * @arg @ref LL_DMAMUX_REQ_LPUART1_TX
  1721. * @arg @ref LL_DMAMUX_REQ_SAI1_A
  1722. * @arg @ref LL_DMAMUX_REQ_SAI1_B
  1723. * @arg @ref LL_DMAMUX_REQ_SAI2_A
  1724. * @arg @ref LL_DMAMUX_REQ_SAI2_B
  1725. * @arg @ref LL_DMAMUX_REQ_OSPI1
  1726. * @arg @ref LL_DMAMUX_REQ_TIM1_CH1
  1727. * @arg @ref LL_DMAMUX_REQ_TIM1_CH2
  1728. * @arg @ref LL_DMAMUX_REQ_TIM1_CH3
  1729. * @arg @ref LL_DMAMUX_REQ_TIM1_CH4
  1730. * @arg @ref LL_DMAMUX_REQ_TIM1_UP
  1731. * @arg @ref LL_DMAMUX_REQ_TIM1_TRIG
  1732. * @arg @ref LL_DMAMUX_REQ_TIM1_COM
  1733. * @arg @ref LL_DMAMUX_REQ_TIM8_CH1
  1734. * @arg @ref LL_DMAMUX_REQ_TIM8_CH2
  1735. * @arg @ref LL_DMAMUX_REQ_TIM8_CH3
  1736. * @arg @ref LL_DMAMUX_REQ_TIM8_CH4
  1737. * @arg @ref LL_DMAMUX_REQ_TIM8_UP
  1738. * @arg @ref LL_DMAMUX_REQ_TIM8_TRIG
  1739. * @arg @ref LL_DMAMUX_REQ_TIM8_COM
  1740. * @arg @ref LL_DMAMUX_REQ_TIM2_CH1
  1741. * @arg @ref LL_DMAMUX_REQ_TIM2_CH2
  1742. * @arg @ref LL_DMAMUX_REQ_TIM2_CH3
  1743. * @arg @ref LL_DMAMUX_REQ_TIM2_CH4
  1744. * @arg @ref LL_DMAMUX_REQ_TIM2_UP
  1745. * @arg @ref LL_DMAMUX_REQ_TIM3_CH1
  1746. * @arg @ref LL_DMAMUX_REQ_TIM3_CH2
  1747. * @arg @ref LL_DMAMUX_REQ_TIM3_CH3
  1748. * @arg @ref LL_DMAMUX_REQ_TIM3_CH4
  1749. * @arg @ref LL_DMAMUX_REQ_TIM3_UP
  1750. * @arg @ref LL_DMAMUX_REQ_TIM3_TRIG
  1751. * @arg @ref LL_DMAMUX_REQ_TIM4_CH1
  1752. * @arg @ref LL_DMAMUX_REQ_TIM4_CH2
  1753. * @arg @ref LL_DMAMUX_REQ_TIM4_CH3
  1754. * @arg @ref LL_DMAMUX_REQ_TIM4_CH4
  1755. * @arg @ref LL_DMAMUX_REQ_TIM4_UP
  1756. * @arg @ref LL_DMAMUX_REQ_TIM5_CH1
  1757. * @arg @ref LL_DMAMUX_REQ_TIM5_CH2
  1758. * @arg @ref LL_DMAMUX_REQ_TIM5_CH3
  1759. * @arg @ref LL_DMAMUX_REQ_TIM5_CH4
  1760. * @arg @ref LL_DMAMUX_REQ_TIM5_UP
  1761. * @arg @ref LL_DMAMUX_REQ_TIM5_TRIG
  1762. * @arg @ref LL_DMAMUX_REQ_TIM15_CH1
  1763. * @arg @ref LL_DMAMUX_REQ_TIM15_UP
  1764. * @arg @ref LL_DMAMUX_REQ_TIM15_TRIG
  1765. * @arg @ref LL_DMAMUX_REQ_TIM15_COM
  1766. * @arg @ref LL_DMAMUX_REQ_TIM16_CH1
  1767. * @arg @ref LL_DMAMUX_REQ_TIM16_UP
  1768. * @arg @ref LL_DMAMUX_REQ_TIM17_CH1
  1769. * @arg @ref LL_DMAMUX_REQ_TIM17_UP
  1770. * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT0
  1771. * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT1
  1772. * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT2
  1773. * @arg @ref LL_DMAMUX_REQ_DFSDM1_FLT3
  1774. * @arg @ref LL_DMAMUX_REQ_AES_IN
  1775. * @arg @ref LL_DMAMUX_REQ_AES_OUT
  1776. * @arg @ref LL_DMAMUX_REQ_HASH_IN
  1777. * @arg @ref LL_DMAMUX_REQ_UCPD1_TX
  1778. * @arg @ref LL_DMAMUX_REQ_UCPD1_RX
  1779. */
  1780. __STATIC_INLINE uint32_t LL_DMA_GetPeriphRequest(DMA_TypeDef *DMAx, uint32_t Channel)
  1781. {
  1782. uint32_t dmamux_ccr_offset = ((((uint32_t)DMAx ^ (uint32_t)DMA1) >> 10U) * 8U);
  1783. return (READ_BIT((DMAMUX1_Channel0 + Channel + dmamux_ccr_offset)->CCR, DMAMUX_CxCR_DMAREQ_ID));
  1784. }
  1785. /**
  1786. * @brief Set Memory 1 address (used in case of Double buffer mode).
  1787. * @rmtoll CM1AR M1A LL_DMA_SetMemory1Address
  1788. * @param DMAx DMAx Instance
  1789. * @param Channel This parameter can be one of the following values:
  1790. * @arg @ref LL_DMA_CHANNEL_1
  1791. * @arg @ref LL_DMA_CHANNEL_2
  1792. * @arg @ref LL_DMA_CHANNEL_3
  1793. * @arg @ref LL_DMA_CHANNEL_4
  1794. * @arg @ref LL_DMA_CHANNEL_5
  1795. * @arg @ref LL_DMA_CHANNEL_6
  1796. * @arg @ref LL_DMA_CHANNEL_7
  1797. * @arg @ref LL_DMA_CHANNEL_8
  1798. * @param MemoryAddress Between 0 to 0xFFFFFFFF
  1799. * @retval None
  1800. */
  1801. __STATIC_INLINE void LL_DMA_SetMemory1Address(DMA_TypeDef *DMAx, uint32_t Channel, uint32_t MemoryAddress)
  1802. {
  1803. uint32_t dma_base_addr = (uint32_t)DMAx;
  1804. WRITE_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CM1AR, MemoryAddress);
  1805. }
  1806. /**
  1807. * @brief Get Memory 1 address (used in case of Double buffer mode).
  1808. * @rmtoll CM1AR MA LL_DMA_GetMemory1Address
  1809. * @param DMAx DMAx Instance
  1810. * @param Channel This parameter can be one of the following values:
  1811. * @arg @ref LL_DMA_CHANNEL_1
  1812. * @arg @ref LL_DMA_CHANNEL_2
  1813. * @arg @ref LL_DMA_CHANNEL_3
  1814. * @arg @ref LL_DMA_CHANNEL_4
  1815. * @arg @ref LL_DMA_CHANNEL_5
  1816. * @arg @ref LL_DMA_CHANNEL_6
  1817. * @arg @ref LL_DMA_CHANNEL_7
  1818. * @arg @ref LL_DMA_CHANNEL_8
  1819. * @retval Between Min_Data = 0 and Max_Data = 0xFFFFFFFF
  1820. */
  1821. __STATIC_INLINE uint32_t LL_DMA_GetMemory1Address(DMA_TypeDef *DMAx, uint32_t Channel)
  1822. {
  1823. uint32_t dma_base_addr = (uint32_t)DMAx;
  1824. return (READ_REG(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CM1AR));
  1825. }
  1826. /**
  1827. * @}
  1828. */
  1829. /** @defgroup DMA_LL_EF_FLAG_Management FLAG_Management
  1830. * @{
  1831. */
  1832. /**
  1833. * @brief Get Channel 1 global interrupt flag.
  1834. * @rmtoll ISR GIF1 LL_DMA_IsActiveFlag_GI1
  1835. * @param DMAx DMAx Instance
  1836. * @retval State of bit (1 or 0).
  1837. */
  1838. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI1(DMA_TypeDef *DMAx)
  1839. {
  1840. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF1) == (DMA_ISR_GIF1)) ? 1UL : 0UL);
  1841. }
  1842. /**
  1843. * @brief Get Channel 2 global interrupt flag.
  1844. * @rmtoll ISR GIF2 LL_DMA_IsActiveFlag_GI2
  1845. * @param DMAx DMAx Instance
  1846. * @retval State of bit (1 or 0).
  1847. */
  1848. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI2(DMA_TypeDef *DMAx)
  1849. {
  1850. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF2) == (DMA_ISR_GIF2)) ? 1UL : 0UL);
  1851. }
  1852. /**
  1853. * @brief Get Channel 3 global interrupt flag.
  1854. * @rmtoll ISR GIF3 LL_DMA_IsActiveFlag_GI3
  1855. * @param DMAx DMAx Instance
  1856. * @retval State of bit (1 or 0).
  1857. */
  1858. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI3(DMA_TypeDef *DMAx)
  1859. {
  1860. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF3) == (DMA_ISR_GIF3)) ? 1UL : 0UL);
  1861. }
  1862. /**
  1863. * @brief Get Channel 4 global interrupt flag.
  1864. * @rmtoll ISR GIF4 LL_DMA_IsActiveFlag_GI4
  1865. * @param DMAx DMAx Instance
  1866. * @retval State of bit (1 or 0).
  1867. */
  1868. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI4(DMA_TypeDef *DMAx)
  1869. {
  1870. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF4) == (DMA_ISR_GIF4)) ? 1UL : 0UL);
  1871. }
  1872. /**
  1873. * @brief Get Channel 5 global interrupt flag.
  1874. * @rmtoll ISR GIF5 LL_DMA_IsActiveFlag_GI5
  1875. * @param DMAx DMAx Instance
  1876. * @retval State of bit (1 or 0).
  1877. */
  1878. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI5(DMA_TypeDef *DMAx)
  1879. {
  1880. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF5) == (DMA_ISR_GIF5)) ? 1UL : 0UL);
  1881. }
  1882. /**
  1883. * @brief Get Channel 6 global interrupt flag.
  1884. * @rmtoll ISR GIF6 LL_DMA_IsActiveFlag_GI6
  1885. * @param DMAx DMAx Instance
  1886. * @retval State of bit (1 or 0).
  1887. */
  1888. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI6(DMA_TypeDef *DMAx)
  1889. {
  1890. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF6) == (DMA_ISR_GIF6)) ? 1UL : 0UL);
  1891. }
  1892. /**
  1893. * @brief Get Channel 7 global interrupt flag.
  1894. * @rmtoll ISR GIF7 LL_DMA_IsActiveFlag_GI7
  1895. * @param DMAx DMAx Instance
  1896. * @retval State of bit (1 or 0).
  1897. */
  1898. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI7(DMA_TypeDef *DMAx)
  1899. {
  1900. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF7) == (DMA_ISR_GIF7)) ? 1UL : 0UL);
  1901. }
  1902. /**
  1903. * @brief Get Channel 8 global interrupt flag.
  1904. * @rmtoll ISR GIF8 LL_DMA_IsActiveFlag_GI8
  1905. * @param DMAx DMAx Instance
  1906. * @retval State of bit (1 or 0).
  1907. */
  1908. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_GI8(DMA_TypeDef *DMAx)
  1909. {
  1910. return ((READ_BIT(DMAx->ISR, DMA_ISR_GIF8) == (DMA_ISR_GIF8))? 1UL : 0UL);
  1911. }
  1912. /**
  1913. * @brief Get Channel 1 transfer complete flag.
  1914. * @rmtoll ISR TCIF1 LL_DMA_IsActiveFlag_TC1
  1915. * @param DMAx DMAx Instance
  1916. * @retval State of bit (1 or 0).
  1917. */
  1918. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC1(DMA_TypeDef *DMAx)
  1919. {
  1920. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF1) == (DMA_ISR_TCIF1)) ? 1UL : 0UL);
  1921. }
  1922. /**
  1923. * @brief Get Channel 2 transfer complete flag.
  1924. * @rmtoll ISR TCIF2 LL_DMA_IsActiveFlag_TC2
  1925. * @param DMAx DMAx Instance
  1926. * @retval State of bit (1 or 0).
  1927. */
  1928. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC2(DMA_TypeDef *DMAx)
  1929. {
  1930. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF2) == (DMA_ISR_TCIF2)) ? 1UL : 0UL);
  1931. }
  1932. /**
  1933. * @brief Get Channel 3 transfer complete flag.
  1934. * @rmtoll ISR TCIF3 LL_DMA_IsActiveFlag_TC3
  1935. * @param DMAx DMAx Instance
  1936. * @retval State of bit (1 or 0).
  1937. */
  1938. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC3(DMA_TypeDef *DMAx)
  1939. {
  1940. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF3) == (DMA_ISR_TCIF3)) ? 1UL : 0UL);
  1941. }
  1942. /**
  1943. * @brief Get Channel 4 transfer complete flag.
  1944. * @rmtoll ISR TCIF4 LL_DMA_IsActiveFlag_TC4
  1945. * @param DMAx DMAx Instance
  1946. * @retval State of bit (1 or 0).
  1947. */
  1948. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC4(DMA_TypeDef *DMAx)
  1949. {
  1950. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF4) == (DMA_ISR_TCIF4)) ? 1UL : 0UL);
  1951. }
  1952. /**
  1953. * @brief Get Channel 5 transfer complete flag.
  1954. * @rmtoll ISR TCIF5 LL_DMA_IsActiveFlag_TC5
  1955. * @param DMAx DMAx Instance
  1956. * @retval State of bit (1 or 0).
  1957. */
  1958. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC5(DMA_TypeDef *DMAx)
  1959. {
  1960. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF5) == (DMA_ISR_TCIF5)) ? 1UL : 0UL);
  1961. }
  1962. /**
  1963. * @brief Get Channel 6 transfer complete flag.
  1964. * @rmtoll ISR TCIF6 LL_DMA_IsActiveFlag_TC6
  1965. * @param DMAx DMAx Instance
  1966. * @retval State of bit (1 or 0).
  1967. */
  1968. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC6(DMA_TypeDef *DMAx)
  1969. {
  1970. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF6) == (DMA_ISR_TCIF6)) ? 1UL : 0UL);
  1971. }
  1972. /**
  1973. * @brief Get Channel 7 transfer complete flag.
  1974. * @rmtoll ISR TCIF7 LL_DMA_IsActiveFlag_TC7
  1975. * @param DMAx DMAx Instance
  1976. * @retval State of bit (1 or 0).
  1977. */
  1978. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC7(DMA_TypeDef *DMAx)
  1979. {
  1980. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF7) == (DMA_ISR_TCIF7)) ? 1UL : 0UL);
  1981. }
  1982. /**
  1983. * @brief Get Channel 8 transfer complete flag.
  1984. * @rmtoll ISR TCIF8 LL_DMA_IsActiveFlag_TC8
  1985. * @param DMAx DMAx Instance
  1986. * @retval State of bit (1 or 0).
  1987. */
  1988. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TC8(DMA_TypeDef *DMAx)
  1989. {
  1990. return ((READ_BIT(DMAx->ISR, DMA_ISR_TCIF8) == (DMA_ISR_TCIF8)) ? 1UL : 0UL);
  1991. }
  1992. /**
  1993. * @brief Get Channel 1 half transfer flag.
  1994. * @rmtoll ISR HTIF1 LL_DMA_IsActiveFlag_HT1
  1995. * @param DMAx DMAx Instance
  1996. * @retval State of bit (1 or 0).
  1997. */
  1998. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT1(DMA_TypeDef *DMAx)
  1999. {
  2000. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF1) == (DMA_ISR_HTIF1)) ? 1UL : 0UL);
  2001. }
  2002. /**
  2003. * @brief Get Channel 2 half transfer flag.
  2004. * @rmtoll ISR HTIF2 LL_DMA_IsActiveFlag_HT2
  2005. * @param DMAx DMAx Instance
  2006. * @retval State of bit (1 or 0).
  2007. */
  2008. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT2(DMA_TypeDef *DMAx)
  2009. {
  2010. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF2) == (DMA_ISR_HTIF2)) ? 1UL : 0UL);
  2011. }
  2012. /**
  2013. * @brief Get Channel 3 half transfer flag.
  2014. * @rmtoll ISR HTIF3 LL_DMA_IsActiveFlag_HT3
  2015. * @param DMAx DMAx Instance
  2016. * @retval State of bit (1 or 0).
  2017. */
  2018. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT3(DMA_TypeDef *DMAx)
  2019. {
  2020. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF3) == (DMA_ISR_HTIF3)) ? 1UL : 0UL);
  2021. }
  2022. /**
  2023. * @brief Get Channel 4 half transfer flag.
  2024. * @rmtoll ISR HTIF4 LL_DMA_IsActiveFlag_HT4
  2025. * @param DMAx DMAx Instance
  2026. * @retval State of bit (1 or 0).
  2027. */
  2028. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT4(DMA_TypeDef *DMAx)
  2029. {
  2030. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF4) == (DMA_ISR_HTIF4)) ? 1UL : 0UL);
  2031. }
  2032. /**
  2033. * @brief Get Channel 5 half transfer flag.
  2034. * @rmtoll ISR HTIF5 LL_DMA_IsActiveFlag_HT5
  2035. * @param DMAx DMAx Instance
  2036. * @retval State of bit (1 or 0).
  2037. */
  2038. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT5(DMA_TypeDef *DMAx)
  2039. {
  2040. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF5) == (DMA_ISR_HTIF5)) ? 1UL : 0UL);
  2041. }
  2042. /**
  2043. * @brief Get Channel 6 half transfer flag.
  2044. * @rmtoll ISR HTIF6 LL_DMA_IsActiveFlag_HT6
  2045. * @param DMAx DMAx Instance
  2046. * @retval State of bit (1 or 0).
  2047. */
  2048. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT6(DMA_TypeDef *DMAx)
  2049. {
  2050. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF6) == (DMA_ISR_HTIF6)) ? 1UL : 0UL);
  2051. }
  2052. /**
  2053. * @brief Get Channel 7 half transfer flag.
  2054. * @rmtoll ISR HTIF7 LL_DMA_IsActiveFlag_HT7
  2055. * @param DMAx DMAx Instance
  2056. * @retval State of bit (1 or 0).
  2057. */
  2058. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT7(DMA_TypeDef *DMAx)
  2059. {
  2060. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF7) == (DMA_ISR_HTIF7)) ? 1UL : 0UL);
  2061. }
  2062. /**
  2063. * @brief Get Channel 8 half transfer flag.
  2064. * @rmtoll ISR HTIF8 LL_DMA_IsActiveFlag_HT8
  2065. * @param DMAx DMAx Instance
  2066. * @retval State of bit (1 or 0).
  2067. */
  2068. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_HT8(DMA_TypeDef *DMAx)
  2069. {
  2070. return ((READ_BIT(DMAx->ISR, DMA_ISR_HTIF8) == (DMA_ISR_HTIF8)) ? 1UL : 0UL);
  2071. }
  2072. /**
  2073. * @brief Get Channel 1 transfer error flag.
  2074. * @rmtoll ISR TEIF1 LL_DMA_IsActiveFlag_TE1
  2075. * @param DMAx DMAx Instance
  2076. * @retval State of bit (1 or 0).
  2077. */
  2078. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE1(DMA_TypeDef *DMAx)
  2079. {
  2080. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF1) == (DMA_ISR_TEIF1)) ? 1UL : 0UL);
  2081. }
  2082. /**
  2083. * @brief Get Channel 2 transfer error flag.
  2084. * @rmtoll ISR TEIF2 LL_DMA_IsActiveFlag_TE2
  2085. * @param DMAx DMAx Instance
  2086. * @retval State of bit (1 or 0).
  2087. */
  2088. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE2(DMA_TypeDef *DMAx)
  2089. {
  2090. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF2) == (DMA_ISR_TEIF2)) ? 1UL : 0UL);
  2091. }
  2092. /**
  2093. * @brief Get Channel 3 transfer error flag.
  2094. * @rmtoll ISR TEIF3 LL_DMA_IsActiveFlag_TE3
  2095. * @param DMAx DMAx Instance
  2096. * @retval State of bit (1 or 0).
  2097. */
  2098. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE3(DMA_TypeDef *DMAx)
  2099. {
  2100. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF3) == (DMA_ISR_TEIF3)) ? 1UL : 0UL);
  2101. }
  2102. /**
  2103. * @brief Get Channel 4 transfer error flag.
  2104. * @rmtoll ISR TEIF4 LL_DMA_IsActiveFlag_TE4
  2105. * @param DMAx DMAx Instance
  2106. * @retval State of bit (1 or 0).
  2107. */
  2108. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE4(DMA_TypeDef *DMAx)
  2109. {
  2110. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF4) == (DMA_ISR_TEIF4)) ? 1UL : 0UL);
  2111. }
  2112. /**
  2113. * @brief Get Channel 5 transfer error flag.
  2114. * @rmtoll ISR TEIF5 LL_DMA_IsActiveFlag_TE5
  2115. * @param DMAx DMAx Instance
  2116. * @retval State of bit (1 or 0).
  2117. */
  2118. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE5(DMA_TypeDef *DMAx)
  2119. {
  2120. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF5) == (DMA_ISR_TEIF5)) ? 1UL : 0UL);
  2121. }
  2122. /**
  2123. * @brief Get Channel 6 transfer error flag.
  2124. * @rmtoll ISR TEIF6 LL_DMA_IsActiveFlag_TE6
  2125. * @param DMAx DMAx Instance
  2126. * @retval State of bit (1 or 0).
  2127. */
  2128. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE6(DMA_TypeDef *DMAx)
  2129. {
  2130. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF6) == (DMA_ISR_TEIF6)) ? 1UL : 0UL);
  2131. }
  2132. /**
  2133. * @brief Get Channel 7 transfer error flag.
  2134. * @rmtoll ISR TEIF7 LL_DMA_IsActiveFlag_TE7
  2135. * @param DMAx DMAx Instance
  2136. * @retval State of bit (1 or 0).
  2137. */
  2138. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE7(DMA_TypeDef *DMAx)
  2139. {
  2140. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF7) == (DMA_ISR_TEIF7)) ? 1UL : 0UL);
  2141. }
  2142. /**
  2143. * @brief Get Channel 8 transfer error flag.
  2144. * @rmtoll ISR TEIF8 LL_DMA_IsActiveFlag_TE8
  2145. * @param DMAx DMAx Instance
  2146. * @retval State of bit (1 or 0).
  2147. */
  2148. __STATIC_INLINE uint32_t LL_DMA_IsActiveFlag_TE8(DMA_TypeDef *DMAx)
  2149. {
  2150. return ((READ_BIT(DMAx->ISR, DMA_ISR_TEIF8) == (DMA_ISR_TEIF8)) ? 1UL : 0UL);
  2151. }
  2152. /**
  2153. * @brief Clear Channel 1 global interrupt flag.
  2154. * @rmtoll IFCR CGIF1 LL_DMA_ClearFlag_GI1
  2155. * @param DMAx DMAx Instance
  2156. * @retval None
  2157. */
  2158. __STATIC_INLINE void LL_DMA_ClearFlag_GI1(DMA_TypeDef *DMAx)
  2159. {
  2160. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF1);
  2161. }
  2162. /**
  2163. * @brief Clear Channel 2 global interrupt flag.
  2164. * @rmtoll IFCR CGIF2 LL_DMA_ClearFlag_GI2
  2165. * @param DMAx DMAx Instance
  2166. * @retval None
  2167. */
  2168. __STATIC_INLINE void LL_DMA_ClearFlag_GI2(DMA_TypeDef *DMAx)
  2169. {
  2170. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF2);
  2171. }
  2172. /**
  2173. * @brief Clear Channel 3 global interrupt flag.
  2174. * @rmtoll IFCR CGIF3 LL_DMA_ClearFlag_GI3
  2175. * @param DMAx DMAx Instance
  2176. * @retval None
  2177. */
  2178. __STATIC_INLINE void LL_DMA_ClearFlag_GI3(DMA_TypeDef *DMAx)
  2179. {
  2180. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF3);
  2181. }
  2182. /**
  2183. * @brief Clear Channel 4 global interrupt flag.
  2184. * @rmtoll IFCR CGIF4 LL_DMA_ClearFlag_GI4
  2185. * @param DMAx DMAx Instance
  2186. * @retval None
  2187. */
  2188. __STATIC_INLINE void LL_DMA_ClearFlag_GI4(DMA_TypeDef *DMAx)
  2189. {
  2190. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF4);
  2191. }
  2192. /**
  2193. * @brief Clear Channel 5 global interrupt flag.
  2194. * @rmtoll IFCR CGIF5 LL_DMA_ClearFlag_GI5
  2195. * @param DMAx DMAx Instance
  2196. * @retval None
  2197. */
  2198. __STATIC_INLINE void LL_DMA_ClearFlag_GI5(DMA_TypeDef *DMAx)
  2199. {
  2200. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF5);
  2201. }
  2202. /**
  2203. * @brief Clear Channel 6 global interrupt flag.
  2204. * @rmtoll IFCR CGIF6 LL_DMA_ClearFlag_GI6
  2205. * @param DMAx DMAx Instance
  2206. * @retval None
  2207. */
  2208. __STATIC_INLINE void LL_DMA_ClearFlag_GI6(DMA_TypeDef *DMAx)
  2209. {
  2210. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF6);
  2211. }
  2212. /**
  2213. * @brief Clear Channel 7 global interrupt flag.
  2214. * @rmtoll IFCR CGIF7 LL_DMA_ClearFlag_GI7
  2215. * @param DMAx DMAx Instance
  2216. * @retval None
  2217. */
  2218. __STATIC_INLINE void LL_DMA_ClearFlag_GI7(DMA_TypeDef *DMAx)
  2219. {
  2220. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF7);
  2221. }
  2222. /**
  2223. * @brief Clear Channel 8 global interrupt flag.
  2224. * @rmtoll IFCR CGIF8 LL_DMA_ClearFlag_GI8
  2225. * @param DMAx DMAx Instance
  2226. * @retval None
  2227. */
  2228. __STATIC_INLINE void LL_DMA_ClearFlag_GI8(DMA_TypeDef *DMAx)
  2229. {
  2230. WRITE_REG(DMAx->IFCR, DMA_IFCR_CGIF8);
  2231. }
  2232. /**
  2233. * @brief Clear Channel 1 transfer complete flag.
  2234. * @rmtoll IFCR CTCIF1 LL_DMA_ClearFlag_TC1
  2235. * @param DMAx DMAx Instance
  2236. * @retval None
  2237. */
  2238. __STATIC_INLINE void LL_DMA_ClearFlag_TC1(DMA_TypeDef *DMAx)
  2239. {
  2240. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF1);
  2241. }
  2242. /**
  2243. * @brief Clear Channel 2 transfer complete flag.
  2244. * @rmtoll IFCR CTCIF2 LL_DMA_ClearFlag_TC2
  2245. * @param DMAx DMAx Instance
  2246. * @retval None
  2247. */
  2248. __STATIC_INLINE void LL_DMA_ClearFlag_TC2(DMA_TypeDef *DMAx)
  2249. {
  2250. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF2);
  2251. }
  2252. /**
  2253. * @brief Clear Channel 3 transfer complete flag.
  2254. * @rmtoll IFCR CTCIF3 LL_DMA_ClearFlag_TC3
  2255. * @param DMAx DMAx Instance
  2256. * @retval None
  2257. */
  2258. __STATIC_INLINE void LL_DMA_ClearFlag_TC3(DMA_TypeDef *DMAx)
  2259. {
  2260. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF3);
  2261. }
  2262. /**
  2263. * @brief Clear Channel 4 transfer complete flag.
  2264. * @rmtoll IFCR CTCIF4 LL_DMA_ClearFlag_TC4
  2265. * @param DMAx DMAx Instance
  2266. * @retval None
  2267. */
  2268. __STATIC_INLINE void LL_DMA_ClearFlag_TC4(DMA_TypeDef *DMAx)
  2269. {
  2270. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF4);
  2271. }
  2272. /**
  2273. * @brief Clear Channel 5 transfer complete flag.
  2274. * @rmtoll IFCR CTCIF5 LL_DMA_ClearFlag_TC5
  2275. * @param DMAx DMAx Instance
  2276. * @retval None
  2277. */
  2278. __STATIC_INLINE void LL_DMA_ClearFlag_TC5(DMA_TypeDef *DMAx)
  2279. {
  2280. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF5);
  2281. }
  2282. /**
  2283. * @brief Clear Channel 6 transfer complete flag.
  2284. * @rmtoll IFCR CTCIF6 LL_DMA_ClearFlag_TC6
  2285. * @param DMAx DMAx Instance
  2286. * @retval None
  2287. */
  2288. __STATIC_INLINE void LL_DMA_ClearFlag_TC6(DMA_TypeDef *DMAx)
  2289. {
  2290. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF6);
  2291. }
  2292. /**
  2293. * @brief Clear Channel 7 transfer complete flag.
  2294. * @rmtoll IFCR CTCIF7 LL_DMA_ClearFlag_TC7
  2295. * @param DMAx DMAx Instance
  2296. * @retval None
  2297. */
  2298. __STATIC_INLINE void LL_DMA_ClearFlag_TC7(DMA_TypeDef *DMAx)
  2299. {
  2300. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF7);
  2301. }
  2302. /**
  2303. * @brief Clear Channel 8 transfer complete flag.
  2304. * @rmtoll IFCR CTCIF8 LL_DMA_ClearFlag_TC8
  2305. * @param DMAx DMAx Instance
  2306. * @retval None
  2307. */
  2308. __STATIC_INLINE void LL_DMA_ClearFlag_TC8(DMA_TypeDef *DMAx)
  2309. {
  2310. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTCIF8);
  2311. }
  2312. /**
  2313. * @brief Clear Channel 1 half transfer flag.
  2314. * @rmtoll IFCR CHTIF1 LL_DMA_ClearFlag_HT1
  2315. * @param DMAx DMAx Instance
  2316. * @retval None
  2317. */
  2318. __STATIC_INLINE void LL_DMA_ClearFlag_HT1(DMA_TypeDef *DMAx)
  2319. {
  2320. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF1);
  2321. }
  2322. /**
  2323. * @brief Clear Channel 2 half transfer flag.
  2324. * @rmtoll IFCR CHTIF2 LL_DMA_ClearFlag_HT2
  2325. * @param DMAx DMAx Instance
  2326. * @retval None
  2327. */
  2328. __STATIC_INLINE void LL_DMA_ClearFlag_HT2(DMA_TypeDef *DMAx)
  2329. {
  2330. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF2);
  2331. }
  2332. /**
  2333. * @brief Clear Channel 3 half transfer flag.
  2334. * @rmtoll IFCR CHTIF3 LL_DMA_ClearFlag_HT3
  2335. * @param DMAx DMAx Instance
  2336. * @retval None
  2337. */
  2338. __STATIC_INLINE void LL_DMA_ClearFlag_HT3(DMA_TypeDef *DMAx)
  2339. {
  2340. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF3);
  2341. }
  2342. /**
  2343. * @brief Clear Channel 4 half transfer flag.
  2344. * @rmtoll IFCR CHTIF4 LL_DMA_ClearFlag_HT4
  2345. * @param DMAx DMAx Instance
  2346. * @retval None
  2347. */
  2348. __STATIC_INLINE void LL_DMA_ClearFlag_HT4(DMA_TypeDef *DMAx)
  2349. {
  2350. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF4);
  2351. }
  2352. /**
  2353. * @brief Clear Channel 5 half transfer flag.
  2354. * @rmtoll IFCR CHTIF5 LL_DMA_ClearFlag_HT5
  2355. * @param DMAx DMAx Instance
  2356. * @retval None
  2357. */
  2358. __STATIC_INLINE void LL_DMA_ClearFlag_HT5(DMA_TypeDef *DMAx)
  2359. {
  2360. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF5);
  2361. }
  2362. /**
  2363. * @brief Clear Channel 6 half transfer flag.
  2364. * @rmtoll IFCR CHTIF6 LL_DMA_ClearFlag_HT6
  2365. * @param DMAx DMAx Instance
  2366. * @retval None
  2367. */
  2368. __STATIC_INLINE void LL_DMA_ClearFlag_HT6(DMA_TypeDef *DMAx)
  2369. {
  2370. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF6);
  2371. }
  2372. /**
  2373. * @brief Clear Channel 7 half transfer flag.
  2374. * @rmtoll IFCR CHTIF7 LL_DMA_ClearFlag_HT7
  2375. * @param DMAx DMAx Instance
  2376. * @retval None
  2377. */
  2378. __STATIC_INLINE void LL_DMA_ClearFlag_HT7(DMA_TypeDef *DMAx)
  2379. {
  2380. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF7);
  2381. }
  2382. /**
  2383. * @brief Clear Channel 8 half transfer flag.
  2384. * @rmtoll IFCR CHTIF8 LL_DMA_ClearFlag_HT8
  2385. * @param DMAx DMAx Instance
  2386. * @retval None
  2387. */
  2388. __STATIC_INLINE void LL_DMA_ClearFlag_HT8(DMA_TypeDef *DMAx)
  2389. {
  2390. WRITE_REG(DMAx->IFCR, DMA_IFCR_CHTIF8);
  2391. }
  2392. /**
  2393. * @brief Clear Channel 1 transfer error flag.
  2394. * @rmtoll IFCR CTEIF1 LL_DMA_ClearFlag_TE1
  2395. * @param DMAx DMAx Instance
  2396. * @retval None
  2397. */
  2398. __STATIC_INLINE void LL_DMA_ClearFlag_TE1(DMA_TypeDef *DMAx)
  2399. {
  2400. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF1);
  2401. }
  2402. /**
  2403. * @brief Clear Channel 2 transfer error flag.
  2404. * @rmtoll IFCR CTEIF2 LL_DMA_ClearFlag_TE2
  2405. * @param DMAx DMAx Instance
  2406. * @retval None
  2407. */
  2408. __STATIC_INLINE void LL_DMA_ClearFlag_TE2(DMA_TypeDef *DMAx)
  2409. {
  2410. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF2);
  2411. }
  2412. /**
  2413. * @brief Clear Channel 3 transfer error flag.
  2414. * @rmtoll IFCR CTEIF3 LL_DMA_ClearFlag_TE3
  2415. * @param DMAx DMAx Instance
  2416. * @retval None
  2417. */
  2418. __STATIC_INLINE void LL_DMA_ClearFlag_TE3(DMA_TypeDef *DMAx)
  2419. {
  2420. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF3);
  2421. }
  2422. /**
  2423. * @brief Clear Channel 4 transfer error flag.
  2424. * @rmtoll IFCR CTEIF4 LL_DMA_ClearFlag_TE4
  2425. * @param DMAx DMAx Instance
  2426. * @retval None
  2427. */
  2428. __STATIC_INLINE void LL_DMA_ClearFlag_TE4(DMA_TypeDef *DMAx)
  2429. {
  2430. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF4);
  2431. }
  2432. /**
  2433. * @brief Clear Channel 5 transfer error flag.
  2434. * @rmtoll IFCR CTEIF5 LL_DMA_ClearFlag_TE5
  2435. * @param DMAx DMAx Instance
  2436. * @retval None
  2437. */
  2438. __STATIC_INLINE void LL_DMA_ClearFlag_TE5(DMA_TypeDef *DMAx)
  2439. {
  2440. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF5);
  2441. }
  2442. /**
  2443. * @brief Clear Channel 6 transfer error flag.
  2444. * @rmtoll IFCR CTEIF6 LL_DMA_ClearFlag_TE6
  2445. * @param DMAx DMAx Instance
  2446. * @retval None
  2447. */
  2448. __STATIC_INLINE void LL_DMA_ClearFlag_TE6(DMA_TypeDef *DMAx)
  2449. {
  2450. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF6);
  2451. }
  2452. /**
  2453. * @brief Clear Channel 7 transfer error flag.
  2454. * @rmtoll IFCR CTEIF7 LL_DMA_ClearFlag_TE7
  2455. * @param DMAx DMAx Instance
  2456. * @retval None
  2457. */
  2458. __STATIC_INLINE void LL_DMA_ClearFlag_TE7(DMA_TypeDef *DMAx)
  2459. {
  2460. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF7);
  2461. }
  2462. /**
  2463. * @brief Clear Channel 8 transfer error flag.
  2464. * @rmtoll IFCR CTEIF8 LL_DMA_ClearFlag_TE8
  2465. * @param DMAx DMAx Instance
  2466. * @retval None
  2467. */
  2468. __STATIC_INLINE void LL_DMA_ClearFlag_TE8(DMA_TypeDef *DMAx)
  2469. {
  2470. WRITE_REG(DMAx->IFCR, DMA_IFCR_CTEIF8);
  2471. }
  2472. /**
  2473. * @}
  2474. */
  2475. /** @defgroup DMA_LL_EF_IT_Management IT_Management
  2476. * @{
  2477. */
  2478. /**
  2479. * @brief Enable Transfer complete interrupt.
  2480. * @rmtoll CCR TCIE LL_DMA_EnableIT_TC
  2481. * @param DMAx DMAx Instance
  2482. * @param Channel This parameter can be one of the following values:
  2483. * @arg @ref LL_DMA_CHANNEL_1
  2484. * @arg @ref LL_DMA_CHANNEL_2
  2485. * @arg @ref LL_DMA_CHANNEL_3
  2486. * @arg @ref LL_DMA_CHANNEL_4
  2487. * @arg @ref LL_DMA_CHANNEL_5
  2488. * @arg @ref LL_DMA_CHANNEL_6
  2489. * @arg @ref LL_DMA_CHANNEL_7
  2490. * @arg @ref LL_DMA_CHANNEL_8
  2491. * @retval None
  2492. */
  2493. __STATIC_INLINE void LL_DMA_EnableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
  2494. {
  2495. uint32_t dma_base_addr = (uint32_t)DMAx;
  2496. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
  2497. }
  2498. /**
  2499. * @brief Enable Half transfer interrupt.
  2500. * @rmtoll CCR HTIE LL_DMA_EnableIT_HT
  2501. * @param DMAx DMAx Instance
  2502. * @param Channel This parameter can be one of the following values:
  2503. * @arg @ref LL_DMA_CHANNEL_1
  2504. * @arg @ref LL_DMA_CHANNEL_2
  2505. * @arg @ref LL_DMA_CHANNEL_3
  2506. * @arg @ref LL_DMA_CHANNEL_4
  2507. * @arg @ref LL_DMA_CHANNEL_5
  2508. * @arg @ref LL_DMA_CHANNEL_6
  2509. * @arg @ref LL_DMA_CHANNEL_7
  2510. * @arg @ref LL_DMA_CHANNEL_8
  2511. * @retval None
  2512. */
  2513. __STATIC_INLINE void LL_DMA_EnableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
  2514. {
  2515. uint32_t dma_base_addr = (uint32_t)DMAx;
  2516. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
  2517. }
  2518. /**
  2519. * @brief Enable Transfer error interrupt.
  2520. * @rmtoll CCR TEIE LL_DMA_EnableIT_TE
  2521. * @param DMAx DMAx Instance
  2522. * @param Channel This parameter can be one of the following values:
  2523. * @arg @ref LL_DMA_CHANNEL_1
  2524. * @arg @ref LL_DMA_CHANNEL_2
  2525. * @arg @ref LL_DMA_CHANNEL_3
  2526. * @arg @ref LL_DMA_CHANNEL_4
  2527. * @arg @ref LL_DMA_CHANNEL_5
  2528. * @arg @ref LL_DMA_CHANNEL_6
  2529. * @arg @ref LL_DMA_CHANNEL_7
  2530. * @arg @ref LL_DMA_CHANNEL_8
  2531. * @retval None
  2532. */
  2533. __STATIC_INLINE void LL_DMA_EnableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
  2534. {
  2535. uint32_t dma_base_addr = (uint32_t)DMAx;
  2536. SET_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TEIE);
  2537. }
  2538. /**
  2539. * @brief Disable Transfer complete interrupt.
  2540. * @rmtoll CCR TCIE LL_DMA_DisableIT_TC
  2541. * @param DMAx DMAx Instance
  2542. * @param Channel This parameter can be one of the following values:
  2543. * @arg @ref LL_DMA_CHANNEL_1
  2544. * @arg @ref LL_DMA_CHANNEL_2
  2545. * @arg @ref LL_DMA_CHANNEL_3
  2546. * @arg @ref LL_DMA_CHANNEL_4
  2547. * @arg @ref LL_DMA_CHANNEL_5
  2548. * @arg @ref LL_DMA_CHANNEL_6
  2549. * @arg @ref LL_DMA_CHANNEL_7
  2550. * @arg @ref LL_DMA_CHANNEL_8
  2551. * @retval None
  2552. */
  2553. __STATIC_INLINE void LL_DMA_DisableIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
  2554. {
  2555. uint32_t dma_base_addr = (uint32_t)DMAx;
  2556. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TCIE);
  2557. }
  2558. /**
  2559. * @brief Disable Half transfer interrupt.
  2560. * @rmtoll CCR HTIE LL_DMA_DisableIT_HT
  2561. * @param DMAx DMAx Instance
  2562. * @param Channel This parameter can be one of the following values:
  2563. * @arg @ref LL_DMA_CHANNEL_1
  2564. * @arg @ref LL_DMA_CHANNEL_2
  2565. * @arg @ref LL_DMA_CHANNEL_3
  2566. * @arg @ref LL_DMA_CHANNEL_4
  2567. * @arg @ref LL_DMA_CHANNEL_5
  2568. * @arg @ref LL_DMA_CHANNEL_6
  2569. * @arg @ref LL_DMA_CHANNEL_7
  2570. * @arg @ref LL_DMA_CHANNEL_8
  2571. * @retval None
  2572. */
  2573. __STATIC_INLINE void LL_DMA_DisableIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
  2574. {
  2575. uint32_t dma_base_addr = (uint32_t)DMAx;
  2576. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_HTIE);
  2577. }
  2578. /**
  2579. * @brief Disable Transfer error interrupt.
  2580. * @rmtoll CCR TEIE LL_DMA_DisableIT_TE
  2581. * @param DMAx DMAx Instance
  2582. * @param Channel This parameter can be one of the following values:
  2583. * @arg @ref LL_DMA_CHANNEL_1
  2584. * @arg @ref LL_DMA_CHANNEL_2
  2585. * @arg @ref LL_DMA_CHANNEL_3
  2586. * @arg @ref LL_DMA_CHANNEL_4
  2587. * @arg @ref LL_DMA_CHANNEL_5
  2588. * @arg @ref LL_DMA_CHANNEL_6
  2589. * @arg @ref LL_DMA_CHANNEL_7
  2590. * @arg @ref LL_DMA_CHANNEL_8
  2591. * @retval None
  2592. */
  2593. __STATIC_INLINE void LL_DMA_DisableIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
  2594. {
  2595. uint32_t dma_base_addr = (uint32_t)DMAx;
  2596. CLEAR_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR, DMA_CCR_TEIE);
  2597. }
  2598. /**
  2599. * @brief Check if Transfer complete Interrupt is enabled.
  2600. * @rmtoll CCR TCIE LL_DMA_IsEnabledIT_TC
  2601. * @param DMAx DMAx Instance
  2602. * @param Channel This parameter can be one of the following values:
  2603. * @arg @ref LL_DMA_CHANNEL_1
  2604. * @arg @ref LL_DMA_CHANNEL_2
  2605. * @arg @ref LL_DMA_CHANNEL_3
  2606. * @arg @ref LL_DMA_CHANNEL_4
  2607. * @arg @ref LL_DMA_CHANNEL_5
  2608. * @arg @ref LL_DMA_CHANNEL_6
  2609. * @arg @ref LL_DMA_CHANNEL_7
  2610. * @arg @ref LL_DMA_CHANNEL_8
  2611. * @retval State of bit (1 or 0).
  2612. */
  2613. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TC(DMA_TypeDef *DMAx, uint32_t Channel)
  2614. {
  2615. uint32_t dma_base_addr = (uint32_t)DMAx;
  2616. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  2617. DMA_CCR_TCIE) == (DMA_CCR_TCIE)) ? 1UL : 0UL);
  2618. }
  2619. /**
  2620. * @brief Check if Half transfer Interrupt is enabled.
  2621. * @rmtoll CCR HTIE LL_DMA_IsEnabledIT_HT
  2622. * @param DMAx DMAx Instance
  2623. * @param Channel This parameter can be one of the following values:
  2624. * @arg @ref LL_DMA_CHANNEL_1
  2625. * @arg @ref LL_DMA_CHANNEL_2
  2626. * @arg @ref LL_DMA_CHANNEL_3
  2627. * @arg @ref LL_DMA_CHANNEL_4
  2628. * @arg @ref LL_DMA_CHANNEL_5
  2629. * @arg @ref LL_DMA_CHANNEL_6
  2630. * @arg @ref LL_DMA_CHANNEL_7
  2631. * @arg @ref LL_DMA_CHANNEL_8
  2632. * @retval State of bit (1 or 0).
  2633. */
  2634. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_HT(DMA_TypeDef *DMAx, uint32_t Channel)
  2635. {
  2636. uint32_t dma_base_addr = (uint32_t)DMAx;
  2637. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  2638. DMA_CCR_HTIE) == (DMA_CCR_HTIE)) ? 1UL : 0UL);
  2639. }
  2640. /**
  2641. * @brief Check if Transfer error Interrupt is enabled.
  2642. * @rmtoll CCR TEIE LL_DMA_IsEnabledIT_TE
  2643. * @param DMAx DMAx Instance
  2644. * @param Channel This parameter can be one of the following values:
  2645. * @arg @ref LL_DMA_CHANNEL_1
  2646. * @arg @ref LL_DMA_CHANNEL_2
  2647. * @arg @ref LL_DMA_CHANNEL_3
  2648. * @arg @ref LL_DMA_CHANNEL_4
  2649. * @arg @ref LL_DMA_CHANNEL_5
  2650. * @arg @ref LL_DMA_CHANNEL_6
  2651. * @arg @ref LL_DMA_CHANNEL_7
  2652. * @arg @ref LL_DMA_CHANNEL_8
  2653. * @retval State of bit (1 or 0).
  2654. */
  2655. __STATIC_INLINE uint32_t LL_DMA_IsEnabledIT_TE(DMA_TypeDef *DMAx, uint32_t Channel)
  2656. {
  2657. uint32_t dma_base_addr = (uint32_t)DMAx;
  2658. return ((READ_BIT(((DMA_Channel_TypeDef *)(dma_base_addr + CHANNEL_OFFSET_TAB[Channel]))->CCR,
  2659. DMA_CCR_TEIE) == (DMA_CCR_TEIE)) ? 1UL : 0UL);
  2660. }
  2661. /**
  2662. * @}
  2663. */
  2664. #if defined(USE_FULL_LL_DRIVER)
  2665. /** @defgroup DMA_LL_EF_Init Initialization and de-initialization functions
  2666. * @{
  2667. */
  2668. ErrorStatus LL_DMA_Init(DMA_TypeDef *DMAx, uint32_t Channel, LL_DMA_InitTypeDef *DMA_InitStruct);
  2669. ErrorStatus LL_DMA_DeInit(DMA_TypeDef *DMAx, uint32_t Channel);
  2670. void LL_DMA_StructInit(LL_DMA_InitTypeDef *DMA_InitStruct);
  2671. /**
  2672. * @}
  2673. */
  2674. #endif /* USE_FULL_LL_DRIVER */
  2675. /**
  2676. * @}
  2677. */
  2678. /**
  2679. * @}
  2680. */
  2681. #endif /* DMA1 || DMA2 */
  2682. /**
  2683. * @}
  2684. */
  2685. #ifdef __cplusplus
  2686. }
  2687. #endif
  2688. #endif /* STM32L5xx_LL_DMA_H */