fm33lc0xx_fl_dma.h 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287
  1. /**
  2. *******************************************************************************************************
  3. * @file fm33lc0xx_fl_dma.h
  4. * @author FMSH Application Team
  5. * @brief Head file of DMA FL Module
  6. *******************************************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) [2021] [Fudan Microelectronics]
  10. * THIS SOFTWARE is licensed under Mulan PSL v2.
  11. * You can use this software according to the terms and conditions of the Mulan PSL v2.
  12. * You may obtain a copy of Mulan PSL v2 at:
  13. * http://license.coscl.org.cn/MulanPSL2
  14. * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
  15. * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
  16. * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  17. * See the Mulan PSL v2 for more details.
  18. *
  19. *******************************************************************************************************
  20. */
  21. /********************************************DMA channel mapping*****************************************
  22. -------------------------------------------------------------------------------------------------
  23. |Channel| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
  24. --------------------------------------------------------------------------------------------------
  25. |Func1 |ADC |UARTRX0 | SPI2RX |SPI1_RX |ADC |SPI1RX |SPI1TX |
  26. -----------------------------------------------------------------------------------------
  27. |Func2 |LPUART0RX|LPUART0TX| UARTTX0 |UARTRX0 |SPI1TX |SPI2RX |SPI2TX |
  28. --------------------------------------------------------------------------------------------------
  29. |Func3 |LPUART1TX|IICRX | UARTRX4 |UARTRX1 |SPI2TX |UARTRX1 |UARTTX1 |
  30. --------------------------------------------------------------------------------------------------
  31. |Func4 |AESIN |AESOUT | LPUART1RX|UARTTX4 |UARTTX0 |LPUART0TX |UARTTX5 |
  32. --------------------------------------------------------------------------------------------------
  33. |Func5 |CRC |ATIMCH2 | I2CTX |LPUART0RX|UARTTX1 |LPUART1RX |LPUART1TX |
  34. --------------------------------------------------------------------------------------------------
  35. |Func6 |ATIMCH1 |GTIM0CH2 | ATIMCH3 |ATIMCH4 |UARTRX5 |U7816RX |U7816TX |
  36. --------------------------------------------------------------------------------------------------
  37. |Func7 |GTIM0CH1 |GTIM1CH2 | GTIM0CH3 |GTIM0CH4 |I2CRX |GTIM1TRIG/UEV |I2CTX |
  38. --------------------------------------------------------------------------------------------------
  39. |Func8 |GTIM1CH1 |LPT32CH1 | GTIM1CH3 |GTIM1CH4 |ATIMTRIG/COM/UEV |LPT32CH2 |GTIM0TRIG\UEV |
  40. --------------------------------------------------------------------------------------------------
  41. --------------------------------------------------------------------------------------------------
  42. ********************************************DMA channel mapping*****************************************/
  43. /* Define to prevent recursive inclusion---------------------------------------------------------------*/
  44. #ifndef __FM33LC0XX_FL_DMA_H
  45. #define __FM33LC0XX_FL_DMA_H
  46. #ifdef __cplusplus
  47. extern "C" {
  48. #endif
  49. /* Includes -------------------------------------------------------------------------------------------*/
  50. #include "fm33lc0xx_fl_def.h"
  51. /** @addtogroup FM33LC0XX_FL_Driver
  52. * @{
  53. */
  54. /** @defgroup DMA DMA
  55. * @brief DMA FL driver
  56. * @{
  57. */
  58. /* Exported types -------------------------------------------------------------------------------------*/
  59. /** @defgroup DMA_FL_ES_INIT DMA Exported Init structures
  60. * @{
  61. */
  62. /**
  63. * @brief FL DMA Init Sturcture definition
  64. */
  65. typedef struct
  66. {
  67. /*! DMA外设映射地址 */
  68. uint32_t periphAddress;
  69. /*! DMA传输方向 */
  70. uint32_t direction;
  71. /*! RAM地址增长方向 */
  72. uint32_t memoryAddressIncMode;
  73. /*! RAM地址增长方向 */
  74. uint32_t flashAddressIncMode;
  75. /*! DAM传输通道数据位宽 */
  76. uint32_t dataSize;
  77. /*! DMA通道优先级 */
  78. uint32_t priority;
  79. /*! 循环模式使能 */
  80. uint32_t circMode;
  81. } FL_DMA_InitTypeDef;
  82. /**
  83. * @brief FL DMA Config Sturcture definition
  84. */
  85. typedef struct
  86. {
  87. /* DMA传输RAM地址 */
  88. uint32_t memoryAddress;
  89. /* DMA传输请求次数 */
  90. uint32_t transmissionCount;
  91. } FL_DMA_ConfigTypeDef;
  92. /**
  93. * @brief Configuration with temporary structure variable users will not be used directly
  94. */
  95. typedef struct
  96. {
  97. __IO uint32_t CHCR;
  98. __IO uint32_t CHMAD;
  99. } CHANNEL;
  100. /**
  101. * @brief Configuration with temporary structure variable users will not be used directly
  102. */
  103. typedef struct
  104. {
  105. __IO uint32_t RESV;
  106. __IO CHANNEL Channel[7];
  107. __IO uint32_t CH7CR;
  108. __IO uint32_t CH7FLSAD;
  109. __IO uint32_t CH7MAD;
  110. } DMA_ADDR;
  111. /**
  112. * @}
  113. */
  114. /* Exported constants ---------------------------------------------------------------------------------*/
  115. /** @defgroup DMA_FL_Exported_Constants DMA Exported Constants
  116. * @{
  117. */
  118. #define DMA_GCR_ADDRERR_IE_Pos (1U)
  119. #define DMA_GCR_ADDRERR_IE_Msk (0x1U << DMA_GCR_ADDRERR_IE_Pos)
  120. #define DMA_GCR_ADDRERR_IE DMA_GCR_ADDRERR_IE_Msk
  121. #define DMA_GCR_EN_Pos (0U)
  122. #define DMA_GCR_EN_Msk (0x1U << DMA_GCR_EN_Pos)
  123. #define DMA_GCR_EN DMA_GCR_EN_Msk
  124. #define DMA_CHCR_TSIZE_Pos (16U)
  125. #define DMA_CHCR_TSIZE_Msk (0xffffU << DMA_CHCR_TSIZE_Pos)
  126. #define DMA_CHCR_TSIZE DMA_CHCR_TSIZE_Msk
  127. #define DMA_CHCR_PRI_Pos (12U)
  128. #define DMA_CHCR_PRI_Msk (0x3U << DMA_CHCR_PRI_Pos)
  129. #define DMA_CHCR_PRI DMA_CHCR_PRI_Msk
  130. #define DMA_CHCR_INC_Pos (11U)
  131. #define DMA_CHCR_INC_Msk (0x1U << DMA_CHCR_INC_Pos)
  132. #define DMA_CHCR_INC DMA_CHCR_INC_Msk
  133. #define DMA_CH7CR_MEMORY_INC_Pos (9U)
  134. #define DMA_CH7CR_MEMORY_INC_Msk (0x1U << DMA_CH7CR_MEMORY_INC_Pos)
  135. #define DMA_CH7CR_MEMORY_INC DMA_CH7CR_MEMORY_INC_Msk
  136. #define DMA_CH7CR_FLASH_INC_Pos (8U)
  137. #define DMA_CH7CR_FLASH_INC_Msk (0x1U << DMA_CH7CR_FLASH_INC_Pos)
  138. #define DMA_CH7CR_FLASH_INC DMA_CH7CR_FLASH_INC_Msk
  139. #define DMA_CHCR_SSEL_Pos (8U)
  140. #define DMA_CHCR_SSEL_Msk (0x7U << DMA_CHCR_SSEL_Pos)
  141. #define DMA_CHCR_SSEL DMA_CHCR_SSEL_Msk
  142. #define DMA_CHCR_DIR_Pos (6U)
  143. #define DMA_CHCR_DIR_Msk (0x1U << DMA_CHCR_DIR_Pos)
  144. #define DMA_CHCR_DIR DMA_CHCR_DIR_Msk
  145. #define DMA_CH7CR_DIR_Pos (10U)
  146. #define DMA_CH7CR_DIR_Msk (0x1U << DMA_CH7CR_DIR_Pos)
  147. #define DMA_CH7CR_DIR DMA_CH7CR_DIR_Msk
  148. #define DMA_CHCR_BDW_Pos (4U)
  149. #define DMA_CHCR_BDW_Msk (0x3U << DMA_CHCR_BDW_Pos)
  150. #define DMA_CHCR_BDW DMA_CHCR_BDW_Msk
  151. #define DMA_CHCR_CIRC_Pos (3U)
  152. #define DMA_CHCR_CIRC_Msk (0x1U << DMA_CHCR_CIRC_Pos)
  153. #define DMA_CHCR_CIRC DMA_CHCR_CIRC_Msk
  154. #define DMA_CHCR_FTIE_Pos (2U)
  155. #define DMA_CHCR_FTIE_Msk (0x1U << DMA_CHCR_FTIE_Pos)
  156. #define DMA_CHCR_FTIE DMA_CHCR_FTIE_Msk
  157. #define DMA_CHCR_HTIE_Pos (1U)
  158. #define DMA_CHCR_HTIE_Msk (0x1U << DMA_CHCR_HTIE_Pos)
  159. #define DMA_CHCR_HTIE DMA_CHCR_HTIE_Msk
  160. #define DMA_CHCR_EN_Pos (0U)
  161. #define DMA_CHCR_EN_Msk (0x1U << DMA_CHCR_EN_Pos)
  162. #define DMA_CHCR_EN DMA_CHCR_EN_Msk
  163. #define DMA_ISR_ADDRERR_Pos (16U)
  164. #define DMA_ISR_ADDRERR_Msk (0x1U << DMA_ISR_ADDRERR_Pos)
  165. #define DMA_ISR_ADDRERR DMA_ISR_ADDRERR_Msk
  166. #define DMA_ISR_CHFT_Pos (8U)
  167. #define DMA_ISR_CHFT_Msk (0x1U << DMA_ISR_CHFT_Pos)
  168. #define DMA_ISR_CHFT DMA_ISR_CHFT_Msk
  169. #define DMA_ISR_CHHT_Pos (0U)
  170. #define DMA_ISR_CHHT_Msk (0x1U << DMA_ISR_CHHT_Pos)
  171. #define DMA_ISR_CHHT DMA_ISR_CHHT_Msk
  172. #define FL_DMA_CHANNEL_0 (0x0U << 0U)
  173. #define FL_DMA_CHANNEL_1 (0x1U << 0U)
  174. #define FL_DMA_CHANNEL_2 (0x2U << 0U)
  175. #define FL_DMA_CHANNEL_3 (0x3U << 0U)
  176. #define FL_DMA_CHANNEL_4 (0x4U << 0U)
  177. #define FL_DMA_CHANNEL_5 (0x5U << 0U)
  178. #define FL_DMA_CHANNEL_6 (0x6U << 0U)
  179. #define FL_DMA_CHANNEL_7 (0x7U << 0U)
  180. #define FL_DMA_PRIORITY_LOW (0x0U << DMA_CHCR_PRI_Pos)
  181. #define FL_DMA_PRIORITY_MEDIUM (0x1U << DMA_CHCR_PRI_Pos)
  182. #define FL_DMA_PRIORITY_HIGH (0x2U << DMA_CHCR_PRI_Pos)
  183. #define FL_DMA_PRIORITY_VERYHIGH (0x3U << DMA_CHCR_PRI_Pos)
  184. #define FL_DMA_MEMORY_INC_MODE_INCREASE (0x1U << DMA_CHCR_INC_Pos)
  185. #define FL_DMA_MEMORY_INC_MODE_DECREASE (0x0U << DMA_CHCR_INC_Pos)
  186. #define FL_DMA_CH7_MEMORY_INC_MODE_INCREASE (0x1U << DMA_CH7CR_MEMORY_INC_Pos)
  187. #define FL_DMA_CH7_MEMORY_INC_MODE_DECREASE (0x0U << DMA_CH7CR_MEMORY_INC_Pos)
  188. #define FL_DMA_CH7_FLASH_INC_MODE_INCREASE (0x1U << DMA_CH7CR_FLASH_INC_Pos)
  189. #define FL_DMA_CH7_FLASH_INC_MODE_DECREASE (0x0U << DMA_CH7CR_FLASH_INC_Pos)
  190. #define FL_DMA_FLASH_INC_MODE_INCREASE (0x1U << DMA_CH7CR_FLASH_INC_Pos)
  191. #define FL_DMA_FLASH_INC_MODE_DECREASE (0x0U << DMA_CH7CR_FLASH_INC_Pos)
  192. #define FL_DMA_PERIPHERAL_FUNCTION1 (0x0U << DMA_CHCR_SSEL_Pos)
  193. #define FL_DMA_PERIPHERAL_FUNCTION2 (0x1U << DMA_CHCR_SSEL_Pos)
  194. #define FL_DMA_PERIPHERAL_FUNCTION3 (0x2U << DMA_CHCR_SSEL_Pos)
  195. #define FL_DMA_PERIPHERAL_FUNCTION4 (0x3U << DMA_CHCR_SSEL_Pos)
  196. #define FL_DMA_PERIPHERAL_FUNCTION5 (0x4U << DMA_CHCR_SSEL_Pos)
  197. #define FL_DMA_PERIPHERAL_FUNCTION6 (0x5U << DMA_CHCR_SSEL_Pos)
  198. #define FL_DMA_PERIPHERAL_FUNCTION7 (0x6U << DMA_CHCR_SSEL_Pos)
  199. #define FL_DMA_PERIPHERAL_FUNCTION8 (0x7U << DMA_CHCR_SSEL_Pos)
  200. #define FL_DMA_DIR_PERIPHERAL_TO_RAM (0x0U << DMA_CHCR_DIR_Pos)
  201. #define FL_DMA_DIR_RAM_TO_PERIPHERAL (0x1U << DMA_CHCR_DIR_Pos)
  202. #define FL_DMA_DIR_FLASH_TO_RAM (0x1U << DMA_CH7CR_DIR_Pos)
  203. #define FL_DMA_DIR_RAM_TO_FLASH (0x0U << DMA_CH7CR_DIR_Pos)
  204. #define FL_DMA_BANDWIDTH_8B (0x0U << DMA_CHCR_BDW_Pos)
  205. #define FL_DMA_BANDWIDTH_16B (0x1U << DMA_CHCR_BDW_Pos)
  206. #define FL_DMA_BANDWIDTH_32B (0x2U << DMA_CHCR_BDW_Pos)
  207. /**
  208. * @}
  209. */
  210. /* Exported functions ---------------------------------------------------------------------------------*/
  211. /** @defgroup DMA_FL_Exported_Functions DMA Exported Functions
  212. * @{
  213. */
  214. /**
  215. * @brief DMA address error interrupt enable
  216. * @rmtoll GCR ADDRERR_IE FL_DMA_EnableIT_AddressError
  217. * @param DMAx DMA instance
  218. * @retval None
  219. */
  220. __STATIC_INLINE void FL_DMA_EnableIT_AddressError(DMA_Type *DMAx)
  221. {
  222. SET_BIT(DMAx->GCR, DMA_GCR_ADDRERR_IE_Msk);
  223. }
  224. /**
  225. * @brief Get DMA address error interrupt enable status
  226. * @rmtoll GCR ADDRERR_IE FL_DMA_IsEnabledIT_AddressError
  227. * @param DMAx DMA instance
  228. * @retval State of bit (1 or 0).
  229. */
  230. __STATIC_INLINE uint32_t FL_DMA_IsEnabledIT_AddressError(DMA_Type *DMAx)
  231. {
  232. return (uint32_t)(READ_BIT(DMAx->GCR, DMA_GCR_ADDRERR_IE_Msk) == DMA_GCR_ADDRERR_IE_Msk);
  233. }
  234. /**
  235. * @brief DMA address error interrupt disable
  236. * @rmtoll GCR ADDRERR_IE FL_DMA_DisableIT_AddressError
  237. * @param DMAx DMA instance
  238. * @retval None
  239. */
  240. __STATIC_INLINE void FL_DMA_DisableIT_AddressError(DMA_Type *DMAx)
  241. {
  242. CLEAR_BIT(DMAx->GCR, DMA_GCR_ADDRERR_IE_Msk);
  243. }
  244. /**
  245. * @brief DMA enable
  246. * @rmtoll GCR EN FL_DMA_Enable
  247. * @param DMAx DMA instance
  248. * @retval None
  249. */
  250. __STATIC_INLINE void FL_DMA_Enable(DMA_Type *DMAx)
  251. {
  252. SET_BIT(DMAx->GCR, DMA_GCR_EN_Msk);
  253. }
  254. /**
  255. * @brief Get DMA enable status
  256. * @rmtoll GCR EN FL_DMA_IsEnabled
  257. * @param DMAx DMA instance
  258. * @retval State of bit (1 or 0).
  259. */
  260. __STATIC_INLINE uint32_t FL_DMA_IsEnabled(DMA_Type *DMAx)
  261. {
  262. return (uint32_t)(READ_BIT(DMAx->GCR, DMA_GCR_EN_Msk) == DMA_GCR_EN_Msk);
  263. }
  264. /**
  265. * @brief DMA disable
  266. * @rmtoll GCR EN FL_DMA_Disable
  267. * @param DMAx DMA instance
  268. * @retval None
  269. */
  270. __STATIC_INLINE void FL_DMA_Disable(DMA_Type *DMAx)
  271. {
  272. CLEAR_BIT(DMAx->GCR, DMA_GCR_EN_Msk);
  273. }
  274. /**
  275. * @brief Set channelx transmission length
  276. * @rmtoll CHCR TSIZE FL_DMA_WriteTransmissionSize
  277. * @param DMAx DMA instance
  278. * @param size
  279. * @param channel This parameter can be one of the following values:
  280. * @arg @ref FL_DMA_CHANNEL_0
  281. * @arg @ref FL_DMA_CHANNEL_1
  282. * @arg @ref FL_DMA_CHANNEL_2
  283. * @arg @ref FL_DMA_CHANNEL_3
  284. * @arg @ref FL_DMA_CHANNEL_4
  285. * @arg @ref FL_DMA_CHANNEL_5
  286. * @arg @ref FL_DMA_CHANNEL_6
  287. * @arg @ref FL_DMA_CHANNEL_7
  288. * @retval None
  289. */
  290. __STATIC_INLINE void FL_DMA_WriteTransmissionSize(DMA_Type *DMAx, uint32_t size, uint32_t channel)
  291. {
  292. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  293. if(channel <= FL_DMA_CHANNEL_6)
  294. {
  295. MODIFY_REG(Temp->Channel[channel].CHCR, (0xffffU << 16U), (size << 16U));
  296. }
  297. else
  298. {
  299. MODIFY_REG(Temp->CH7CR, (0xffffU << 16U), (size << 16U));
  300. }
  301. }
  302. /**
  303. * @brief Get channelx transmission length
  304. * @rmtoll CHCR TSIZE FL_DMA_ReadTransmissionSize
  305. * @param DMAx DMA instance
  306. * @param channel This parameter can be one of the following values:
  307. * @arg @ref FL_DMA_CHANNEL_0
  308. * @arg @ref FL_DMA_CHANNEL_1
  309. * @arg @ref FL_DMA_CHANNEL_2
  310. * @arg @ref FL_DMA_CHANNEL_3
  311. * @arg @ref FL_DMA_CHANNEL_4
  312. * @arg @ref FL_DMA_CHANNEL_5
  313. * @arg @ref FL_DMA_CHANNEL_6
  314. * @arg @ref FL_DMA_CHANNEL_7
  315. * @retval
  316. */
  317. __STATIC_INLINE uint32_t FL_DMA_ReadTransmissionSize(DMA_Type *DMAx, uint32_t channel)
  318. {
  319. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  320. if(channel <= FL_DMA_CHANNEL_6)
  321. {
  322. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, 0xffffU) >> 16U);
  323. }
  324. else
  325. {
  326. return (uint32_t)(READ_BIT(Temp->CH7CR, 0xffffU) >> 16U);
  327. }
  328. }
  329. /**
  330. * @brief Set channelx priority
  331. * @rmtoll CHCR PRI FL_DMA_SetPriority
  332. * @param DMAx DMA instance
  333. * @param priority This parameter can be one of the following values:
  334. * @arg @ref FL_DMA_PRIORITY_LOW
  335. * @arg @ref FL_DMA_PRIORITY_MEDIUM
  336. * @arg @ref FL_DMA_PRIORITY_HIGH
  337. * @arg @ref FL_DMA_PRIORITY_VERYHIGH
  338. * @param channel This parameter can be one of the following values:
  339. * @arg @ref FL_DMA_CHANNEL_0
  340. * @arg @ref FL_DMA_CHANNEL_1
  341. * @arg @ref FL_DMA_CHANNEL_2
  342. * @arg @ref FL_DMA_CHANNEL_3
  343. * @arg @ref FL_DMA_CHANNEL_4
  344. * @arg @ref FL_DMA_CHANNEL_5
  345. * @arg @ref FL_DMA_CHANNEL_6
  346. * @arg @ref FL_DMA_CHANNEL_7
  347. * @retval None
  348. */
  349. __STATIC_INLINE void FL_DMA_SetPriority(DMA_Type *DMAx, uint32_t priority, uint32_t channel)
  350. {
  351. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  352. if(channel <= FL_DMA_CHANNEL_6)
  353. {
  354. MODIFY_REG(Temp->Channel[channel].CHCR, DMA_CHCR_PRI_Msk, priority);
  355. }
  356. else
  357. {
  358. MODIFY_REG(Temp->CH7CR, DMA_CHCR_PRI_Msk, priority);
  359. }
  360. }
  361. /**
  362. * @brief Get channelx priority
  363. * @rmtoll CHCR PRI FL_DMA_GetPriority
  364. * @param DMAx DMA instance
  365. * @param channel This parameter can be one of the following values:
  366. * @arg @ref FL_DMA_CHANNEL_0
  367. * @arg @ref FL_DMA_CHANNEL_1
  368. * @arg @ref FL_DMA_CHANNEL_2
  369. * @arg @ref FL_DMA_CHANNEL_3
  370. * @arg @ref FL_DMA_CHANNEL_4
  371. * @arg @ref FL_DMA_CHANNEL_5
  372. * @arg @ref FL_DMA_CHANNEL_6
  373. * @arg @ref FL_DMA_CHANNEL_7
  374. * @retval Returned value can be one of the following values:
  375. * @arg @ref FL_DMA_PRIORITY_LOW
  376. * @arg @ref FL_DMA_PRIORITY_MEDIUM
  377. * @arg @ref FL_DMA_PRIORITY_HIGH
  378. * @arg @ref FL_DMA_PRIORITY_VERYHIGH
  379. */
  380. __STATIC_INLINE uint32_t FL_DMA_GetPriority(DMA_Type *DMAx, uint32_t channel)
  381. {
  382. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  383. if(channel <= FL_DMA_CHANNEL_6)
  384. {
  385. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_PRI_Msk));
  386. }
  387. else
  388. {
  389. return (uint32_t)(READ_BIT(Temp->CH7CR, DMA_CHCR_PRI_Msk));
  390. }
  391. }
  392. /**
  393. * @brief Set channelx RAM address incremental
  394. * @rmtoll CHCR INC FL_DMA_SetMemoryIncrementMode
  395. * @param DMAx DMA instance
  396. * @param mode This parameter can be one of the following values:
  397. * @arg @ref FL_DMA_MEMORY_INC_MODE_INCREASE
  398. * @arg @ref FL_DMA_MEMORY_INC_MODE_DECREASE
  399. * @param channel This parameter can be one of the following values:
  400. * @arg @ref FL_DMA_CHANNEL_0
  401. * @arg @ref FL_DMA_CHANNEL_1
  402. * @arg @ref FL_DMA_CHANNEL_2
  403. * @arg @ref FL_DMA_CHANNEL_3
  404. * @arg @ref FL_DMA_CHANNEL_4
  405. * @arg @ref FL_DMA_CHANNEL_5
  406. * @arg @ref FL_DMA_CHANNEL_6
  407. * @arg @ref FL_DMA_CHANNEL_7
  408. * @retval None
  409. */
  410. __STATIC_INLINE void FL_DMA_SetMemoryIncrementMode(DMA_Type *DMAx, uint32_t mode, uint32_t channel)
  411. {
  412. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  413. if(channel <= FL_DMA_CHANNEL_6)
  414. {
  415. MODIFY_REG(Temp->Channel[channel].CHCR, DMA_CHCR_INC_Msk, mode);
  416. }
  417. else
  418. {
  419. MODIFY_REG(Temp->CH7CR, DMA_CH7CR_MEMORY_INC_Msk, mode);
  420. }
  421. }
  422. /**
  423. * @brief Get channelx RAM address incremental status
  424. * @rmtoll CHCR INC FL_DMA_GetMemoryIncrementMode
  425. * @param DMAx DMA instance
  426. * @param channel This parameter can be one of the following values:
  427. * @arg @ref FL_DMA_CHANNEL_0
  428. * @arg @ref FL_DMA_CHANNEL_1
  429. * @arg @ref FL_DMA_CHANNEL_2
  430. * @arg @ref FL_DMA_CHANNEL_3
  431. * @arg @ref FL_DMA_CHANNEL_4
  432. * @arg @ref FL_DMA_CHANNEL_5
  433. * @arg @ref FL_DMA_CHANNEL_6
  434. * @arg @ref FL_DMA_CHANNEL_7
  435. * @retval Returned value can be one of the following values:
  436. * @arg @ref FL_DMA_MEMORY_INC_MODE_INCREASE
  437. * @arg @ref FL_DMA_MEMORY_INC_MODE_DECREASE
  438. */
  439. __STATIC_INLINE uint32_t FL_DMA_GetMemoryIncrementMode(DMA_Type *DMAx, uint32_t channel)
  440. {
  441. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  442. if(channel <= FL_DMA_CHANNEL_6)
  443. {
  444. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_INC_Msk));
  445. }
  446. else
  447. {
  448. return (uint32_t)(READ_BIT(Temp->CH7CR, DMA_CH7CR_MEMORY_INC_Msk));
  449. }
  450. }
  451. /**
  452. * @brief Set channel7 FLASH address incremental
  453. * @rmtoll CH7CR FLASH_INC FL_DMA_SetFlashIncrementMode
  454. * @param DMAx DMA instance
  455. * @param mode This parameter can be one of the following values:
  456. * @arg @ref FL_DMA_FLASH_INC_MODE_INCREASE
  457. * @arg @ref FL_DMA_FLASH_INC_MODE_DECREASE
  458. * @retval None
  459. */
  460. __STATIC_INLINE void FL_DMA_SetFlashIncrementMode(DMA_Type *DMAx, uint32_t mode)
  461. {
  462. MODIFY_REG(DMAx->CH7CR, DMA_CH7CR_FLASH_INC_Msk, mode);
  463. }
  464. /**
  465. * @brief Get channel7 FLASH address incremental status
  466. * @rmtoll CH7CR FLASH_INC FL_DMA_GetFlashIncrementMode
  467. * @param DMAx DMA instance
  468. * @retval Returned value can be one of the following values:
  469. * @arg @ref FL_DMA_FLASH_INC_MODE_INCREASE
  470. * @arg @ref FL_DMA_FLASH_INC_MODE_DECREASE
  471. */
  472. __STATIC_INLINE uint32_t FL_DMA_GetFlashIncrementMode(DMA_Type *DMAx)
  473. {
  474. return (uint32_t)(READ_BIT(DMAx->CH7CR, DMA_CH7CR_FLASH_INC_Msk));
  475. }
  476. /**
  477. * @brief Channelx request source select
  478. * @rmtoll CHCR SSEL FL_DMA_SetPeripheralMap
  479. * @param DMAx DMA instance
  480. * @param peripheral This parameter can be one of the following values:
  481. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION1
  482. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION2
  483. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION3
  484. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION4
  485. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION5
  486. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION6
  487. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION7
  488. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION8
  489. * @param channel This parameter can be one of the following values:
  490. * @arg @ref FL_DMA_CHANNEL_0
  491. * @arg @ref FL_DMA_CHANNEL_1
  492. * @arg @ref FL_DMA_CHANNEL_2
  493. * @arg @ref FL_DMA_CHANNEL_3
  494. * @arg @ref FL_DMA_CHANNEL_4
  495. * @arg @ref FL_DMA_CHANNEL_5
  496. * @arg @ref FL_DMA_CHANNEL_6
  497. * @arg @ref FL_DMA_CHANNEL_7
  498. * @retval None
  499. */
  500. __STATIC_INLINE void FL_DMA_SetPeripheralMap(DMA_Type *DMAx, uint32_t peripheral, uint32_t channel)
  501. {
  502. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  503. if(channel <= FL_DMA_CHANNEL_6)
  504. {
  505. MODIFY_REG(Temp->Channel[channel].CHCR, DMA_CHCR_SSEL_Msk, peripheral);
  506. }
  507. }
  508. /**
  509. * @brief Get Channelx request source select status
  510. * @rmtoll CHCR SSEL FL_DMA_GetPeripheralMap
  511. * @param DMAx DMA instance
  512. * @param channel This parameter can be one of the following values:
  513. * @arg @ref FL_DMA_CHANNEL_0
  514. * @arg @ref FL_DMA_CHANNEL_1
  515. * @arg @ref FL_DMA_CHANNEL_2
  516. * @arg @ref FL_DMA_CHANNEL_3
  517. * @arg @ref FL_DMA_CHANNEL_4
  518. * @arg @ref FL_DMA_CHANNEL_5
  519. * @arg @ref FL_DMA_CHANNEL_6
  520. * @arg @ref FL_DMA_CHANNEL_7
  521. * @retval Returned value can be one of the following values:
  522. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION1
  523. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION2
  524. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION3
  525. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION4
  526. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION5
  527. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION6
  528. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION7
  529. * @arg @ref FL_DMA_PERIPHERAL_FUNCTION8
  530. */
  531. __STATIC_INLINE uint32_t FL_DMA_GetPeripheralMap(DMA_Type *DMAx, uint32_t channel)
  532. {
  533. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  534. if(channel <= FL_DMA_CHANNEL_6)
  535. {
  536. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_SSEL_Msk));
  537. }
  538. return 0;
  539. }
  540. /**
  541. * @brief Set channelx transmit direction
  542. * @rmtoll CHCR DIR FL_DMA_SetTransmissionDirection
  543. * @param DMAx DMA instance
  544. * @param direction This parameter can be one of the following values:
  545. * @arg @ref FL_DMA_DIR_PERIPHERAL_TO_RAM
  546. * @arg @ref FL_DMA_DIR_RAM_TO_PERIPHERAL
  547. * @param channel This parameter can be one of the following values:
  548. * @arg @ref FL_DMA_CHANNEL_0
  549. * @arg @ref FL_DMA_CHANNEL_1
  550. * @arg @ref FL_DMA_CHANNEL_2
  551. * @arg @ref FL_DMA_CHANNEL_3
  552. * @arg @ref FL_DMA_CHANNEL_4
  553. * @arg @ref FL_DMA_CHANNEL_5
  554. * @arg @ref FL_DMA_CHANNEL_6
  555. * @arg @ref FL_DMA_CHANNEL_7
  556. * @retval None
  557. */
  558. __STATIC_INLINE void FL_DMA_SetTransmissionDirection(DMA_Type *DMAx, uint32_t direction, uint32_t channel)
  559. {
  560. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  561. if(channel <= FL_DMA_CHANNEL_6)
  562. {
  563. MODIFY_REG(Temp->Channel[channel].CHCR, DMA_CHCR_DIR_Msk, direction);
  564. }
  565. else
  566. {
  567. MODIFY_REG(Temp->CH7CR, DMA_CH7CR_DIR_Msk, direction);
  568. }
  569. }
  570. /**
  571. * @brief Get channelx transmit direction
  572. * @rmtoll CHCR DIR FL_DMA_GetTransmissionDirection
  573. * @param DMAx DMA instance
  574. * @param channel This parameter can be one of the following values:
  575. * @arg @ref FL_DMA_CHANNEL_0
  576. * @arg @ref FL_DMA_CHANNEL_1
  577. * @arg @ref FL_DMA_CHANNEL_2
  578. * @arg @ref FL_DMA_CHANNEL_3
  579. * @arg @ref FL_DMA_CHANNEL_4
  580. * @arg @ref FL_DMA_CHANNEL_5
  581. * @arg @ref FL_DMA_CHANNEL_6
  582. * @arg @ref FL_DMA_CHANNEL_7
  583. * @retval Returned value can be one of the following values:
  584. * @arg @ref FL_DMA_DIR_PERIPHERAL_TO_RAM
  585. * @arg @ref FL_DMA_DIR_RAM_TO_PERIPHERAL
  586. */
  587. __STATIC_INLINE uint32_t FL_DMA_GetTransmissionDirection(DMA_Type *DMAx, uint32_t channel)
  588. {
  589. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  590. if(channel <= FL_DMA_CHANNEL_6)
  591. {
  592. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_DIR_Msk));
  593. }
  594. else
  595. {
  596. return (uint32_t)(READ_BIT(Temp->CH7CR, DMA_CH7CR_DIR_Msk));
  597. }
  598. }
  599. /**
  600. * @brief Set transmit bandwidth
  601. * @rmtoll CHCR BDW FL_DMA_SetBandwidth
  602. * @param DMAx DMA instance
  603. * @param bandwidth This parameter can be one of the following values:
  604. * @arg @ref FL_DMA_BANDWIDTH_8B
  605. * @arg @ref FL_DMA_BANDWIDTH_16B
  606. * @arg @ref FL_DMA_BANDWIDTH_32B
  607. * @param channel This parameter can be one of the following values:
  608. * @arg @ref FL_DMA_CHANNEL_0
  609. * @arg @ref FL_DMA_CHANNEL_1
  610. * @arg @ref FL_DMA_CHANNEL_2
  611. * @arg @ref FL_DMA_CHANNEL_3
  612. * @arg @ref FL_DMA_CHANNEL_4
  613. * @arg @ref FL_DMA_CHANNEL_5
  614. * @arg @ref FL_DMA_CHANNEL_6
  615. * @arg @ref FL_DMA_CHANNEL_7
  616. * @retval None
  617. */
  618. __STATIC_INLINE void FL_DMA_SetBandwidth(DMA_Type *DMAx, uint32_t bandwidth, uint32_t channel)
  619. {
  620. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  621. if(channel <= FL_DMA_CHANNEL_6)
  622. {
  623. MODIFY_REG(Temp->Channel[channel].CHCR, DMA_CHCR_BDW_Msk, bandwidth);
  624. }
  625. }
  626. /**
  627. * @brief Get transmit bandwidth
  628. * @rmtoll CHCR BDW FL_DMA_GetBandwidth
  629. * @param DMAx DMA instance
  630. * @param channel This parameter can be one of the following values:
  631. * @arg @ref FL_DMA_CHANNEL_0
  632. * @arg @ref FL_DMA_CHANNEL_1
  633. * @arg @ref FL_DMA_CHANNEL_2
  634. * @arg @ref FL_DMA_CHANNEL_3
  635. * @arg @ref FL_DMA_CHANNEL_4
  636. * @arg @ref FL_DMA_CHANNEL_5
  637. * @arg @ref FL_DMA_CHANNEL_6
  638. * @arg @ref FL_DMA_CHANNEL_7
  639. * @retval Returned value can be one of the following values:
  640. * @arg @ref FL_DMA_BANDWIDTH_8B
  641. * @arg @ref FL_DMA_BANDWIDTH_16B
  642. * @arg @ref FL_DMA_BANDWIDTH_32B
  643. */
  644. __STATIC_INLINE uint32_t FL_DMA_GetBandwidth(DMA_Type *DMAx, uint32_t channel)
  645. {
  646. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  647. if(channel <= FL_DMA_CHANNEL_6)
  648. {
  649. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_BDW_Msk));
  650. }
  651. return 0;
  652. }
  653. /**
  654. * @brief Circular mode enable
  655. * @rmtoll CHCR CIRC FL_DMA_EnableCircularMode
  656. * @param DMAx DMA instance
  657. * @param channel This parameter can be one of the following values:
  658. * @arg @ref FL_DMA_CHANNEL_0
  659. * @arg @ref FL_DMA_CHANNEL_1
  660. * @arg @ref FL_DMA_CHANNEL_2
  661. * @arg @ref FL_DMA_CHANNEL_3
  662. * @arg @ref FL_DMA_CHANNEL_4
  663. * @arg @ref FL_DMA_CHANNEL_5
  664. * @arg @ref FL_DMA_CHANNEL_6
  665. * @arg @ref FL_DMA_CHANNEL_7
  666. * @retval None
  667. */
  668. __STATIC_INLINE void FL_DMA_EnableCircularMode(DMA_Type *DMAx, uint32_t channel)
  669. {
  670. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  671. if(channel <= FL_DMA_CHANNEL_6)
  672. {
  673. SET_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_CIRC_Msk);
  674. }
  675. else
  676. {
  677. SET_BIT(Temp->CH7CR, DMA_CHCR_CIRC_Msk);
  678. }
  679. }
  680. /**
  681. * @brief Get circular mode enable status
  682. * @rmtoll CHCR CIRC FL_DMA_IsEnabledCircularMode
  683. * @param DMAx DMA instance
  684. * @param channel This parameter can be one of the following values:
  685. * @arg @ref FL_DMA_CHANNEL_0
  686. * @arg @ref FL_DMA_CHANNEL_1
  687. * @arg @ref FL_DMA_CHANNEL_2
  688. * @arg @ref FL_DMA_CHANNEL_3
  689. * @arg @ref FL_DMA_CHANNEL_4
  690. * @arg @ref FL_DMA_CHANNEL_5
  691. * @arg @ref FL_DMA_CHANNEL_6
  692. * @arg @ref FL_DMA_CHANNEL_7
  693. * @retval State of bit (1 or 0).
  694. */
  695. __STATIC_INLINE uint32_t FL_DMA_IsEnabledCircularMode(DMA_Type *DMAx, uint32_t channel)
  696. {
  697. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  698. if(channel <= FL_DMA_CHANNEL_6)
  699. {
  700. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_CIRC_Msk) == DMA_CHCR_CIRC_Msk);
  701. }
  702. else
  703. {
  704. return (uint32_t)(READ_BIT(Temp->CH7CR, DMA_CHCR_CIRC_Msk) == DMA_CHCR_CIRC_Msk);
  705. }
  706. }
  707. /**
  708. * @brief Circular mode disable
  709. * @rmtoll CHCR CIRC FL_DMA_DisableCircularMode
  710. * @param DMAx DMA instance
  711. * @param channel This parameter can be one of the following values:
  712. * @arg @ref FL_DMA_CHANNEL_0
  713. * @arg @ref FL_DMA_CHANNEL_1
  714. * @arg @ref FL_DMA_CHANNEL_2
  715. * @arg @ref FL_DMA_CHANNEL_3
  716. * @arg @ref FL_DMA_CHANNEL_4
  717. * @arg @ref FL_DMA_CHANNEL_5
  718. * @arg @ref FL_DMA_CHANNEL_6
  719. * @arg @ref FL_DMA_CHANNEL_7
  720. * @retval None
  721. */
  722. __STATIC_INLINE void FL_DMA_DisableCircularMode(DMA_Type *DMAx, uint32_t channel)
  723. {
  724. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  725. if(channel <= FL_DMA_CHANNEL_6)
  726. {
  727. CLEAR_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_CIRC_Msk);
  728. }
  729. else
  730. {
  731. CLEAR_BIT(Temp->CH7CR, DMA_CHCR_CIRC_Msk);
  732. }
  733. }
  734. /**
  735. * @brief channelx transmit finished interrupt enable
  736. * @rmtoll CHCR FTIE FL_DMA_EnableIT_TransferComplete
  737. * @param DMAx DMA instance
  738. * @param channel This parameter can be one of the following values:
  739. * @arg @ref FL_DMA_CHANNEL_0
  740. * @arg @ref FL_DMA_CHANNEL_1
  741. * @arg @ref FL_DMA_CHANNEL_2
  742. * @arg @ref FL_DMA_CHANNEL_3
  743. * @arg @ref FL_DMA_CHANNEL_4
  744. * @arg @ref FL_DMA_CHANNEL_5
  745. * @arg @ref FL_DMA_CHANNEL_6
  746. * @arg @ref FL_DMA_CHANNEL_7
  747. * @retval None
  748. */
  749. __STATIC_INLINE void FL_DMA_EnableIT_TransferComplete(DMA_Type *DMAx, uint32_t channel)
  750. {
  751. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  752. if(channel <= FL_DMA_CHANNEL_6)
  753. {
  754. SET_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_FTIE_Msk);
  755. }
  756. else
  757. {
  758. SET_BIT(Temp->CH7CR, DMA_CHCR_FTIE_Msk);
  759. }
  760. }
  761. /**
  762. * @brief Get channelx transmit finished interrupt enable status
  763. * @rmtoll CHCR FTIE FL_DMA_IsEnabledIT_TransferComplete
  764. * @param DMAx DMA instance
  765. * @param channel This parameter can be one of the following values:
  766. * @arg @ref FL_DMA_CHANNEL_0
  767. * @arg @ref FL_DMA_CHANNEL_1
  768. * @arg @ref FL_DMA_CHANNEL_2
  769. * @arg @ref FL_DMA_CHANNEL_3
  770. * @arg @ref FL_DMA_CHANNEL_4
  771. * @arg @ref FL_DMA_CHANNEL_5
  772. * @arg @ref FL_DMA_CHANNEL_6
  773. * @arg @ref FL_DMA_CHANNEL_7
  774. * @retval State of bit (1 or 0).
  775. */
  776. __STATIC_INLINE uint32_t FL_DMA_IsEnabledIT_TransferComplete(DMA_Type *DMAx, uint32_t channel)
  777. {
  778. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  779. if(channel <= FL_DMA_CHANNEL_6)
  780. {
  781. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_FTIE_Msk) == DMA_CHCR_FTIE_Msk);
  782. }
  783. else
  784. {
  785. return (uint32_t)(READ_BIT(Temp->CH7CR, DMA_CHCR_FTIE_Msk) == DMA_CHCR_FTIE_Msk);
  786. }
  787. }
  788. /**
  789. * @brief channelx transmit finished interrupt disable
  790. * @rmtoll CHCR FTIE FL_DMA_DisableIT_TransferComplete
  791. * @param DMAx DMA instance
  792. * @param channel This parameter can be one of the following values:
  793. * @arg @ref FL_DMA_CHANNEL_0
  794. * @arg @ref FL_DMA_CHANNEL_1
  795. * @arg @ref FL_DMA_CHANNEL_2
  796. * @arg @ref FL_DMA_CHANNEL_3
  797. * @arg @ref FL_DMA_CHANNEL_4
  798. * @arg @ref FL_DMA_CHANNEL_5
  799. * @arg @ref FL_DMA_CHANNEL_6
  800. * @arg @ref FL_DMA_CHANNEL_7
  801. * @retval None
  802. */
  803. __STATIC_INLINE void FL_DMA_DisableIT_TransferComplete(DMA_Type *DMAx, uint32_t channel)
  804. {
  805. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  806. if(channel <= FL_DMA_CHANNEL_6)
  807. {
  808. CLEAR_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_FTIE_Msk);
  809. }
  810. else
  811. {
  812. CLEAR_BIT(Temp->CH7CR, DMA_CHCR_FTIE_Msk);
  813. }
  814. }
  815. /**
  816. * @brief Channelx Half-transfer interrupt enable
  817. * @rmtoll CHCR HTIE FL_DMA_EnableIT_TransferHalfComplete
  818. * @param DMAx DMA instance
  819. * @param channel This parameter can be one of the following values:
  820. * @arg @ref FL_DMA_CHANNEL_0
  821. * @arg @ref FL_DMA_CHANNEL_1
  822. * @arg @ref FL_DMA_CHANNEL_2
  823. * @arg @ref FL_DMA_CHANNEL_3
  824. * @arg @ref FL_DMA_CHANNEL_4
  825. * @arg @ref FL_DMA_CHANNEL_5
  826. * @arg @ref FL_DMA_CHANNEL_6
  827. * @arg @ref FL_DMA_CHANNEL_7
  828. * @retval None
  829. */
  830. __STATIC_INLINE void FL_DMA_EnableIT_TransferHalfComplete(DMA_Type *DMAx, uint32_t channel)
  831. {
  832. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  833. if(channel <= FL_DMA_CHANNEL_6)
  834. {
  835. SET_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_HTIE_Msk);
  836. }
  837. else
  838. {
  839. SET_BIT(Temp->CH7CR, DMA_CHCR_HTIE_Msk);
  840. }
  841. }
  842. /**
  843. * @brief Get Channelx Half-transfer interrupt enable status
  844. * @rmtoll CHCR HTIE FL_DMA_IsEnabledIT_TransferHalfComplete
  845. * @param DMAx DMA instance
  846. * @param channel This parameter can be one of the following values:
  847. * @arg @ref FL_DMA_CHANNEL_0
  848. * @arg @ref FL_DMA_CHANNEL_1
  849. * @arg @ref FL_DMA_CHANNEL_2
  850. * @arg @ref FL_DMA_CHANNEL_3
  851. * @arg @ref FL_DMA_CHANNEL_4
  852. * @arg @ref FL_DMA_CHANNEL_5
  853. * @arg @ref FL_DMA_CHANNEL_6
  854. * @arg @ref FL_DMA_CHANNEL_7
  855. * @retval State of bit (1 or 0).
  856. */
  857. __STATIC_INLINE uint32_t FL_DMA_IsEnabledIT_TransferHalfComplete(DMA_Type *DMAx, uint32_t channel)
  858. {
  859. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  860. if(channel <= FL_DMA_CHANNEL_6)
  861. {
  862. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_HTIE_Msk) == DMA_CHCR_HTIE_Msk);
  863. }
  864. else
  865. {
  866. return (uint32_t)(READ_BIT(Temp->CH7CR, DMA_CHCR_HTIE_Msk) == DMA_CHCR_HTIE_Msk);
  867. }
  868. }
  869. /**
  870. * @brief Channelx Half-transfer interrupt disable
  871. * @rmtoll CHCR HTIE FL_DMA_DisableIT_TransferHalfComplete
  872. * @param DMAx DMA instance
  873. * @param channel This parameter can be one of the following values:
  874. * @arg @ref FL_DMA_CHANNEL_0
  875. * @arg @ref FL_DMA_CHANNEL_1
  876. * @arg @ref FL_DMA_CHANNEL_2
  877. * @arg @ref FL_DMA_CHANNEL_3
  878. * @arg @ref FL_DMA_CHANNEL_4
  879. * @arg @ref FL_DMA_CHANNEL_5
  880. * @arg @ref FL_DMA_CHANNEL_6
  881. * @arg @ref FL_DMA_CHANNEL_7
  882. * @retval None
  883. */
  884. __STATIC_INLINE void FL_DMA_DisableIT_TransferHalfComplete(DMA_Type *DMAx, uint32_t channel)
  885. {
  886. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  887. if(channel <= FL_DMA_CHANNEL_6)
  888. {
  889. CLEAR_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_HTIE_Msk);
  890. }
  891. else
  892. {
  893. CLEAR_BIT(Temp->CH7CR, DMA_CHCR_HTIE_Msk);
  894. }
  895. }
  896. /**
  897. * @brief Channelx enable
  898. * @rmtoll CHCR EN FL_DMA_EnableChannel
  899. * @param DMAx DMA instance
  900. * @param channel This parameter can be one of the following values:
  901. * @arg @ref FL_DMA_CHANNEL_0
  902. * @arg @ref FL_DMA_CHANNEL_1
  903. * @arg @ref FL_DMA_CHANNEL_2
  904. * @arg @ref FL_DMA_CHANNEL_3
  905. * @arg @ref FL_DMA_CHANNEL_4
  906. * @arg @ref FL_DMA_CHANNEL_5
  907. * @arg @ref FL_DMA_CHANNEL_6
  908. * @arg @ref FL_DMA_CHANNEL_7
  909. * @retval None
  910. */
  911. __STATIC_INLINE void FL_DMA_EnableChannel(DMA_Type *DMAx, uint32_t channel)
  912. {
  913. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  914. if(channel <= FL_DMA_CHANNEL_6)
  915. {
  916. SET_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_EN_Msk);
  917. }
  918. else
  919. {
  920. SET_BIT(Temp->CH7CR, DMA_CHCR_EN_Msk);
  921. }
  922. }
  923. /**
  924. * @brief Get channelx enable status
  925. * @rmtoll CHCR EN FL_DMA_IsEnabledChannel
  926. * @param DMAx DMA instance
  927. * @param channel This parameter can be one of the following values:
  928. * @arg @ref FL_DMA_CHANNEL_0
  929. * @arg @ref FL_DMA_CHANNEL_1
  930. * @arg @ref FL_DMA_CHANNEL_2
  931. * @arg @ref FL_DMA_CHANNEL_3
  932. * @arg @ref FL_DMA_CHANNEL_4
  933. * @arg @ref FL_DMA_CHANNEL_5
  934. * @arg @ref FL_DMA_CHANNEL_6
  935. * @arg @ref FL_DMA_CHANNEL_7
  936. * @retval State of bit (1 or 0).
  937. */
  938. __STATIC_INLINE uint32_t FL_DMA_IsEnabledChannel(DMA_Type *DMAx, uint32_t channel)
  939. {
  940. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  941. if(channel <= FL_DMA_CHANNEL_6)
  942. {
  943. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_EN_Msk) == DMA_CHCR_EN_Msk);
  944. }
  945. else
  946. {
  947. return (uint32_t)(READ_BIT(Temp->CH7CR, DMA_CHCR_EN_Msk) == DMA_CHCR_EN_Msk);
  948. }
  949. }
  950. /**
  951. * @brief Channelx disable
  952. * @rmtoll CHCR EN FL_DMA_DisableChannel
  953. * @param DMAx DMA instance
  954. * @param channel This parameter can be one of the following values:
  955. * @arg @ref FL_DMA_CHANNEL_0
  956. * @arg @ref FL_DMA_CHANNEL_1
  957. * @arg @ref FL_DMA_CHANNEL_2
  958. * @arg @ref FL_DMA_CHANNEL_3
  959. * @arg @ref FL_DMA_CHANNEL_4
  960. * @arg @ref FL_DMA_CHANNEL_5
  961. * @arg @ref FL_DMA_CHANNEL_6
  962. * @arg @ref FL_DMA_CHANNEL_7
  963. * @retval None
  964. */
  965. __STATIC_INLINE void FL_DMA_DisableChannel(DMA_Type *DMAx, uint32_t channel)
  966. {
  967. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  968. if(channel <= FL_DMA_CHANNEL_6)
  969. {
  970. CLEAR_BIT(Temp->Channel[channel].CHCR, DMA_CHCR_EN_Msk);
  971. }
  972. else
  973. {
  974. CLEAR_BIT(Temp->CH7CR, DMA_CHCR_EN_Msk);
  975. }
  976. }
  977. /**
  978. * @brief Set channelx memory pointer address
  979. * @rmtoll MEMAD FL_DMA_WriteMemoryAddress
  980. * @param DMAx DMA instance
  981. * @param data
  982. * @param channel This parameter can be one of the following values:
  983. * @arg @ref FL_DMA_CHANNEL_0
  984. * @arg @ref FL_DMA_CHANNEL_1
  985. * @arg @ref FL_DMA_CHANNEL_2
  986. * @arg @ref FL_DMA_CHANNEL_3
  987. * @arg @ref FL_DMA_CHANNEL_4
  988. * @arg @ref FL_DMA_CHANNEL_5
  989. * @arg @ref FL_DMA_CHANNEL_6
  990. * @arg @ref FL_DMA_CHANNEL_7
  991. * @retval None
  992. */
  993. __STATIC_INLINE void FL_DMA_WriteMemoryAddress(DMA_Type *DMAx, uint32_t data, uint32_t channel)
  994. {
  995. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  996. if(channel <= FL_DMA_CHANNEL_6)
  997. {
  998. MODIFY_REG(Temp->Channel[channel].CHMAD, (0xffffffffU), (data));
  999. }
  1000. else
  1001. {
  1002. MODIFY_REG(Temp->CH7MAD, (0xffffffffU), (data));
  1003. }
  1004. }
  1005. /**
  1006. * @brief Get channelx memory pointer address
  1007. * @rmtoll MEMAD FL_DMA_ReadMemoryAddress
  1008. * @param DMAx DMA instance
  1009. * @param channel This parameter can be one of the following values:
  1010. * @arg @ref FL_DMA_CHANNEL_0
  1011. * @arg @ref FL_DMA_CHANNEL_1
  1012. * @arg @ref FL_DMA_CHANNEL_2
  1013. * @arg @ref FL_DMA_CHANNEL_3
  1014. * @arg @ref FL_DMA_CHANNEL_4
  1015. * @arg @ref FL_DMA_CHANNEL_5
  1016. * @arg @ref FL_DMA_CHANNEL_6
  1017. * @arg @ref FL_DMA_CHANNEL_7
  1018. * @retval
  1019. */
  1020. __STATIC_INLINE uint32_t FL_DMA_ReadMemoryAddress(DMA_Type *DMAx, uint32_t channel)
  1021. {
  1022. DMA_ADDR *Temp = (DMA_ADDR *)DMAx;
  1023. if(channel <= FL_DMA_CHANNEL_6)
  1024. {
  1025. return (uint32_t)(READ_BIT(Temp->Channel[channel].CHMAD, (0xffffffffU)));
  1026. }
  1027. else
  1028. {
  1029. return (uint32_t)(READ_BIT(Temp->CH7MAD, (0xffffffffU)));
  1030. }
  1031. }
  1032. /**
  1033. * @brief Set channel7 flash pointer address
  1034. * @rmtoll CH7FLSAD FL_DMA_WriteFlashAddress
  1035. * @param DMAx DMA instance
  1036. * @param data
  1037. * @retval None
  1038. */
  1039. __STATIC_INLINE void FL_DMA_WriteFlashAddress(DMA_Type *DMAx, uint32_t data)
  1040. {
  1041. MODIFY_REG(DMAx->CH7FLSAD, (0xffffffffU << 0U), (data << 0U));
  1042. }
  1043. /**
  1044. * @brief Get channel7 flash pointer address
  1045. * @rmtoll CH7FLSAD FL_DMA_ReadFlashAddress
  1046. * @param DMAx DMA instance
  1047. * @retval
  1048. */
  1049. __STATIC_INLINE uint32_t FL_DMA_ReadFlashAddress(DMA_Type *DMAx)
  1050. {
  1051. return (uint32_t)(READ_BIT(DMAx->CH7FLSAD, (0xffffffffU << 0U)) >> 0U);
  1052. }
  1053. /**
  1054. * @brief Get DMA address error flag
  1055. * @rmtoll ISR ADDRERR FL_DMA_IsActiveFlag_AddressError
  1056. * @param DMAx DMA instance
  1057. * @retval State of bit (1 or 0).
  1058. */
  1059. __STATIC_INLINE uint32_t FL_DMA_IsActiveFlag_AddressError(DMA_Type *DMAx)
  1060. {
  1061. return (uint32_t)(READ_BIT(DMAx->ISR, DMA_ISR_ADDRERR_Msk) == (DMA_ISR_ADDRERR_Msk));
  1062. }
  1063. /**
  1064. * @brief Clear DMA address error flag
  1065. * @rmtoll ISR ADDRERR FL_DMA_ClearFlag_AddressError
  1066. * @param DMAx DMA instance
  1067. * @retval None
  1068. */
  1069. __STATIC_INLINE void FL_DMA_ClearFlag_AddressError(DMA_Type *DMAx)
  1070. {
  1071. WRITE_REG(DMAx->ISR, DMA_ISR_ADDRERR_Msk);
  1072. }
  1073. /**
  1074. * @brief Get DMA channelx finished-transfer flag
  1075. * @rmtoll ISR CHFT FL_DMA_IsActiveFlag_TransferComplete
  1076. * @param DMAx DMA instance
  1077. * @param channel This parameter can be one of the following values:
  1078. * @arg @ref FL_DMA_CHANNEL_0
  1079. * @arg @ref FL_DMA_CHANNEL_1
  1080. * @arg @ref FL_DMA_CHANNEL_2
  1081. * @arg @ref FL_DMA_CHANNEL_3
  1082. * @arg @ref FL_DMA_CHANNEL_4
  1083. * @arg @ref FL_DMA_CHANNEL_5
  1084. * @arg @ref FL_DMA_CHANNEL_6
  1085. * @arg @ref FL_DMA_CHANNEL_7
  1086. * @retval State of bit (1 or 0).
  1087. */
  1088. __STATIC_INLINE uint32_t FL_DMA_IsActiveFlag_TransferComplete(DMA_Type *DMAx, uint32_t channel)
  1089. {
  1090. return (uint32_t)(READ_BIT(DMAx->ISR, ((0x1U << channel) << DMA_ISR_CHFT_Pos)) == ((0x1U << channel) << DMA_ISR_CHFT_Pos));
  1091. }
  1092. /**
  1093. * @brief Clear DMA channelx finished-transfer flag
  1094. * @rmtoll ISR CHFT FL_DMA_ClearFlag_TransferComplete
  1095. * @param DMAx DMA instance
  1096. * @param channel This parameter can be one of the following values:
  1097. * @arg @ref FL_DMA_CHANNEL_0
  1098. * @arg @ref FL_DMA_CHANNEL_1
  1099. * @arg @ref FL_DMA_CHANNEL_2
  1100. * @arg @ref FL_DMA_CHANNEL_3
  1101. * @arg @ref FL_DMA_CHANNEL_4
  1102. * @arg @ref FL_DMA_CHANNEL_5
  1103. * @arg @ref FL_DMA_CHANNEL_6
  1104. * @arg @ref FL_DMA_CHANNEL_7
  1105. * @retval None
  1106. */
  1107. __STATIC_INLINE void FL_DMA_ClearFlag_TransferComplete(DMA_Type *DMAx, uint32_t channel)
  1108. {
  1109. WRITE_REG(DMAx->ISR, (DMA_ISR_CHFT_Msk << channel));
  1110. }
  1111. /**
  1112. * @brief Get DMA channel half-transfer flag
  1113. * @rmtoll ISR CHHT FL_DMA_IsActiveFlag_TransferHalfComplete
  1114. * @param DMAx DMA instance
  1115. * @param channel This parameter can be one of the following values:
  1116. * @arg @ref FL_DMA_CHANNEL_0
  1117. * @arg @ref FL_DMA_CHANNEL_1
  1118. * @arg @ref FL_DMA_CHANNEL_2
  1119. * @arg @ref FL_DMA_CHANNEL_3
  1120. * @arg @ref FL_DMA_CHANNEL_4
  1121. * @arg @ref FL_DMA_CHANNEL_5
  1122. * @arg @ref FL_DMA_CHANNEL_6
  1123. * @arg @ref FL_DMA_CHANNEL_7
  1124. * @retval State of bit (1 or 0).
  1125. */
  1126. __STATIC_INLINE uint32_t FL_DMA_IsActiveFlag_TransferHalfComplete(DMA_Type *DMAx, uint32_t channel)
  1127. {
  1128. return (uint32_t)(READ_BIT(DMAx->ISR, ((0x1U << channel) << DMA_ISR_CHHT_Pos)) == ((0x1U << channel) << DMA_ISR_CHHT_Pos));
  1129. }
  1130. /**
  1131. * @brief Clear DMA channel half-transfer flag
  1132. * @rmtoll ISR CHHT FL_DMA_ClearFlag_TransferHalfComplete
  1133. * @param DMAx DMA instance
  1134. * @param channel This parameter can be one of the following values:
  1135. * @arg @ref FL_DMA_CHANNEL_0
  1136. * @arg @ref FL_DMA_CHANNEL_1
  1137. * @arg @ref FL_DMA_CHANNEL_2
  1138. * @arg @ref FL_DMA_CHANNEL_3
  1139. * @arg @ref FL_DMA_CHANNEL_4
  1140. * @arg @ref FL_DMA_CHANNEL_5
  1141. * @arg @ref FL_DMA_CHANNEL_6
  1142. * @arg @ref FL_DMA_CHANNEL_7
  1143. * @retval None
  1144. */
  1145. __STATIC_INLINE void FL_DMA_ClearFlag_TransferHalfComplete(DMA_Type *DMAx, uint32_t channel)
  1146. {
  1147. WRITE_REG(DMAx->ISR, (DMA_ISR_CHHT_Msk << channel));
  1148. }
  1149. /**
  1150. * @}
  1151. */
  1152. /** @defgroup DMA_FL_EF_Init Initialization and de-initialization functions
  1153. * @{
  1154. */
  1155. FL_ErrorStatus FL_DMA_DeInit(DMA_Type *DMAx);
  1156. FL_ErrorStatus FL_DMA_Init(DMA_Type *DMAx, FL_DMA_InitTypeDef *initStruct, uint32_t channel);
  1157. void FL_DMA_StructInit(FL_DMA_InitTypeDef *initStruct);
  1158. /**
  1159. * @}
  1160. */
  1161. /** @defgroup DMA_FL_EF_Operation Opeartion functions
  1162. * @{
  1163. */
  1164. FL_ErrorStatus FL_DMA_StartTransmission(DMA_Type *DMAx, FL_DMA_ConfigTypeDef *configStruct, uint32_t channel);
  1165. /**
  1166. * @}
  1167. */
  1168. /**
  1169. * @}
  1170. */
  1171. /**
  1172. * @}
  1173. */
  1174. #ifdef __cplusplus
  1175. }
  1176. #endif
  1177. #endif /* __FM33LC0XX_FL_DMA_H*/
  1178. /*************************Py_Code_Generator Version: 0.1-0.14-0.2 @ 2020-10-20*************************/
  1179. /********************** (C) COPYRIGHT Fudan Microelectronics **** END OF FILE ***********************/