18#if defined(USE_FULL_LL_DRIVER)
24#include "stm32_assert.h"
26#define assert_param(expr) ((void)0U)
45#define LL_DMA2D_COLOR 0xFFU
46#define LL_DMA2D_NUMBEROFLINES DMA2D_NLR_NL
47#define LL_DMA2D_NUMBEROFPIXELS (DMA2D_NLR_PL >> DMA2D_NLR_PL_Pos)
48#define LL_DMA2D_OFFSET_MAX 0x3FFFU
49#define LL_DMA2D_CLUTSIZE_MAX 0xFFU
57#define IS_LL_DMA2D_MODE(MODE) (((MODE) == LL_DMA2D_MODE_M2M) || \
58 ((MODE) == LL_DMA2D_MODE_M2M_PFC) || \
59 ((MODE) == LL_DMA2D_MODE_M2M_BLEND) || \
60 ((MODE) == LL_DMA2D_MODE_R2M))
62#define IS_LL_DMA2D_OCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB8888) || \
63 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB888) || \
64 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB565) || \
65 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB1555) || \
66 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB4444))
68#define IS_LL_DMA2D_GREEN(GREEN) ((GREEN) <= LL_DMA2D_COLOR)
69#define IS_LL_DMA2D_RED(RED) ((RED) <= LL_DMA2D_COLOR)
70#define IS_LL_DMA2D_BLUE(BLUE) ((BLUE) <= LL_DMA2D_COLOR)
71#define IS_LL_DMA2D_ALPHA(ALPHA) ((ALPHA) <= LL_DMA2D_COLOR)
74#define IS_LL_DMA2D_OFFSET(OFFSET) ((OFFSET) <= LL_DMA2D_OFFSET_MAX)
76#define IS_LL_DMA2D_LINE(LINES) ((LINES) <= LL_DMA2D_NUMBEROFLINES)
77#define IS_LL_DMA2D_PIXEL(PIXELS) ((PIXELS) <= LL_DMA2D_NUMBEROFPIXELS)
81#define IS_LL_DMA2D_LCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB8888) || \
82 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB888) || \
83 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB565) || \
84 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB1555) || \
85 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB4444) || \
86 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L8) || \
87 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL44) || \
88 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL88) || \
89 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L4) || \
90 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A8) || \
91 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A4))
93#define IS_LL_DMA2D_CLUTCMODE(CLUTCMODE) (((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_ARGB8888) || \
94 ((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_RGB888))
96#define IS_LL_DMA2D_CLUTSIZE(SIZE) ((SIZE) <= LL_DMA2D_CLUTSIZE_MAX)
98#define IS_LL_DMA2D_ALPHAMODE(MODE) (((MODE) == LL_DMA2D_ALPHA_MODE_NO_MODIF) || \
99 ((MODE) == LL_DMA2D_ALPHA_MODE_REPLACE) || \
100 ((MODE) == LL_DMA2D_ALPHA_MODE_COMBINE))
125ErrorStatus LL_DMA2D_DeInit(
const DMA2D_TypeDef *DMA2Dx)
127 ErrorStatus status = SUCCESS;
135 LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA2D);
138 LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA2D);
159ErrorStatus LL_DMA2D_Init(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_InitTypeDef *DMA2D_InitStruct)
161 ErrorStatus status = ERROR;
162 LL_DMA2D_ColorTypeDef dma2d_colorstruct;
172 assert_param(IS_LL_DMA2D_OCMODE(DMA2D_InitStruct->ColorMode));
173 assert_param(IS_LL_DMA2D_LINE(DMA2D_InitStruct->NbrOfLines));
174 assert_param(IS_LL_DMA2D_PIXEL(DMA2D_InitStruct->NbrOfPixelsPerLines));
175 assert_param(IS_LL_DMA2D_GREEN(DMA2D_InitStruct->OutputGreen));
176 assert_param(IS_LL_DMA2D_RED(DMA2D_InitStruct->OutputRed));
177 assert_param(IS_LL_DMA2D_BLUE(DMA2D_InitStruct->OutputBlue));
178 assert_param(IS_LL_DMA2D_ALPHA(DMA2D_InitStruct->OutputAlpha));
179 assert_param(IS_LL_DMA2D_OFFSET(DMA2D_InitStruct->LineOffset));
182 tmp = LL_DMA2D_IsTransferOngoing(DMA2Dx);
183 tmp1 = LL_DMA2D_FGND_IsEnabledCLUTLoad(DMA2Dx);
184 tmp2 = LL_DMA2D_BGND_IsEnabledCLUTLoad(DMA2Dx);
185 if ((tmp == 0U) && (tmp1 == 0U) && (tmp2 == 0U))
188 LL_DMA2D_SetMode(DMA2Dx, DMA2D_InitStruct->Mode);
191 regMask = DMA2D_OPFCCR_CM;
192 regValue = DMA2D_InitStruct->ColorMode;
197 MODIFY_REG(DMA2Dx->OPFCCR, regMask, regValue);
200 LL_DMA2D_SetLineOffset(DMA2Dx, DMA2D_InitStruct->LineOffset);
203 LL_DMA2D_ConfigSize(DMA2Dx, DMA2D_InitStruct->NbrOfLines, DMA2D_InitStruct->NbrOfPixelsPerLines);
206 LL_DMA2D_SetOutputMemAddr(DMA2Dx, DMA2D_InitStruct->OutputMemoryAddress);
209 dma2d_colorstruct.ColorMode = DMA2D_InitStruct->ColorMode;
210 dma2d_colorstruct.OutputBlue = DMA2D_InitStruct->OutputBlue;
211 dma2d_colorstruct.OutputGreen = DMA2D_InitStruct->OutputGreen;
212 dma2d_colorstruct.OutputRed = DMA2D_InitStruct->OutputRed;
213 dma2d_colorstruct.OutputAlpha = DMA2D_InitStruct->OutputAlpha;
214 LL_DMA2D_ConfigOutputColor(DMA2Dx, &dma2d_colorstruct);
229void LL_DMA2D_StructInit(LL_DMA2D_InitTypeDef *DMA2D_InitStruct)
232 DMA2D_InitStruct->Mode = LL_DMA2D_MODE_M2M;
233 DMA2D_InitStruct->ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB8888;
234 DMA2D_InitStruct->NbrOfLines = 0x0U;
235 DMA2D_InitStruct->NbrOfPixelsPerLines = 0x0U;
236 DMA2D_InitStruct->LineOffset = 0x0U;
237 DMA2D_InitStruct->OutputBlue = 0x0U;
238 DMA2D_InitStruct->OutputGreen = 0x0U;
239 DMA2D_InitStruct->OutputRed = 0x0U;
240 DMA2D_InitStruct->OutputAlpha = 0x0U;
241 DMA2D_InitStruct->OutputMemoryAddress = 0x0U;
255void LL_DMA2D_ConfigLayer(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg, uint32_t LayerIdx)
258 assert_param(IS_LL_DMA2D_OFFSET(DMA2D_LayerCfg->LineOffset));
259 assert_param(IS_LL_DMA2D_LCMODE(DMA2D_LayerCfg->ColorMode));
260 assert_param(IS_LL_DMA2D_CLUTCMODE(DMA2D_LayerCfg->CLUTColorMode));
261 assert_param(IS_LL_DMA2D_CLUTSIZE(DMA2D_LayerCfg->CLUTSize));
262 assert_param(IS_LL_DMA2D_ALPHAMODE(DMA2D_LayerCfg->AlphaMode));
272 LL_DMA2D_BGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress);
275 LL_DMA2D_BGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset);
278 MODIFY_REG(DMA2Dx->BGPFCCR, \
279 (DMA2D_BGPFCCR_ALPHA | DMA2D_BGPFCCR_AM | DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM | DMA2D_BGPFCCR_CM), \
280 ((DMA2D_LayerCfg->Alpha << DMA2D_BGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->AlphaMode | \
281 (DMA2D_LayerCfg->CLUTSize << DMA2D_BGPFCCR_CS_Pos) | DMA2D_LayerCfg->CLUTColorMode | \
282 DMA2D_LayerCfg->ColorMode));
285 LL_DMA2D_BGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue);
288 LL_DMA2D_BGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress);
293 LL_DMA2D_FGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress);
296 LL_DMA2D_FGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset);
299 MODIFY_REG(DMA2Dx->FGPFCCR, \
300 (DMA2D_FGPFCCR_ALPHA | DMA2D_FGPFCCR_AM | DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM | DMA2D_FGPFCCR_CM), \
301 ((DMA2D_LayerCfg->Alpha << DMA2D_FGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->AlphaMode | \
302 (DMA2D_LayerCfg->CLUTSize << DMA2D_FGPFCCR_CS_Pos) | DMA2D_LayerCfg->CLUTColorMode | \
303 DMA2D_LayerCfg->ColorMode));
306 LL_DMA2D_FGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue);
309 LL_DMA2D_FGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress);
319void LL_DMA2D_LayerCfgStructInit(LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg)
322 DMA2D_LayerCfg->MemoryAddress = 0x0U;
323 DMA2D_LayerCfg->ColorMode = LL_DMA2D_INPUT_MODE_ARGB8888;
324 DMA2D_LayerCfg->LineOffset = 0x0U;
325 DMA2D_LayerCfg->CLUTColorMode = LL_DMA2D_CLUT_COLOR_MODE_ARGB8888;
326 DMA2D_LayerCfg->CLUTSize = 0x0U;
327 DMA2D_LayerCfg->AlphaMode = LL_DMA2D_ALPHA_MODE_NO_MODIF;
328 DMA2D_LayerCfg->Alpha = 0x0U;
329 DMA2D_LayerCfg->Blue = 0x0U;
330 DMA2D_LayerCfg->Green = 0x0U;
331 DMA2D_LayerCfg->Red = 0x0U;
332 DMA2D_LayerCfg->CLUTMemoryAddress = 0x0U;
343void LL_DMA2D_ConfigOutputColor(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_ColorTypeDef *DMA2D_ColorStruct)
351 assert_param(IS_LL_DMA2D_OCMODE(DMA2D_ColorStruct->ColorMode));
352 assert_param(IS_LL_DMA2D_GREEN(DMA2D_ColorStruct->OutputGreen));
353 assert_param(IS_LL_DMA2D_RED(DMA2D_ColorStruct->OutputRed));
354 assert_param(IS_LL_DMA2D_BLUE(DMA2D_ColorStruct->OutputBlue));
355 assert_param(IS_LL_DMA2D_ALPHA(DMA2D_ColorStruct->OutputAlpha));
358 if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
360 outgreen = DMA2D_ColorStruct->OutputGreen << 8U;
361 outred = DMA2D_ColorStruct->OutputRed << 16U;
362 outalpha = DMA2D_ColorStruct->OutputAlpha << 24U;
364 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
366 outgreen = DMA2D_ColorStruct->OutputGreen << 8U;
367 outred = DMA2D_ColorStruct->OutputRed << 16U;
368 outalpha = 0x00000000U;
370 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
372 outgreen = DMA2D_ColorStruct->OutputGreen << 5U;
373 outred = DMA2D_ColorStruct->OutputRed << 11U;
374 outalpha = 0x00000000U;
376 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
378 outgreen = DMA2D_ColorStruct->OutputGreen << 5U;
379 outred = DMA2D_ColorStruct->OutputRed << 10U;
380 outalpha = DMA2D_ColorStruct->OutputAlpha << 15U;
384 outgreen = DMA2D_ColorStruct->OutputGreen << 4U;
385 outred = DMA2D_ColorStruct->OutputRed << 8U;
386 outalpha = DMA2D_ColorStruct->OutputAlpha << 12U;
388 LL_DMA2D_SetOutputColor(DMA2Dx, (outgreen | outred | DMA2D_ColorStruct->OutputBlue | outalpha));
402uint32_t LL_DMA2D_GetOutputBlueColor(
const DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
411 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
413 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU));
415 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
417 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU));
419 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
421 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU));
423 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
425 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU));
429 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFU));
446uint32_t LL_DMA2D_GetOutputGreenColor(
const DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
455 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
457 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U);
459 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
461 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U);
463 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
465 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7E0U) >> 5U);
467 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
469 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x3E0U) >> 5U);
473 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF0U) >> 4U);
490uint32_t LL_DMA2D_GetOutputRedColor(
const DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
499 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
501 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U);
503 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
505 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U);
507 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
509 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF800U) >> 11U);
511 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
513 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7C00U) >> 10U);
517 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF00U) >> 8U);
534uint32_t LL_DMA2D_GetOutputAlphaColor(
const DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
543 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
545 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF000000U) >> 24U);
547 else if ((ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) || (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565))
551 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
553 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x8000U) >> 15U);
557 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF000U) >> 12U);
570void LL_DMA2D_ConfigSize(DMA2D_TypeDef *DMA2Dx, uint32_t NbrOfLines, uint32_t NbrOfPixelsPerLines)
572 MODIFY_REG(DMA2Dx->NLR, (DMA2D_NLR_PL | DMA2D_NLR_NL), \
573 ((NbrOfPixelsPerLines << DMA2D_NLR_PL_Pos) | NbrOfLines));
#define assert_param(expr)
Header file of BUS LL module.
Header file of DMA2D LL module.