stm32g4xx_ll_dma.h 102 KB

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