stm32f4xx_ll_dma2d.c 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598
  1. /**
  2. ******************************************************************************
  3. * @file stm32f4xx_ll_dma2d.c
  4. * @author MCD Application Team
  5. * @brief DMA2D LL module driver.
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
  10. * All rights reserved.</center></h2>
  11. *
  12. * This software component is licensed by ST under BSD 3-Clause license,
  13. * the "License"; You may not use this file except in compliance with the
  14. * License. You may obtain a copy of the License at:
  15. * opensource.org/licenses/BSD-3-Clause
  16. *
  17. ******************************************************************************
  18. */
  19. #if defined(USE_FULL_LL_DRIVER)
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "stm32f4xx_ll_dma2d.h"
  22. #include "stm32f4xx_ll_bus.h"
  23. #ifdef USE_FULL_ASSERT
  24. #include "stm32_assert.h"
  25. #else
  26. #define assert_param(expr) ((void)0U)
  27. #endif /* USE_FULL_ASSERT */
  28. /** @addtogroup STM32F4xx_LL_Driver
  29. * @{
  30. */
  31. #if defined (DMA2D)
  32. /** @addtogroup DMA2D_LL
  33. * @{
  34. */
  35. /* Private types -------------------------------------------------------------*/
  36. /* Private variables ---------------------------------------------------------*/
  37. /* Private constants ---------------------------------------------------------*/
  38. /** @addtogroup DMA2D_LL_Private_Constants DMA2D Private Constants
  39. * @{
  40. */
  41. #define LL_DMA2D_COLOR 0xFFU /*!< Maximum output color setting */
  42. #define LL_DMA2D_NUMBEROFLINES DMA2D_NLR_NL /*!< Maximum number of lines */
  43. #define LL_DMA2D_NUMBEROFPIXELS (DMA2D_NLR_PL >> DMA2D_NLR_PL_Pos) /*!< Maximum number of pixels per lines */
  44. #define LL_DMA2D_OFFSET_MAX 0x3FFFU /*!< Maximum output line offset expressed in pixels */
  45. #define LL_DMA2D_CLUTSIZE_MAX 0xFFU /*!< Maximum CLUT size */
  46. /**
  47. * @}
  48. */
  49. /* Private macros ------------------------------------------------------------*/
  50. /** @addtogroup DMA2D_LL_Private_Macros
  51. * @{
  52. */
  53. #define IS_LL_DMA2D_MODE(MODE) (((MODE) == LL_DMA2D_MODE_M2M) || \
  54. ((MODE) == LL_DMA2D_MODE_M2M_PFC) || \
  55. ((MODE) == LL_DMA2D_MODE_M2M_BLEND) || \
  56. ((MODE) == LL_DMA2D_MODE_R2M))
  57. #define IS_LL_DMA2D_OCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB8888) || \
  58. ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB888) || \
  59. ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB565) || \
  60. ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB1555) || \
  61. ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB4444))
  62. #define IS_LL_DMA2D_GREEN(GREEN) ((GREEN) <= LL_DMA2D_COLOR)
  63. #define IS_LL_DMA2D_RED(RED) ((RED) <= LL_DMA2D_COLOR)
  64. #define IS_LL_DMA2D_BLUE(BLUE) ((BLUE) <= LL_DMA2D_COLOR)
  65. #define IS_LL_DMA2D_ALPHA(ALPHA) ((ALPHA) <= LL_DMA2D_COLOR)
  66. #define IS_LL_DMA2D_OFFSET(OFFSET) ((OFFSET) <= LL_DMA2D_OFFSET_MAX)
  67. #define IS_LL_DMA2D_LINE(LINES) ((LINES) <= LL_DMA2D_NUMBEROFLINES)
  68. #define IS_LL_DMA2D_PIXEL(PIXELS) ((PIXELS) <= LL_DMA2D_NUMBEROFPIXELS)
  69. #define IS_LL_DMA2D_LCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB8888) || \
  70. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB888) || \
  71. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB565) || \
  72. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB1555) || \
  73. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB4444) || \
  74. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L8) || \
  75. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL44) || \
  76. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL88) || \
  77. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L4) || \
  78. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A8) || \
  79. ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A4))
  80. #define IS_LL_DMA2D_CLUTCMODE(CLUTCMODE) (((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_ARGB8888) || \
  81. ((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_RGB888))
  82. #define IS_LL_DMA2D_CLUTSIZE(SIZE) ((SIZE) <= LL_DMA2D_CLUTSIZE_MAX)
  83. #define IS_LL_DMA2D_ALPHAMODE(MODE) (((MODE) == LL_DMA2D_ALPHA_MODE_NO_MODIF) || \
  84. ((MODE) == LL_DMA2D_ALPHA_MODE_REPLACE) || \
  85. ((MODE) == LL_DMA2D_ALPHA_MODE_COMBINE))
  86. /**
  87. * @}
  88. */
  89. /* Private function prototypes -----------------------------------------------*/
  90. /* Exported functions --------------------------------------------------------*/
  91. /** @addtogroup DMA2D_LL_Exported_Functions
  92. * @{
  93. */
  94. /** @addtogroup DMA2D_LL_EF_Init_Functions Initialization and De-initialization Functions
  95. * @{
  96. */
  97. /**
  98. * @brief De-initialize DMA2D registers (registers restored to their default values).
  99. * @param DMA2Dx DMA2D Instance
  100. * @retval An ErrorStatus enumeration value:
  101. * - SUCCESS: DMA2D registers are de-initialized
  102. * - ERROR: DMA2D registers are not de-initialized
  103. */
  104. ErrorStatus LL_DMA2D_DeInit(DMA2D_TypeDef *DMA2Dx)
  105. {
  106. ErrorStatus status = SUCCESS;
  107. /* Check the parameters */
  108. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  109. if (DMA2Dx == DMA2D)
  110. {
  111. /* Force reset of DMA2D clock */
  112. LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA2D);
  113. /* Release reset of DMA2D clock */
  114. LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA2D);
  115. }
  116. else
  117. {
  118. status = ERROR;
  119. }
  120. return (status);
  121. }
  122. /**
  123. * @brief Initialize DMA2D registers according to the specified parameters in DMA2D_InitStruct.
  124. * @note DMA2D transfers must be disabled to set initialization bits in configuration registers,
  125. * otherwise ERROR result is returned.
  126. * @param DMA2Dx DMA2D Instance
  127. * @param DMA2D_InitStruct pointer to a LL_DMA2D_InitTypeDef structure
  128. * that contains the configuration information for the specified DMA2D peripheral.
  129. * @retval An ErrorStatus enumeration value:
  130. * - SUCCESS: DMA2D registers are initialized according to DMA2D_InitStruct content
  131. * - ERROR: Issue occurred during DMA2D registers initialization
  132. */
  133. ErrorStatus LL_DMA2D_Init(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_InitTypeDef *DMA2D_InitStruct)
  134. {
  135. ErrorStatus status = ERROR;
  136. LL_DMA2D_ColorTypeDef dma2d_colorstruct;
  137. uint32_t tmp;
  138. uint32_t tmp1;
  139. uint32_t tmp2;
  140. uint32_t regMask;
  141. uint32_t regValue;
  142. /* Check the parameters */
  143. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  144. assert_param(IS_LL_DMA2D_MODE(DMA2D_InitStruct->Mode));
  145. assert_param(IS_LL_DMA2D_OCMODE(DMA2D_InitStruct->ColorMode));
  146. assert_param(IS_LL_DMA2D_LINE(DMA2D_InitStruct->NbrOfLines));
  147. assert_param(IS_LL_DMA2D_PIXEL(DMA2D_InitStruct->NbrOfPixelsPerLines));
  148. assert_param(IS_LL_DMA2D_GREEN(DMA2D_InitStruct->OutputGreen));
  149. assert_param(IS_LL_DMA2D_RED(DMA2D_InitStruct->OutputRed));
  150. assert_param(IS_LL_DMA2D_BLUE(DMA2D_InitStruct->OutputBlue));
  151. assert_param(IS_LL_DMA2D_ALPHA(DMA2D_InitStruct->OutputAlpha));
  152. assert_param(IS_LL_DMA2D_OFFSET(DMA2D_InitStruct->LineOffset));
  153. /* DMA2D transfers must be disabled to configure bits in initialization registers */
  154. tmp = LL_DMA2D_IsTransferOngoing(DMA2Dx);
  155. tmp1 = LL_DMA2D_FGND_IsEnabledCLUTLoad(DMA2Dx);
  156. tmp2 = LL_DMA2D_BGND_IsEnabledCLUTLoad(DMA2Dx);
  157. if ((tmp == 0U) && (tmp1 == 0U) && (tmp2 == 0U))
  158. {
  159. /* DMA2D CR register configuration -------------------------------------------*/
  160. LL_DMA2D_SetMode(DMA2Dx, DMA2D_InitStruct->Mode);
  161. /* DMA2D OPFCCR register configuration ---------------------------------------*/
  162. regMask = DMA2D_OPFCCR_CM;
  163. regValue = DMA2D_InitStruct->ColorMode;
  164. MODIFY_REG(DMA2Dx->OPFCCR, regMask, regValue);
  165. /* DMA2D OOR register configuration ------------------------------------------*/
  166. LL_DMA2D_SetLineOffset(DMA2Dx, DMA2D_InitStruct->LineOffset);
  167. /* DMA2D NLR register configuration ------------------------------------------*/
  168. LL_DMA2D_ConfigSize(DMA2Dx, DMA2D_InitStruct->NbrOfLines, DMA2D_InitStruct->NbrOfPixelsPerLines);
  169. /* DMA2D OMAR register configuration ------------------------------------------*/
  170. LL_DMA2D_SetOutputMemAddr(DMA2Dx, DMA2D_InitStruct->OutputMemoryAddress);
  171. /* DMA2D OCOLR register configuration ------------------------------------------*/
  172. dma2d_colorstruct.ColorMode = DMA2D_InitStruct->ColorMode;
  173. dma2d_colorstruct.OutputBlue = DMA2D_InitStruct->OutputBlue;
  174. dma2d_colorstruct.OutputGreen = DMA2D_InitStruct->OutputGreen;
  175. dma2d_colorstruct.OutputRed = DMA2D_InitStruct->OutputRed;
  176. dma2d_colorstruct.OutputAlpha = DMA2D_InitStruct->OutputAlpha;
  177. LL_DMA2D_ConfigOutputColor(DMA2Dx, &dma2d_colorstruct);
  178. status = SUCCESS;
  179. }
  180. /* If DMA2D transfers are not disabled, return ERROR */
  181. return (status);
  182. }
  183. /**
  184. * @brief Set each @ref LL_DMA2D_InitTypeDef field to default value.
  185. * @param DMA2D_InitStruct pointer to a @ref LL_DMA2D_InitTypeDef structure
  186. * whose fields will be set to default values.
  187. * @retval None
  188. */
  189. void LL_DMA2D_StructInit(LL_DMA2D_InitTypeDef *DMA2D_InitStruct)
  190. {
  191. /* Set DMA2D_InitStruct fields to default values */
  192. DMA2D_InitStruct->Mode = LL_DMA2D_MODE_M2M;
  193. DMA2D_InitStruct->ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB8888;
  194. DMA2D_InitStruct->NbrOfLines = 0x0U;
  195. DMA2D_InitStruct->NbrOfPixelsPerLines = 0x0U;
  196. DMA2D_InitStruct->LineOffset = 0x0U;
  197. DMA2D_InitStruct->OutputBlue = 0x0U;
  198. DMA2D_InitStruct->OutputGreen = 0x0U;
  199. DMA2D_InitStruct->OutputRed = 0x0U;
  200. DMA2D_InitStruct->OutputAlpha = 0x0U;
  201. DMA2D_InitStruct->OutputMemoryAddress = 0x0U;
  202. }
  203. /**
  204. * @brief Configure the foreground or background according to the specified parameters
  205. * in the LL_DMA2D_LayerCfgTypeDef structure.
  206. * @param DMA2Dx DMA2D Instance
  207. * @param DMA2D_LayerCfg pointer to a LL_DMA2D_LayerCfgTypeDef structure that contains
  208. * the configuration information for the specified layer.
  209. * @param LayerIdx DMA2D Layer index.
  210. * This parameter can be one of the following values:
  211. * 0(background) / 1(foreground)
  212. * @retval None
  213. */
  214. void LL_DMA2D_ConfigLayer(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg, uint32_t LayerIdx)
  215. {
  216. /* Check the parameters */
  217. assert_param(IS_LL_DMA2D_OFFSET(DMA2D_LayerCfg->LineOffset));
  218. assert_param(IS_LL_DMA2D_LCMODE(DMA2D_LayerCfg->ColorMode));
  219. assert_param(IS_LL_DMA2D_CLUTCMODE(DMA2D_LayerCfg->CLUTColorMode));
  220. assert_param(IS_LL_DMA2D_CLUTSIZE(DMA2D_LayerCfg->CLUTSize));
  221. assert_param(IS_LL_DMA2D_ALPHAMODE(DMA2D_LayerCfg->AlphaMode));
  222. assert_param(IS_LL_DMA2D_GREEN(DMA2D_LayerCfg->Green));
  223. assert_param(IS_LL_DMA2D_RED(DMA2D_LayerCfg->Red));
  224. assert_param(IS_LL_DMA2D_BLUE(DMA2D_LayerCfg->Blue));
  225. assert_param(IS_LL_DMA2D_ALPHA(DMA2D_LayerCfg->Alpha));
  226. if (LayerIdx == 0U)
  227. {
  228. /* Configure the background memory address */
  229. LL_DMA2D_BGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress);
  230. /* Configure the background line offset */
  231. LL_DMA2D_BGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset);
  232. /* Configure the background Alpha value, Alpha mode, CLUT size, CLUT Color mode and Color mode */
  233. MODIFY_REG(DMA2Dx->BGPFCCR, \
  234. (DMA2D_BGPFCCR_ALPHA | DMA2D_BGPFCCR_AM | DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM | DMA2D_BGPFCCR_CM), \
  235. ((DMA2D_LayerCfg->Alpha << DMA2D_BGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->AlphaMode | \
  236. (DMA2D_LayerCfg->CLUTSize << DMA2D_BGPFCCR_CS_Pos) | DMA2D_LayerCfg->CLUTColorMode | \
  237. DMA2D_LayerCfg->ColorMode));
  238. /* Configure the background color */
  239. LL_DMA2D_BGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue);
  240. /* Configure the background CLUT memory address */
  241. LL_DMA2D_BGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress);
  242. }
  243. else
  244. {
  245. /* Configure the foreground memory address */
  246. LL_DMA2D_FGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress);
  247. /* Configure the foreground line offset */
  248. LL_DMA2D_FGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset);
  249. /* Configure the foreground Alpha value, Alpha mode, CLUT size, CLUT Color mode and Color mode */
  250. MODIFY_REG(DMA2Dx->FGPFCCR, \
  251. (DMA2D_FGPFCCR_ALPHA | DMA2D_FGPFCCR_AM | DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM | DMA2D_FGPFCCR_CM), \
  252. ((DMA2D_LayerCfg->Alpha << DMA2D_FGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->AlphaMode | \
  253. (DMA2D_LayerCfg->CLUTSize << DMA2D_FGPFCCR_CS_Pos) | DMA2D_LayerCfg->CLUTColorMode | \
  254. DMA2D_LayerCfg->ColorMode));
  255. /* Configure the foreground color */
  256. LL_DMA2D_FGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue);
  257. /* Configure the foreground CLUT memory address */
  258. LL_DMA2D_FGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress);
  259. }
  260. }
  261. /**
  262. * @brief Set each @ref LL_DMA2D_LayerCfgTypeDef field to default value.
  263. * @param DMA2D_LayerCfg pointer to a @ref LL_DMA2D_LayerCfgTypeDef structure
  264. * whose fields will be set to default values.
  265. * @retval None
  266. */
  267. void LL_DMA2D_LayerCfgStructInit(LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg)
  268. {
  269. /* Set DMA2D_LayerCfg fields to default values */
  270. DMA2D_LayerCfg->MemoryAddress = 0x0U;
  271. DMA2D_LayerCfg->ColorMode = LL_DMA2D_INPUT_MODE_ARGB8888;
  272. DMA2D_LayerCfg->LineOffset = 0x0U;
  273. DMA2D_LayerCfg->CLUTColorMode = LL_DMA2D_CLUT_COLOR_MODE_ARGB8888;
  274. DMA2D_LayerCfg->CLUTSize = 0x0U;
  275. DMA2D_LayerCfg->AlphaMode = LL_DMA2D_ALPHA_MODE_NO_MODIF;
  276. DMA2D_LayerCfg->Alpha = 0x0U;
  277. DMA2D_LayerCfg->Blue = 0x0U;
  278. DMA2D_LayerCfg->Green = 0x0U;
  279. DMA2D_LayerCfg->Red = 0x0U;
  280. DMA2D_LayerCfg->CLUTMemoryAddress = 0x0U;
  281. }
  282. /**
  283. * @brief Initialize DMA2D output color register according to the specified parameters
  284. * in DMA2D_ColorStruct.
  285. * @param DMA2Dx DMA2D Instance
  286. * @param DMA2D_ColorStruct pointer to a LL_DMA2D_ColorTypeDef structure that contains
  287. * the color configuration information for the specified DMA2D peripheral.
  288. * @retval None
  289. */
  290. void LL_DMA2D_ConfigOutputColor(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_ColorTypeDef *DMA2D_ColorStruct)
  291. {
  292. uint32_t outgreen;
  293. uint32_t outred;
  294. uint32_t outalpha;
  295. /* Check the parameters */
  296. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  297. assert_param(IS_LL_DMA2D_OCMODE(DMA2D_ColorStruct->ColorMode));
  298. assert_param(IS_LL_DMA2D_GREEN(DMA2D_ColorStruct->OutputGreen));
  299. assert_param(IS_LL_DMA2D_RED(DMA2D_ColorStruct->OutputRed));
  300. assert_param(IS_LL_DMA2D_BLUE(DMA2D_ColorStruct->OutputBlue));
  301. assert_param(IS_LL_DMA2D_ALPHA(DMA2D_ColorStruct->OutputAlpha));
  302. /* DMA2D OCOLR register configuration ------------------------------------------*/
  303. if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  304. {
  305. outgreen = DMA2D_ColorStruct->OutputGreen << 8U;
  306. outred = DMA2D_ColorStruct->OutputRed << 16U;
  307. outalpha = DMA2D_ColorStruct->OutputAlpha << 24U;
  308. }
  309. else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
  310. {
  311. outgreen = DMA2D_ColorStruct->OutputGreen << 8U;
  312. outred = DMA2D_ColorStruct->OutputRed << 16U;
  313. outalpha = 0x00000000U;
  314. }
  315. else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
  316. {
  317. outgreen = DMA2D_ColorStruct->OutputGreen << 5U;
  318. outred = DMA2D_ColorStruct->OutputRed << 11U;
  319. outalpha = 0x00000000U;
  320. }
  321. else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  322. {
  323. outgreen = DMA2D_ColorStruct->OutputGreen << 5U;
  324. outred = DMA2D_ColorStruct->OutputRed << 10U;
  325. outalpha = DMA2D_ColorStruct->OutputAlpha << 15U;
  326. }
  327. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  328. {
  329. outgreen = DMA2D_ColorStruct->OutputGreen << 4U;
  330. outred = DMA2D_ColorStruct->OutputRed << 8U;
  331. outalpha = DMA2D_ColorStruct->OutputAlpha << 12U;
  332. }
  333. LL_DMA2D_SetOutputColor(DMA2Dx, (outgreen | outred | DMA2D_ColorStruct->OutputBlue | outalpha));
  334. }
  335. /**
  336. * @brief Return DMA2D output Blue color.
  337. * @param DMA2Dx DMA2D Instance.
  338. * @param ColorMode This parameter can be one of the following values:
  339. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
  340. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
  341. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
  342. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
  343. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
  344. * @retval Output Blue color value between Min_Data=0 and Max_Data=0xFF
  345. */
  346. uint32_t LL_DMA2D_GetOutputBlueColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
  347. {
  348. uint32_t color;
  349. /* Check the parameters */
  350. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  351. assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
  352. /* DMA2D OCOLR register reading ------------------------------------------*/
  353. if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  354. {
  355. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU));
  356. }
  357. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
  358. {
  359. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU));
  360. }
  361. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
  362. {
  363. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU));
  364. }
  365. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  366. {
  367. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU));
  368. }
  369. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  370. {
  371. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFU));
  372. }
  373. return color;
  374. }
  375. /**
  376. * @brief Return DMA2D output Green color.
  377. * @param DMA2Dx DMA2D Instance.
  378. * @param ColorMode This parameter can be one of the following values:
  379. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
  380. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
  381. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
  382. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
  383. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
  384. * @retval Output Green color value between Min_Data=0 and Max_Data=0xFF
  385. */
  386. uint32_t LL_DMA2D_GetOutputGreenColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
  387. {
  388. uint32_t color;
  389. /* Check the parameters */
  390. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  391. assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
  392. /* DMA2D OCOLR register reading ------------------------------------------*/
  393. if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  394. {
  395. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U);
  396. }
  397. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
  398. {
  399. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U);
  400. }
  401. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
  402. {
  403. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7E0U) >> 5U);
  404. }
  405. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  406. {
  407. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x3E0U) >> 5U);
  408. }
  409. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  410. {
  411. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF0U) >> 4U);
  412. }
  413. return color;
  414. }
  415. /**
  416. * @brief Return DMA2D output Red color.
  417. * @param DMA2Dx DMA2D Instance.
  418. * @param ColorMode This parameter can be one of the following values:
  419. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
  420. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
  421. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
  422. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
  423. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
  424. * @retval Output Red color value between Min_Data=0 and Max_Data=0xFF
  425. */
  426. uint32_t LL_DMA2D_GetOutputRedColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
  427. {
  428. uint32_t color;
  429. /* Check the parameters */
  430. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  431. assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
  432. /* DMA2D OCOLR register reading ------------------------------------------*/
  433. if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  434. {
  435. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U);
  436. }
  437. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
  438. {
  439. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U);
  440. }
  441. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
  442. {
  443. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF800U) >> 11U);
  444. }
  445. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  446. {
  447. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7C00U) >> 10U);
  448. }
  449. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  450. {
  451. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF00U) >> 8U);
  452. }
  453. return color;
  454. }
  455. /**
  456. * @brief Return DMA2D output Alpha color.
  457. * @param DMA2Dx DMA2D Instance.
  458. * @param ColorMode This parameter can be one of the following values:
  459. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
  460. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
  461. * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
  462. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
  463. * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
  464. * @retval Output Alpha color value between Min_Data=0 and Max_Data=0xFF
  465. */
  466. uint32_t LL_DMA2D_GetOutputAlphaColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
  467. {
  468. uint32_t color;
  469. /* Check the parameters */
  470. assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
  471. assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
  472. /* DMA2D OCOLR register reading ------------------------------------------*/
  473. if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
  474. {
  475. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF000000U) >> 24U);
  476. }
  477. else if ((ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) || (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565))
  478. {
  479. color = 0x0U;
  480. }
  481. else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
  482. {
  483. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x8000U) >> 15U);
  484. }
  485. else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
  486. {
  487. color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF000U) >> 12U);
  488. }
  489. return color;
  490. }
  491. /**
  492. * @brief Configure DMA2D transfer size.
  493. * @param DMA2Dx DMA2D Instance
  494. * @param NbrOfLines Value between Min_Data=0 and Max_Data=0xFFFF
  495. * @param NbrOfPixelsPerLines Value between Min_Data=0 and Max_Data=0x3FFF
  496. * @retval None
  497. */
  498. void LL_DMA2D_ConfigSize(DMA2D_TypeDef *DMA2Dx, uint32_t NbrOfLines, uint32_t NbrOfPixelsPerLines)
  499. {
  500. MODIFY_REG(DMA2Dx->NLR, (DMA2D_NLR_PL | DMA2D_NLR_NL), \
  501. ((NbrOfPixelsPerLines << DMA2D_NLR_PL_Pos) | NbrOfLines));
  502. }
  503. /**
  504. * @}
  505. */
  506. /**
  507. * @}
  508. */
  509. /**
  510. * @}
  511. */
  512. #endif /* defined (DMA2D) */
  513. /**
  514. * @}
  515. */
  516. #endif /* USE_FULL_LL_DRIVER */
  517. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/