STM32H735xx HAL User Manual
|
00001 /** 00002 ****************************************************************************** 00003 * @file stm32h7xx_ll_dma2d.c 00004 * @author MCD Application Team 00005 * @brief DMA2D LL module driver. 00006 ****************************************************************************** 00007 * @attention 00008 * 00009 * Copyright (c) 2017 STMicroelectronics. 00010 * All rights reserved. 00011 * 00012 * This software is licensed under terms that can be found in the LICENSE file 00013 * in the root directory of this software component. 00014 * If no LICENSE file comes with this software, it is provided AS-IS. 00015 * 00016 ****************************************************************************** 00017 */ 00018 #if defined(USE_FULL_LL_DRIVER) 00019 00020 /* Includes ------------------------------------------------------------------*/ 00021 #include "stm32h7xx_ll_dma2d.h" 00022 #include "stm32h7xx_ll_bus.h" 00023 #ifdef USE_FULL_ASSERT 00024 #include "stm32_assert.h" 00025 #else 00026 #define assert_param(expr) ((void)0U) 00027 #endif /* USE_FULL_ASSERT */ 00028 00029 /** @addtogroup STM32H7xx_LL_Driver 00030 * @{ 00031 */ 00032 00033 #if defined (DMA2D) 00034 00035 /** @addtogroup DMA2D_LL 00036 * @{ 00037 */ 00038 00039 /* Private types -------------------------------------------------------------*/ 00040 /* Private variables ---------------------------------------------------------*/ 00041 /* Private constants ---------------------------------------------------------*/ 00042 /** @addtogroup DMA2D_LL_Private_Constants DMA2D Private Constants 00043 * @{ 00044 */ 00045 #define LL_DMA2D_COLOR 0xFFU /*!< Maximum output color setting */ 00046 #define LL_DMA2D_NUMBEROFLINES DMA2D_NLR_NL /*!< Maximum number of lines */ 00047 #define LL_DMA2D_NUMBEROFPIXELS (DMA2D_NLR_PL >> DMA2D_NLR_PL_Pos) /*!< Maximum number of pixels per lines */ 00048 #define LL_DMA2D_OFFSET_MAX 0x3FFFU /*!< Maximum output line offset expressed in pixels */ 00049 #define LL_DMA2D_CLUTSIZE_MAX 0xFFU /*!< Maximum CLUT size */ 00050 /** 00051 * @} 00052 */ 00053 /* Private macros ------------------------------------------------------------*/ 00054 /** @addtogroup DMA2D_LL_Private_Macros 00055 * @{ 00056 */ 00057 #define IS_LL_DMA2D_MODE(MODE) (((MODE) == LL_DMA2D_MODE_M2M) || \ 00058 ((MODE) == LL_DMA2D_MODE_M2M_PFC) || \ 00059 ((MODE) == LL_DMA2D_MODE_M2M_BLEND) || \ 00060 ((MODE) == LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_FG) || \ 00061 ((MODE) == LL_DMA2D_MODE_M2M_BLEND_FIXED_COLOR_BG) || \ 00062 ((MODE) == LL_DMA2D_MODE_R2M)) 00063 00064 #define IS_LL_DMA2D_OCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB8888) || \ 00065 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB888) || \ 00066 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB565) || \ 00067 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB1555) || \ 00068 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB4444)) 00069 00070 #define IS_LL_DMA2D_GREEN(GREEN) ((GREEN) <= LL_DMA2D_COLOR) 00071 #define IS_LL_DMA2D_RED(RED) ((RED) <= LL_DMA2D_COLOR) 00072 #define IS_LL_DMA2D_BLUE(BLUE) ((BLUE) <= LL_DMA2D_COLOR) 00073 #define IS_LL_DMA2D_ALPHA(ALPHA) ((ALPHA) <= LL_DMA2D_COLOR) 00074 00075 #define IS_LL_DMA2D_OFFSET_MODE(MODE) (((MODE) == LL_DMA2D_LINE_OFFSET_PIXELS) || \ 00076 ((MODE) == LL_DMA2D_LINE_OFFSET_BYTES)) 00077 00078 #define IS_LL_DMA2D_OFFSET(OFFSET) ((OFFSET) <= LL_DMA2D_OFFSET_MAX) 00079 00080 #define IS_LL_DMA2D_LINE(LINES) ((LINES) <= LL_DMA2D_NUMBEROFLINES) 00081 #define IS_LL_DMA2D_PIXEL(PIXELS) ((PIXELS) <= LL_DMA2D_NUMBEROFPIXELS) 00082 00083 #define IS_LL_DMA2D_SWAP_MODE(MODE) (((MODE) == LL_DMA2D_SWAP_MODE_REGULAR) || \ 00084 ((MODE) == LL_DMA2D_SWAP_MODE_TWO_BY_TWO)) 00085 00086 #define IS_LL_DMA2D_ALPHAINV(ALPHA) (((ALPHA) == LL_DMA2D_ALPHA_REGULAR) || \ 00087 ((ALPHA) == LL_DMA2D_ALPHA_INVERTED)) 00088 00089 #define IS_LL_DMA2D_RBSWAP(RBSWAP) (((RBSWAP) == LL_DMA2D_RB_MODE_REGULAR) || \ 00090 ((RBSWAP) == LL_DMA2D_RB_MODE_SWAP)) 00091 00092 #define IS_LL_DMA2D_LCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB8888) || \ 00093 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB888) || \ 00094 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB565) || \ 00095 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB1555) || \ 00096 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB4444) || \ 00097 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L8) || \ 00098 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL44) || \ 00099 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL88) || \ 00100 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L4) || \ 00101 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A8) || \ 00102 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A4)) 00103 00104 #define IS_LL_DMA2D_CLUTCMODE(CLUTCMODE) (((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_ARGB8888) || \ 00105 ((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_RGB888)) 00106 00107 #define IS_LL_DMA2D_CLUTSIZE(SIZE) ((SIZE) <= LL_DMA2D_CLUTSIZE_MAX) 00108 00109 #define IS_LL_DMA2D_ALPHAMODE(MODE) (((MODE) == LL_DMA2D_ALPHA_MODE_NO_MODIF) || \ 00110 ((MODE) == LL_DMA2D_ALPHA_MODE_REPLACE) || \ 00111 ((MODE) == LL_DMA2D_ALPHA_MODE_COMBINE)) 00112 00113 #define IS_LL_DMA2D_CHROMA_SUB_SAMPLING(CSS) (((CSS) == LL_DMA2D_CSS_444) || \ 00114 ((CSS) == LL_DMA2D_CSS_422) || \ 00115 ((CSS) == LL_DMA2D_CSS_420)) 00116 00117 /** 00118 * @} 00119 */ 00120 00121 /* Private function prototypes -----------------------------------------------*/ 00122 00123 /* Exported functions --------------------------------------------------------*/ 00124 /** @addtogroup DMA2D_LL_Exported_Functions 00125 * @{ 00126 */ 00127 00128 /** @addtogroup DMA2D_LL_EF_Init_Functions Initialization and De-initialization Functions 00129 * @{ 00130 */ 00131 00132 /** 00133 * @brief De-initialize DMA2D registers (registers restored to their default values). 00134 * @param DMA2Dx DMA2D Instance 00135 * @retval An ErrorStatus enumeration value: 00136 * - SUCCESS: DMA2D registers are de-initialized 00137 * - ERROR: DMA2D registers are not de-initialized 00138 */ 00139 ErrorStatus LL_DMA2D_DeInit(DMA2D_TypeDef *DMA2Dx) 00140 { 00141 ErrorStatus status = SUCCESS; 00142 00143 /* Check the parameters */ 00144 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx)); 00145 00146 if (DMA2Dx == DMA2D) 00147 { 00148 /* Force reset of DMA2D clock */ 00149 LL_AHB3_GRP1_ForceReset(LL_AHB3_GRP1_PERIPH_DMA2D); 00150 00151 /* Release reset of DMA2D clock */ 00152 LL_AHB3_GRP1_ReleaseReset(LL_AHB3_GRP1_PERIPH_DMA2D); 00153 00154 } 00155 else 00156 { 00157 status = ERROR; 00158 } 00159 00160 return (status); 00161 } 00162 00163 /** 00164 * @brief Initialize DMA2D registers according to the specified parameters in DMA2D_InitStruct. 00165 * @note DMA2D transfers must be disabled to set initialization bits in configuration registers, 00166 * otherwise ERROR result is returned. 00167 * @param DMA2Dx DMA2D Instance 00168 * @param DMA2D_InitStruct pointer to a LL_DMA2D_InitTypeDef structure 00169 * that contains the configuration information for the specified DMA2D peripheral. 00170 * @retval An ErrorStatus enumeration value: 00171 * - SUCCESS: DMA2D registers are initialized according to DMA2D_InitStruct content 00172 * - ERROR: Issue occurred during DMA2D registers initialization 00173 */ 00174 ErrorStatus LL_DMA2D_Init(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_InitTypeDef *DMA2D_InitStruct) 00175 { 00176 ErrorStatus status = ERROR; 00177 LL_DMA2D_ColorTypeDef dma2d_colorstruct; 00178 uint32_t tmp; 00179 uint32_t tmp1; 00180 uint32_t tmp2; 00181 uint32_t regMask; 00182 uint32_t regValue; 00183 00184 /* Check the parameters */ 00185 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx)); 00186 assert_param(IS_LL_DMA2D_MODE(DMA2D_InitStruct->Mode)); 00187 assert_param(IS_LL_DMA2D_OCMODE(DMA2D_InitStruct->ColorMode)); 00188 assert_param(IS_LL_DMA2D_LINE(DMA2D_InitStruct->NbrOfLines)); 00189 assert_param(IS_LL_DMA2D_PIXEL(DMA2D_InitStruct->NbrOfPixelsPerLines)); 00190 assert_param(IS_LL_DMA2D_GREEN(DMA2D_InitStruct->OutputGreen)); 00191 assert_param(IS_LL_DMA2D_RED(DMA2D_InitStruct->OutputRed)); 00192 assert_param(IS_LL_DMA2D_BLUE(DMA2D_InitStruct->OutputBlue)); 00193 assert_param(IS_LL_DMA2D_ALPHA(DMA2D_InitStruct->OutputAlpha)); 00194 assert_param(IS_LL_DMA2D_SWAP_MODE(DMA2D_InitStruct->OutputSwapMode)); 00195 assert_param(IS_LL_DMA2D_OFFSET_MODE(DMA2D_InitStruct->LineOffsetMode)); 00196 assert_param(IS_LL_DMA2D_OFFSET(DMA2D_InitStruct->LineOffset)); 00197 assert_param(IS_LL_DMA2D_ALPHAINV(DMA2D_InitStruct->AlphaInversionMode)); 00198 assert_param(IS_LL_DMA2D_RBSWAP(DMA2D_InitStruct->RBSwapMode)); 00199 00200 /* DMA2D transfers must be disabled to configure bits in initialization registers */ 00201 tmp = LL_DMA2D_IsTransferOngoing(DMA2Dx); 00202 tmp1 = LL_DMA2D_FGND_IsEnabledCLUTLoad(DMA2Dx); 00203 tmp2 = LL_DMA2D_BGND_IsEnabledCLUTLoad(DMA2Dx); 00204 if ((tmp == 0U) && (tmp1 == 0U) && (tmp2 == 0U)) 00205 { 00206 /* DMA2D CR register configuration -------------------------------------------*/ 00207 MODIFY_REG(DMA2Dx->CR, (DMA2D_CR_MODE | DMA2D_CR_LOM), \ 00208 (DMA2D_InitStruct->Mode | DMA2D_InitStruct->LineOffsetMode)); 00209 00210 /* DMA2D OPFCCR register configuration ---------------------------------------*/ 00211 regMask = DMA2D_OPFCCR_CM; 00212 regValue = DMA2D_InitStruct->ColorMode; 00213 00214 regMask |= DMA2D_OPFCCR_SB; 00215 regValue |= DMA2D_InitStruct->OutputSwapMode; 00216 00217 regMask |= (DMA2D_OPFCCR_RBS | DMA2D_OPFCCR_AI); 00218 regValue |= (DMA2D_InitStruct->AlphaInversionMode | DMA2D_InitStruct->RBSwapMode); 00219 00220 00221 MODIFY_REG(DMA2Dx->OPFCCR, regMask, regValue); 00222 00223 /* DMA2D OOR register configuration ------------------------------------------*/ 00224 LL_DMA2D_SetLineOffset(DMA2Dx, DMA2D_InitStruct->LineOffset); 00225 00226 /* DMA2D NLR register configuration ------------------------------------------*/ 00227 LL_DMA2D_ConfigSize(DMA2Dx, DMA2D_InitStruct->NbrOfLines, DMA2D_InitStruct->NbrOfPixelsPerLines); 00228 00229 /* DMA2D OMAR register configuration ------------------------------------------*/ 00230 LL_DMA2D_SetOutputMemAddr(DMA2Dx, DMA2D_InitStruct->OutputMemoryAddress); 00231 00232 /* DMA2D OCOLR register configuration ------------------------------------------*/ 00233 dma2d_colorstruct.ColorMode = DMA2D_InitStruct->ColorMode; 00234 dma2d_colorstruct.OutputBlue = DMA2D_InitStruct->OutputBlue; 00235 dma2d_colorstruct.OutputGreen = DMA2D_InitStruct->OutputGreen; 00236 dma2d_colorstruct.OutputRed = DMA2D_InitStruct->OutputRed; 00237 dma2d_colorstruct.OutputAlpha = DMA2D_InitStruct->OutputAlpha; 00238 LL_DMA2D_ConfigOutputColor(DMA2Dx, &dma2d_colorstruct); 00239 00240 status = SUCCESS; 00241 } 00242 /* If DMA2D transfers are not disabled, return ERROR */ 00243 00244 return (status); 00245 } 00246 00247 /** 00248 * @brief Set each @ref LL_DMA2D_InitTypeDef field to default value. 00249 * @param DMA2D_InitStruct pointer to a @ref LL_DMA2D_InitTypeDef structure 00250 * whose fields will be set to default values. 00251 * @retval None 00252 */ 00253 void LL_DMA2D_StructInit(LL_DMA2D_InitTypeDef *DMA2D_InitStruct) 00254 { 00255 /* Set DMA2D_InitStruct fields to default values */ 00256 DMA2D_InitStruct->Mode = LL_DMA2D_MODE_M2M; 00257 DMA2D_InitStruct->ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB8888; 00258 DMA2D_InitStruct->NbrOfLines = 0x0U; 00259 DMA2D_InitStruct->NbrOfPixelsPerLines = 0x0U; 00260 DMA2D_InitStruct->LineOffsetMode = LL_DMA2D_LINE_OFFSET_PIXELS; 00261 DMA2D_InitStruct->LineOffset = 0x0U; 00262 DMA2D_InitStruct->OutputBlue = 0x0U; 00263 DMA2D_InitStruct->OutputGreen = 0x0U; 00264 DMA2D_InitStruct->OutputRed = 0x0U; 00265 DMA2D_InitStruct->OutputAlpha = 0x0U; 00266 DMA2D_InitStruct->OutputMemoryAddress = 0x0U; 00267 DMA2D_InitStruct->OutputSwapMode = LL_DMA2D_SWAP_MODE_REGULAR; 00268 DMA2D_InitStruct->AlphaInversionMode = LL_DMA2D_ALPHA_REGULAR; 00269 DMA2D_InitStruct->RBSwapMode = LL_DMA2D_RB_MODE_REGULAR; 00270 } 00271 00272 /** 00273 * @brief Configure the foreground or background according to the specified parameters 00274 * in the LL_DMA2D_LayerCfgTypeDef structure. 00275 * @param DMA2Dx DMA2D Instance 00276 * @param DMA2D_LayerCfg pointer to a LL_DMA2D_LayerCfgTypeDef structure that contains 00277 * the configuration information for the specified layer. 00278 * @param LayerIdx DMA2D Layer index. 00279 * This parameter can be one of the following values: 00280 * 0(background) / 1(foreground) 00281 * @retval None 00282 */ 00283 void LL_DMA2D_ConfigLayer(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg, uint32_t LayerIdx) 00284 { 00285 /* Check the parameters */ 00286 assert_param(IS_LL_DMA2D_OFFSET(DMA2D_LayerCfg->LineOffset)); 00287 assert_param(IS_LL_DMA2D_LCMODE(DMA2D_LayerCfg->ColorMode)); 00288 assert_param(IS_LL_DMA2D_CLUTCMODE(DMA2D_LayerCfg->CLUTColorMode)); 00289 assert_param(IS_LL_DMA2D_CLUTSIZE(DMA2D_LayerCfg->CLUTSize)); 00290 assert_param(IS_LL_DMA2D_ALPHAMODE(DMA2D_LayerCfg->AlphaMode)); 00291 assert_param(IS_LL_DMA2D_GREEN(DMA2D_LayerCfg->Green)); 00292 assert_param(IS_LL_DMA2D_RED(DMA2D_LayerCfg->Red)); 00293 assert_param(IS_LL_DMA2D_BLUE(DMA2D_LayerCfg->Blue)); 00294 assert_param(IS_LL_DMA2D_ALPHA(DMA2D_LayerCfg->Alpha)); 00295 assert_param(IS_LL_DMA2D_ALPHAINV(DMA2D_LayerCfg->AlphaInversionMode)); 00296 assert_param(IS_LL_DMA2D_RBSWAP(DMA2D_LayerCfg->RBSwapMode)); 00297 assert_param(IS_LL_DMA2D_CHROMA_SUB_SAMPLING(DMA2D_LayerCfg->ChromaSubSampling)); 00298 00299 00300 if (LayerIdx == 0U) 00301 { 00302 /* Configure the background memory address */ 00303 LL_DMA2D_BGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress); 00304 00305 /* Configure the background line offset */ 00306 LL_DMA2D_BGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset); 00307 00308 /* Configure the background Alpha value, Alpha mode, RB swap, Alpha inversion 00309 CLUT size, CLUT Color mode and Color mode */ 00310 MODIFY_REG(DMA2Dx->BGPFCCR, \ 00311 (DMA2D_BGPFCCR_ALPHA | DMA2D_BGPFCCR_RBS | DMA2D_BGPFCCR_AI | DMA2D_BGPFCCR_AM | \ 00312 DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM | DMA2D_BGPFCCR_CM), \ 00313 ((DMA2D_LayerCfg->Alpha << DMA2D_BGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->RBSwapMode | \ 00314 DMA2D_LayerCfg->AlphaInversionMode | DMA2D_LayerCfg->AlphaMode | \ 00315 (DMA2D_LayerCfg->CLUTSize << DMA2D_BGPFCCR_CS_Pos) | DMA2D_LayerCfg->CLUTColorMode | \ 00316 DMA2D_LayerCfg->ColorMode)); 00317 00318 /* Configure the background color */ 00319 LL_DMA2D_BGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue); 00320 00321 /* Configure the background CLUT memory address */ 00322 LL_DMA2D_BGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress); 00323 } 00324 else 00325 { 00326 /* Configure the foreground memory address */ 00327 LL_DMA2D_FGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress); 00328 00329 /* Configure the foreground line offset */ 00330 LL_DMA2D_FGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset); 00331 00332 /* Configure the foreground Alpha value, Alpha mode, RB swap, Alpha inversion 00333 CLUT size, CLUT Color mode and Color mode */ 00334 MODIFY_REG(DMA2Dx->FGPFCCR, \ 00335 (DMA2D_FGPFCCR_ALPHA | DMA2D_FGPFCCR_RBS | DMA2D_FGPFCCR_AI | DMA2D_FGPFCCR_CSS | DMA2D_FGPFCCR_AM | \ 00336 DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM | DMA2D_FGPFCCR_CM), \ 00337 ((DMA2D_LayerCfg->Alpha << DMA2D_FGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->RBSwapMode | \ 00338 DMA2D_LayerCfg->AlphaInversionMode | DMA2D_LayerCfg->ChromaSubSampling | \ 00339 DMA2D_LayerCfg->AlphaMode | (DMA2D_LayerCfg->CLUTSize << DMA2D_FGPFCCR_CS_Pos) | \ 00340 DMA2D_LayerCfg->CLUTColorMode | DMA2D_LayerCfg->ColorMode)); 00341 00342 /* Configure the foreground color */ 00343 LL_DMA2D_FGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue); 00344 00345 /* Configure the foreground CLUT memory address */ 00346 LL_DMA2D_FGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress); 00347 } 00348 } 00349 00350 /** 00351 * @brief Set each @ref LL_DMA2D_LayerCfgTypeDef field to default value. 00352 * @param DMA2D_LayerCfg pointer to a @ref LL_DMA2D_LayerCfgTypeDef structure 00353 * whose fields will be set to default values. 00354 * @retval None 00355 */ 00356 void LL_DMA2D_LayerCfgStructInit(LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg) 00357 { 00358 /* Set DMA2D_LayerCfg fields to default values */ 00359 DMA2D_LayerCfg->MemoryAddress = 0x0U; 00360 DMA2D_LayerCfg->ColorMode = LL_DMA2D_INPUT_MODE_ARGB8888; 00361 DMA2D_LayerCfg->LineOffset = 0x0U; 00362 DMA2D_LayerCfg->CLUTColorMode = LL_DMA2D_CLUT_COLOR_MODE_ARGB8888; 00363 DMA2D_LayerCfg->CLUTSize = 0x0U; 00364 DMA2D_LayerCfg->AlphaMode = LL_DMA2D_ALPHA_MODE_NO_MODIF; 00365 DMA2D_LayerCfg->Alpha = 0x0U; 00366 DMA2D_LayerCfg->Blue = 0x0U; 00367 DMA2D_LayerCfg->Green = 0x0U; 00368 DMA2D_LayerCfg->Red = 0x0U; 00369 DMA2D_LayerCfg->CLUTMemoryAddress = 0x0U; 00370 DMA2D_LayerCfg->AlphaInversionMode = LL_DMA2D_ALPHA_REGULAR; 00371 DMA2D_LayerCfg->RBSwapMode = LL_DMA2D_RB_MODE_REGULAR; 00372 DMA2D_LayerCfg->ChromaSubSampling = LL_DMA2D_CSS_444; 00373 } 00374 00375 /** 00376 * @brief Initialize DMA2D output color register according to the specified parameters 00377 * in DMA2D_ColorStruct. 00378 * @param DMA2Dx DMA2D Instance 00379 * @param DMA2D_ColorStruct pointer to a LL_DMA2D_ColorTypeDef structure that contains 00380 * the color configuration information for the specified DMA2D peripheral. 00381 * @retval None 00382 */ 00383 void LL_DMA2D_ConfigOutputColor(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_ColorTypeDef *DMA2D_ColorStruct) 00384 { 00385 uint32_t outgreen; 00386 uint32_t outred; 00387 uint32_t outalpha; 00388 00389 /* Check the parameters */ 00390 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx)); 00391 assert_param(IS_LL_DMA2D_OCMODE(DMA2D_ColorStruct->ColorMode)); 00392 assert_param(IS_LL_DMA2D_GREEN(DMA2D_ColorStruct->OutputGreen)); 00393 assert_param(IS_LL_DMA2D_RED(DMA2D_ColorStruct->OutputRed)); 00394 assert_param(IS_LL_DMA2D_BLUE(DMA2D_ColorStruct->OutputBlue)); 00395 assert_param(IS_LL_DMA2D_ALPHA(DMA2D_ColorStruct->OutputAlpha)); 00396 00397 /* DMA2D OCOLR register configuration ------------------------------------------*/ 00398 if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888) 00399 { 00400 outgreen = DMA2D_ColorStruct->OutputGreen << 8U; 00401 outred = DMA2D_ColorStruct->OutputRed << 16U; 00402 outalpha = DMA2D_ColorStruct->OutputAlpha << 24U; 00403 } 00404 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) 00405 { 00406 outgreen = DMA2D_ColorStruct->OutputGreen << 8U; 00407 outred = DMA2D_ColorStruct->OutputRed << 16U; 00408 outalpha = 0x00000000U; 00409 } 00410 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565) 00411 { 00412 outgreen = DMA2D_ColorStruct->OutputGreen << 5U; 00413 outred = DMA2D_ColorStruct->OutputRed << 11U; 00414 outalpha = 0x00000000U; 00415 } 00416 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555) 00417 { 00418 outgreen = DMA2D_ColorStruct->OutputGreen << 5U; 00419 outred = DMA2D_ColorStruct->OutputRed << 10U; 00420 outalpha = DMA2D_ColorStruct->OutputAlpha << 15U; 00421 } 00422 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */ 00423 { 00424 outgreen = DMA2D_ColorStruct->OutputGreen << 4U; 00425 outred = DMA2D_ColorStruct->OutputRed << 8U; 00426 outalpha = DMA2D_ColorStruct->OutputAlpha << 12U; 00427 } 00428 LL_DMA2D_SetOutputColor(DMA2Dx, (outgreen | outred | DMA2D_ColorStruct->OutputBlue | outalpha)); 00429 } 00430 00431 /** 00432 * @brief Return DMA2D output Blue color. 00433 * @param DMA2Dx DMA2D Instance. 00434 * @param ColorMode This parameter can be one of the following values: 00435 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888 00436 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888 00437 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565 00438 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555 00439 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444 00440 * @retval Output Blue color value between Min_Data=0 and Max_Data=0xFF 00441 */ 00442 uint32_t LL_DMA2D_GetOutputBlueColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode) 00443 { 00444 uint32_t color; 00445 00446 /* Check the parameters */ 00447 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx)); 00448 assert_param(IS_LL_DMA2D_OCMODE(ColorMode)); 00449 00450 /* DMA2D OCOLR register reading ------------------------------------------*/ 00451 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888) 00452 { 00453 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU)); 00454 } 00455 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) 00456 { 00457 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU)); 00458 } 00459 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565) 00460 { 00461 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU)); 00462 } 00463 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555) 00464 { 00465 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU)); 00466 } 00467 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */ 00468 { 00469 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFU)); 00470 } 00471 00472 return color; 00473 } 00474 00475 /** 00476 * @brief Return DMA2D output Green color. 00477 * @param DMA2Dx DMA2D Instance. 00478 * @param ColorMode This parameter can be one of the following values: 00479 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888 00480 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888 00481 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565 00482 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555 00483 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444 00484 * @retval Output Green color value between Min_Data=0 and Max_Data=0xFF 00485 */ 00486 uint32_t LL_DMA2D_GetOutputGreenColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode) 00487 { 00488 uint32_t color; 00489 00490 /* Check the parameters */ 00491 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx)); 00492 assert_param(IS_LL_DMA2D_OCMODE(ColorMode)); 00493 00494 /* DMA2D OCOLR register reading ------------------------------------------*/ 00495 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888) 00496 { 00497 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U); 00498 } 00499 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) 00500 { 00501 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U); 00502 } 00503 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565) 00504 { 00505 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7E0U) >> 5U); 00506 } 00507 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555) 00508 { 00509 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x3E0U) >> 5U); 00510 } 00511 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */ 00512 { 00513 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF0U) >> 4U); 00514 } 00515 00516 return color; 00517 } 00518 00519 /** 00520 * @brief Return DMA2D output Red color. 00521 * @param DMA2Dx DMA2D Instance. 00522 * @param ColorMode This parameter can be one of the following values: 00523 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888 00524 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888 00525 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565 00526 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555 00527 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444 00528 * @retval Output Red color value between Min_Data=0 and Max_Data=0xFF 00529 */ 00530 uint32_t LL_DMA2D_GetOutputRedColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode) 00531 { 00532 uint32_t color; 00533 00534 /* Check the parameters */ 00535 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx)); 00536 assert_param(IS_LL_DMA2D_OCMODE(ColorMode)); 00537 00538 /* DMA2D OCOLR register reading ------------------------------------------*/ 00539 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888) 00540 { 00541 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U); 00542 } 00543 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) 00544 { 00545 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U); 00546 } 00547 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565) 00548 { 00549 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF800U) >> 11U); 00550 } 00551 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555) 00552 { 00553 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7C00U) >> 10U); 00554 } 00555 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */ 00556 { 00557 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF00U) >> 8U); 00558 } 00559 00560 return color; 00561 } 00562 00563 /** 00564 * @brief Return DMA2D output Alpha color. 00565 * @param DMA2Dx DMA2D Instance. 00566 * @param ColorMode This parameter can be one of the following values: 00567 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888 00568 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888 00569 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565 00570 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555 00571 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444 00572 * @retval Output Alpha color value between Min_Data=0 and Max_Data=0xFF 00573 */ 00574 uint32_t LL_DMA2D_GetOutputAlphaColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode) 00575 { 00576 uint32_t color; 00577 00578 /* Check the parameters */ 00579 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx)); 00580 assert_param(IS_LL_DMA2D_OCMODE(ColorMode)); 00581 00582 /* DMA2D OCOLR register reading ------------------------------------------*/ 00583 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888) 00584 { 00585 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF000000U) >> 24U); 00586 } 00587 else if ((ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) || (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)) 00588 { 00589 color = 0x0U; 00590 } 00591 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555) 00592 { 00593 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x8000U) >> 15U); 00594 } 00595 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */ 00596 { 00597 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF000U) >> 12U); 00598 } 00599 00600 return color; 00601 } 00602 00603 /** 00604 * @brief Configure DMA2D transfer size. 00605 * @param DMA2Dx DMA2D Instance 00606 * @param NbrOfLines Value between Min_Data=0 and Max_Data=0xFFFF 00607 * @param NbrOfPixelsPerLines Value between Min_Data=0 and Max_Data=0x3FFF 00608 * @retval None 00609 */ 00610 void LL_DMA2D_ConfigSize(DMA2D_TypeDef *DMA2Dx, uint32_t NbrOfLines, uint32_t NbrOfPixelsPerLines) 00611 { 00612 MODIFY_REG(DMA2Dx->NLR, (DMA2D_NLR_PL | DMA2D_NLR_NL), \ 00613 ((NbrOfPixelsPerLines << DMA2D_NLR_PL_Pos) | NbrOfLines)); 00614 } 00615 00616 /** 00617 * @} 00618 */ 00619 00620 /** 00621 * @} 00622 */ 00623 00624 /** 00625 * @} 00626 */ 00627 00628 #endif /* defined (DMA2D) */ 00629 00630 /** 00631 * @} 00632 */ 00633 00634 #endif /* USE_FULL_LL_DRIVER */