STM32H735xx HAL User Manual
stm32h7xx_ll_dma2d.c
Go to the documentation of this file.
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 */