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