001

Committer:
ganlikun
Date:
Sun Jun 12 14:02:44 2022 +0000
Revision:
0:13413ea9a877
00

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ganlikun 0:13413ea9a877 1 /**
ganlikun 0:13413ea9a877 2 ******************************************************************************
ganlikun 0:13413ea9a877 3 * @file stm32f4xx_ll_dma2d.c
ganlikun 0:13413ea9a877 4 * @author MCD Application Team
ganlikun 0:13413ea9a877 5 * @version V1.7.1
ganlikun 0:13413ea9a877 6 * @date 14-April-2017
ganlikun 0:13413ea9a877 7 * @brief DMA2D LL module driver.
ganlikun 0:13413ea9a877 8 ******************************************************************************
ganlikun 0:13413ea9a877 9 * @attention
ganlikun 0:13413ea9a877 10 *
ganlikun 0:13413ea9a877 11 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
ganlikun 0:13413ea9a877 12 *
ganlikun 0:13413ea9a877 13 * Redistribution and use in source and binary forms, with or without modification,
ganlikun 0:13413ea9a877 14 * are permitted provided that the following conditions are met:
ganlikun 0:13413ea9a877 15 * 1. Redistributions of source code must retain the above copyright notice,
ganlikun 0:13413ea9a877 16 * this list of conditions and the following disclaimer.
ganlikun 0:13413ea9a877 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
ganlikun 0:13413ea9a877 18 * this list of conditions and the following disclaimer in the documentation
ganlikun 0:13413ea9a877 19 * and/or other materials provided with the distribution.
ganlikun 0:13413ea9a877 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
ganlikun 0:13413ea9a877 21 * may be used to endorse or promote products derived from this software
ganlikun 0:13413ea9a877 22 * without specific prior written permission.
ganlikun 0:13413ea9a877 23 *
ganlikun 0:13413ea9a877 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
ganlikun 0:13413ea9a877 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
ganlikun 0:13413ea9a877 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
ganlikun 0:13413ea9a877 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
ganlikun 0:13413ea9a877 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
ganlikun 0:13413ea9a877 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
ganlikun 0:13413ea9a877 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
ganlikun 0:13413ea9a877 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
ganlikun 0:13413ea9a877 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
ganlikun 0:13413ea9a877 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
ganlikun 0:13413ea9a877 34 *
ganlikun 0:13413ea9a877 35 ******************************************************************************
ganlikun 0:13413ea9a877 36 */
ganlikun 0:13413ea9a877 37 #if defined(USE_FULL_LL_DRIVER)
ganlikun 0:13413ea9a877 38
ganlikun 0:13413ea9a877 39 /* Includes ------------------------------------------------------------------*/
ganlikun 0:13413ea9a877 40 #include "stm32f4xx_ll_dma2d.h"
ganlikun 0:13413ea9a877 41 #include "stm32f4xx_ll_bus.h"
ganlikun 0:13413ea9a877 42 #ifdef USE_FULL_ASSERT
ganlikun 0:13413ea9a877 43 #include "stm32_assert.h"
ganlikun 0:13413ea9a877 44 #else
ganlikun 0:13413ea9a877 45 #define assert_param(expr) ((void)0U)
ganlikun 0:13413ea9a877 46 #endif
ganlikun 0:13413ea9a877 47
ganlikun 0:13413ea9a877 48 /** @addtogroup STM32F4xx_LL_Driver
ganlikun 0:13413ea9a877 49 * @{
ganlikun 0:13413ea9a877 50 */
ganlikun 0:13413ea9a877 51
ganlikun 0:13413ea9a877 52 #if defined (DMA2D)
ganlikun 0:13413ea9a877 53
ganlikun 0:13413ea9a877 54 /** @addtogroup DMA2D_LL
ganlikun 0:13413ea9a877 55 * @{
ganlikun 0:13413ea9a877 56 */
ganlikun 0:13413ea9a877 57
ganlikun 0:13413ea9a877 58 /* Private types -------------------------------------------------------------*/
ganlikun 0:13413ea9a877 59 /* Private variables ---------------------------------------------------------*/
ganlikun 0:13413ea9a877 60 /* Private constants ---------------------------------------------------------*/
ganlikun 0:13413ea9a877 61 /** @addtogroup DMA2D_LL_Private_Constants DMA2D Private Constants
ganlikun 0:13413ea9a877 62 * @{
ganlikun 0:13413ea9a877 63 */
ganlikun 0:13413ea9a877 64 #define LL_DMA2D_COLOR 0xFFU /*!< Maximum output color setting */
ganlikun 0:13413ea9a877 65 #define LL_DMA2D_NUMBEROFLINES DMA2D_NLR_NL /*!< Maximum number of lines */
ganlikun 0:13413ea9a877 66 #define LL_DMA2D_NUMBEROFPIXELS (DMA2D_NLR_PL >> DMA2D_NLR_PL_Pos) /*!< Maximum number of pixels per lines */
ganlikun 0:13413ea9a877 67 #define LL_DMA2D_OFFSET_MAX 0x3FFFU /*!< Maximum output line offset expressed in pixels */
ganlikun 0:13413ea9a877 68 #define LL_DMA2D_CLUTSIZE_MAX 0xFFU /*!< Maximum CLUT size */
ganlikun 0:13413ea9a877 69 /**
ganlikun 0:13413ea9a877 70 * @}
ganlikun 0:13413ea9a877 71 */
ganlikun 0:13413ea9a877 72 /* Private macros ------------------------------------------------------------*/
ganlikun 0:13413ea9a877 73 /** @addtogroup DMA2D_LL_Private_Macros
ganlikun 0:13413ea9a877 74 * @{
ganlikun 0:13413ea9a877 75 */
ganlikun 0:13413ea9a877 76 #define IS_LL_DMA2D_MODE(MODE) (((MODE) == LL_DMA2D_MODE_M2M) || \
ganlikun 0:13413ea9a877 77 ((MODE) == LL_DMA2D_MODE_M2M_PFC) || \
ganlikun 0:13413ea9a877 78 ((MODE) == LL_DMA2D_MODE_M2M_BLEND) || \
ganlikun 0:13413ea9a877 79 ((MODE) == LL_DMA2D_MODE_R2M))
ganlikun 0:13413ea9a877 80
ganlikun 0:13413ea9a877 81 #define IS_LL_DMA2D_OCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB8888) || \
ganlikun 0:13413ea9a877 82 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB888) || \
ganlikun 0:13413ea9a877 83 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_RGB565) || \
ganlikun 0:13413ea9a877 84 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB1555) || \
ganlikun 0:13413ea9a877 85 ((MODE_ARGB) == LL_DMA2D_OUTPUT_MODE_ARGB4444))
ganlikun 0:13413ea9a877 86
ganlikun 0:13413ea9a877 87 #define IS_LL_DMA2D_GREEN(GREEN) ((GREEN) <= LL_DMA2D_COLOR)
ganlikun 0:13413ea9a877 88 #define IS_LL_DMA2D_RED(RED) ((RED) <= LL_DMA2D_COLOR)
ganlikun 0:13413ea9a877 89 #define IS_LL_DMA2D_BLUE(BLUE) ((BLUE) <= LL_DMA2D_COLOR)
ganlikun 0:13413ea9a877 90 #define IS_LL_DMA2D_ALPHA(ALPHA) ((ALPHA) <= LL_DMA2D_COLOR)
ganlikun 0:13413ea9a877 91
ganlikun 0:13413ea9a877 92 #define IS_LL_DMA2D_OFFSET(OFFSET) ((OFFSET) <= LL_DMA2D_OFFSET_MAX)
ganlikun 0:13413ea9a877 93
ganlikun 0:13413ea9a877 94 #define IS_LL_DMA2D_LINE(LINES) ((LINES) <= LL_DMA2D_NUMBEROFLINES)
ganlikun 0:13413ea9a877 95 #define IS_LL_DMA2D_PIXEL(PIXELS) ((PIXELS) <= LL_DMA2D_NUMBEROFPIXELS)
ganlikun 0:13413ea9a877 96
ganlikun 0:13413ea9a877 97 #define IS_LL_DMA2D_LCMODE(MODE_ARGB) (((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB8888) || \
ganlikun 0:13413ea9a877 98 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB888) || \
ganlikun 0:13413ea9a877 99 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_RGB565) || \
ganlikun 0:13413ea9a877 100 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB1555) || \
ganlikun 0:13413ea9a877 101 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_ARGB4444) || \
ganlikun 0:13413ea9a877 102 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L8) || \
ganlikun 0:13413ea9a877 103 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL44) || \
ganlikun 0:13413ea9a877 104 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_AL88) || \
ganlikun 0:13413ea9a877 105 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_L4) || \
ganlikun 0:13413ea9a877 106 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A8) || \
ganlikun 0:13413ea9a877 107 ((MODE_ARGB) == LL_DMA2D_INPUT_MODE_A4))
ganlikun 0:13413ea9a877 108
ganlikun 0:13413ea9a877 109 #define IS_LL_DMA2D_CLUTCMODE(CLUTCMODE) (((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_ARGB8888) || \
ganlikun 0:13413ea9a877 110 ((CLUTCMODE) == LL_DMA2D_CLUT_COLOR_MODE_RGB888))
ganlikun 0:13413ea9a877 111
ganlikun 0:13413ea9a877 112 #define IS_LL_DMA2D_CLUTSIZE(SIZE) ((SIZE) <= LL_DMA2D_CLUTSIZE_MAX)
ganlikun 0:13413ea9a877 113
ganlikun 0:13413ea9a877 114 #define IS_LL_DMA2D_ALPHAMODE(MODE) (((MODE) == LL_DMA2D_ALPHA_MODE_NO_MODIF) || \
ganlikun 0:13413ea9a877 115 ((MODE) == LL_DMA2D_ALPHA_MODE_REPLACE) || \
ganlikun 0:13413ea9a877 116 ((MODE) == LL_DMA2D_ALPHA_MODE_COMBINE))
ganlikun 0:13413ea9a877 117 /**
ganlikun 0:13413ea9a877 118 * @}
ganlikun 0:13413ea9a877 119 */
ganlikun 0:13413ea9a877 120
ganlikun 0:13413ea9a877 121 /* Private function prototypes -----------------------------------------------*/
ganlikun 0:13413ea9a877 122
ganlikun 0:13413ea9a877 123 /* Exported functions --------------------------------------------------------*/
ganlikun 0:13413ea9a877 124 /** @addtogroup DMA2D_LL_Exported_Functions
ganlikun 0:13413ea9a877 125 * @{
ganlikun 0:13413ea9a877 126 */
ganlikun 0:13413ea9a877 127
ganlikun 0:13413ea9a877 128 /** @addtogroup DMA2D_LL_EF_Init_Functions Initialization and De-initialization Functions
ganlikun 0:13413ea9a877 129 * @{
ganlikun 0:13413ea9a877 130 */
ganlikun 0:13413ea9a877 131
ganlikun 0:13413ea9a877 132 /**
ganlikun 0:13413ea9a877 133 * @brief De-initialize DMA2D registers (registers restored to their default values).
ganlikun 0:13413ea9a877 134 * @param DMA2Dx DMA2D Instance
ganlikun 0:13413ea9a877 135 * @retval An ErrorStatus enumeration value:
ganlikun 0:13413ea9a877 136 * - SUCCESS: DMA2D registers are de-initialized
ganlikun 0:13413ea9a877 137 * - ERROR: DMA2D registers are not de-initialized
ganlikun 0:13413ea9a877 138 */
ganlikun 0:13413ea9a877 139 ErrorStatus LL_DMA2D_DeInit(DMA2D_TypeDef *DMA2Dx)
ganlikun 0:13413ea9a877 140 {
ganlikun 0:13413ea9a877 141 ErrorStatus status = SUCCESS;
ganlikun 0:13413ea9a877 142
ganlikun 0:13413ea9a877 143 /* Check the parameters */
ganlikun 0:13413ea9a877 144 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
ganlikun 0:13413ea9a877 145
ganlikun 0:13413ea9a877 146 if (DMA2Dx == DMA2D)
ganlikun 0:13413ea9a877 147 {
ganlikun 0:13413ea9a877 148 /* Force reset of DMA2D clock */
ganlikun 0:13413ea9a877 149 LL_AHB1_GRP1_ForceReset(LL_AHB1_GRP1_PERIPH_DMA2D);
ganlikun 0:13413ea9a877 150
ganlikun 0:13413ea9a877 151 /* Release reset of DMA2D clock */
ganlikun 0:13413ea9a877 152 LL_AHB1_GRP1_ReleaseReset(LL_AHB1_GRP1_PERIPH_DMA2D);
ganlikun 0:13413ea9a877 153 }
ganlikun 0:13413ea9a877 154 else
ganlikun 0:13413ea9a877 155 {
ganlikun 0:13413ea9a877 156 status = ERROR;
ganlikun 0:13413ea9a877 157 }
ganlikun 0:13413ea9a877 158
ganlikun 0:13413ea9a877 159 return (status);
ganlikun 0:13413ea9a877 160 }
ganlikun 0:13413ea9a877 161
ganlikun 0:13413ea9a877 162 /**
ganlikun 0:13413ea9a877 163 * @brief Initialize DMA2D registers according to the specified parameters in DMA2D_InitStruct.
ganlikun 0:13413ea9a877 164 * @note DMA2D transfers must be disabled to set initialization bits in configuration registers,
ganlikun 0:13413ea9a877 165 * otherwise ERROR result is returned.
ganlikun 0:13413ea9a877 166 * @param DMA2Dx DMA2D Instance
ganlikun 0:13413ea9a877 167 * @param DMA2D_InitStruct: pointer to a LL_DMA2D_InitTypeDef structure
ganlikun 0:13413ea9a877 168 * that contains the configuration information for the specified DMA2D peripheral.
ganlikun 0:13413ea9a877 169 * @retval An ErrorStatus enumeration value:
ganlikun 0:13413ea9a877 170 * - SUCCESS: DMA2D registers are initialized according to DMA2D_InitStruct content
ganlikun 0:13413ea9a877 171 * - ERROR: Issue occurred during DMA2D registers initialization
ganlikun 0:13413ea9a877 172 */
ganlikun 0:13413ea9a877 173 ErrorStatus LL_DMA2D_Init(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_InitTypeDef *DMA2D_InitStruct)
ganlikun 0:13413ea9a877 174 {
ganlikun 0:13413ea9a877 175 ErrorStatus status = ERROR;
ganlikun 0:13413ea9a877 176 LL_DMA2D_ColorTypeDef DMA2D_ColorStruct;
ganlikun 0:13413ea9a877 177 uint32_t tmp = 0U, tmp1 = 0U, tmp2 = 0U;
ganlikun 0:13413ea9a877 178
ganlikun 0:13413ea9a877 179 /* Check the parameters */
ganlikun 0:13413ea9a877 180 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
ganlikun 0:13413ea9a877 181 assert_param(IS_LL_DMA2D_MODE(DMA2D_InitStruct->Mode));
ganlikun 0:13413ea9a877 182 assert_param(IS_LL_DMA2D_OCMODE(DMA2D_InitStruct->ColorMode));
ganlikun 0:13413ea9a877 183 assert_param(IS_LL_DMA2D_LINE(DMA2D_InitStruct->NbrOfLines));
ganlikun 0:13413ea9a877 184 assert_param(IS_LL_DMA2D_PIXEL(DMA2D_InitStruct->NbrOfPixelsPerLines));
ganlikun 0:13413ea9a877 185 assert_param(IS_LL_DMA2D_GREEN(DMA2D_InitStruct->OutputGreen));
ganlikun 0:13413ea9a877 186 assert_param(IS_LL_DMA2D_RED(DMA2D_InitStruct->OutputRed));
ganlikun 0:13413ea9a877 187 assert_param(IS_LL_DMA2D_BLUE(DMA2D_InitStruct->OutputBlue));
ganlikun 0:13413ea9a877 188 assert_param(IS_LL_DMA2D_ALPHA(DMA2D_InitStruct->OutputAlpha));
ganlikun 0:13413ea9a877 189 assert_param(IS_LL_DMA2D_OFFSET(DMA2D_InitStruct->LineOffset));
ganlikun 0:13413ea9a877 190
ganlikun 0:13413ea9a877 191 /* DMA2D transfers must be disabled to configure bits in initialization registers */
ganlikun 0:13413ea9a877 192 tmp = LL_DMA2D_IsTransferOngoing(DMA2Dx);
ganlikun 0:13413ea9a877 193 tmp1 = LL_DMA2D_FGND_IsEnabledCLUTLoad(DMA2Dx);
ganlikun 0:13413ea9a877 194 tmp2 = LL_DMA2D_BGND_IsEnabledCLUTLoad(DMA2Dx);
ganlikun 0:13413ea9a877 195 if ((tmp == 0U) && (tmp1 == 0U) && (tmp2 == 0U))
ganlikun 0:13413ea9a877 196 {
ganlikun 0:13413ea9a877 197 /* DMA2D CR register configuration -------------------------------------------*/
ganlikun 0:13413ea9a877 198 LL_DMA2D_SetMode(DMA2Dx, DMA2D_InitStruct->Mode);
ganlikun 0:13413ea9a877 199
ganlikun 0:13413ea9a877 200 /* DMA2D OPFCCR register configuration ---------------------------------------*/
ganlikun 0:13413ea9a877 201 MODIFY_REG(DMA2Dx->OPFCCR, DMA2D_OPFCCR_CM, DMA2D_InitStruct->ColorMode);
ganlikun 0:13413ea9a877 202
ganlikun 0:13413ea9a877 203 /* DMA2D OOR register configuration ------------------------------------------*/
ganlikun 0:13413ea9a877 204 LL_DMA2D_SetLineOffset(DMA2Dx, DMA2D_InitStruct->LineOffset);
ganlikun 0:13413ea9a877 205
ganlikun 0:13413ea9a877 206 /* DMA2D NLR register configuration ------------------------------------------*/
ganlikun 0:13413ea9a877 207 LL_DMA2D_ConfigSize(DMA2Dx, DMA2D_InitStruct->NbrOfLines, DMA2D_InitStruct->NbrOfPixelsPerLines);
ganlikun 0:13413ea9a877 208
ganlikun 0:13413ea9a877 209 /* DMA2D OMAR register configuration ------------------------------------------*/
ganlikun 0:13413ea9a877 210 LL_DMA2D_SetOutputMemAddr(DMA2Dx, DMA2D_InitStruct->OutputMemoryAddress);
ganlikun 0:13413ea9a877 211
ganlikun 0:13413ea9a877 212 /* DMA2D OCOLR register configuration ------------------------------------------*/
ganlikun 0:13413ea9a877 213 DMA2D_ColorStruct.ColorMode = DMA2D_InitStruct->ColorMode;
ganlikun 0:13413ea9a877 214 DMA2D_ColorStruct.OutputBlue = DMA2D_InitStruct->OutputBlue;
ganlikun 0:13413ea9a877 215 DMA2D_ColorStruct.OutputGreen = DMA2D_InitStruct->OutputGreen;
ganlikun 0:13413ea9a877 216 DMA2D_ColorStruct.OutputRed = DMA2D_InitStruct->OutputRed;
ganlikun 0:13413ea9a877 217 DMA2D_ColorStruct.OutputAlpha = DMA2D_InitStruct->OutputAlpha;
ganlikun 0:13413ea9a877 218 LL_DMA2D_ConfigOutputColor(DMA2Dx, &DMA2D_ColorStruct);
ganlikun 0:13413ea9a877 219
ganlikun 0:13413ea9a877 220 status = SUCCESS;
ganlikun 0:13413ea9a877 221 }
ganlikun 0:13413ea9a877 222 /* If DMA2D transfers are not disabled, return ERROR */
ganlikun 0:13413ea9a877 223
ganlikun 0:13413ea9a877 224 return (status);
ganlikun 0:13413ea9a877 225 }
ganlikun 0:13413ea9a877 226
ganlikun 0:13413ea9a877 227 /**
ganlikun 0:13413ea9a877 228 * @brief Set each @ref LL_DMA2D_InitTypeDef field to default value.
ganlikun 0:13413ea9a877 229 * @param DMA2D_InitStruct: pointer to a @ref LL_DMA2D_InitTypeDef structure
ganlikun 0:13413ea9a877 230 * whose fields will be set to default values.
ganlikun 0:13413ea9a877 231 * @retval None
ganlikun 0:13413ea9a877 232 */
ganlikun 0:13413ea9a877 233 void LL_DMA2D_StructInit(LL_DMA2D_InitTypeDef *DMA2D_InitStruct)
ganlikun 0:13413ea9a877 234 {
ganlikun 0:13413ea9a877 235 /* Set DMA2D_InitStruct fields to default values */
ganlikun 0:13413ea9a877 236 DMA2D_InitStruct->Mode = LL_DMA2D_MODE_M2M;
ganlikun 0:13413ea9a877 237 DMA2D_InitStruct->ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB8888;
ganlikun 0:13413ea9a877 238 DMA2D_InitStruct->NbrOfLines = 0x0U;
ganlikun 0:13413ea9a877 239 DMA2D_InitStruct->NbrOfPixelsPerLines = 0x0U;
ganlikun 0:13413ea9a877 240 DMA2D_InitStruct->LineOffset = 0x0U;
ganlikun 0:13413ea9a877 241 DMA2D_InitStruct->OutputBlue = 0x0U;
ganlikun 0:13413ea9a877 242 DMA2D_InitStruct->OutputGreen = 0x0U;
ganlikun 0:13413ea9a877 243 DMA2D_InitStruct->OutputRed = 0x0U;
ganlikun 0:13413ea9a877 244 DMA2D_InitStruct->OutputAlpha = 0x0U;
ganlikun 0:13413ea9a877 245 DMA2D_InitStruct->OutputMemoryAddress = 0x0U;
ganlikun 0:13413ea9a877 246 }
ganlikun 0:13413ea9a877 247
ganlikun 0:13413ea9a877 248 /**
ganlikun 0:13413ea9a877 249 * @brief Configure the foreground or background according to the specified parameters
ganlikun 0:13413ea9a877 250 * in the LL_DMA2D_LayerCfgTypeDef structure.
ganlikun 0:13413ea9a877 251 * @param DMA2Dx DMA2D Instance
ganlikun 0:13413ea9a877 252 * @param DMA2D_LayerCfg: pointer to a LL_DMA2D_LayerCfgTypeDef structure that contains
ganlikun 0:13413ea9a877 253 * the configuration information for the specified layer.
ganlikun 0:13413ea9a877 254 * @param LayerIdx: DMA2D Layer index.
ganlikun 0:13413ea9a877 255 * This parameter can be one of the following values:
ganlikun 0:13413ea9a877 256 * 0(background) / 1(foreground)
ganlikun 0:13413ea9a877 257 * @retval None
ganlikun 0:13413ea9a877 258 */
ganlikun 0:13413ea9a877 259 void LL_DMA2D_ConfigLayer(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg, uint32_t LayerIdx)
ganlikun 0:13413ea9a877 260 {
ganlikun 0:13413ea9a877 261 /* Check the parameters */
ganlikun 0:13413ea9a877 262 assert_param(IS_LL_DMA2D_OFFSET(DMA2D_LayerCfg->LineOffset));
ganlikun 0:13413ea9a877 263 assert_param(IS_LL_DMA2D_LCMODE(DMA2D_LayerCfg->ColorMode));
ganlikun 0:13413ea9a877 264 assert_param(IS_LL_DMA2D_CLUTCMODE(DMA2D_LayerCfg->CLUTColorMode));
ganlikun 0:13413ea9a877 265 assert_param(IS_LL_DMA2D_CLUTSIZE(DMA2D_LayerCfg->CLUTSize));
ganlikun 0:13413ea9a877 266 assert_param(IS_LL_DMA2D_ALPHAMODE(DMA2D_LayerCfg->AlphaMode));
ganlikun 0:13413ea9a877 267 assert_param(IS_LL_DMA2D_GREEN(DMA2D_LayerCfg->Green));
ganlikun 0:13413ea9a877 268 assert_param(IS_LL_DMA2D_RED(DMA2D_LayerCfg->Red));
ganlikun 0:13413ea9a877 269 assert_param(IS_LL_DMA2D_BLUE(DMA2D_LayerCfg->Blue));
ganlikun 0:13413ea9a877 270 assert_param(IS_LL_DMA2D_ALPHA(DMA2D_LayerCfg->Alpha));
ganlikun 0:13413ea9a877 271
ganlikun 0:13413ea9a877 272 if (LayerIdx == 0U)
ganlikun 0:13413ea9a877 273 {
ganlikun 0:13413ea9a877 274 /* Configure the background memory address */
ganlikun 0:13413ea9a877 275 LL_DMA2D_BGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress);
ganlikun 0:13413ea9a877 276
ganlikun 0:13413ea9a877 277 /* Configure the background line offset */
ganlikun 0:13413ea9a877 278 LL_DMA2D_BGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset);
ganlikun 0:13413ea9a877 279
ganlikun 0:13413ea9a877 280 /* Configure the background Alpha value, Alpha mode, CLUT size, CLUT Color mode and Color mode */
ganlikun 0:13413ea9a877 281 MODIFY_REG(DMA2Dx->BGPFCCR, \
ganlikun 0:13413ea9a877 282 (DMA2D_BGPFCCR_ALPHA | DMA2D_BGPFCCR_AM | DMA2D_BGPFCCR_CS | DMA2D_BGPFCCR_CCM | DMA2D_BGPFCCR_CM), \
ganlikun 0:13413ea9a877 283 ((DMA2D_LayerCfg->Alpha << DMA2D_BGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->AlphaMode | \
ganlikun 0:13413ea9a877 284 (DMA2D_LayerCfg->CLUTSize << DMA2D_BGPFCCR_CS_Pos) | DMA2D_LayerCfg->CLUTColorMode | \
ganlikun 0:13413ea9a877 285 DMA2D_LayerCfg->ColorMode));
ganlikun 0:13413ea9a877 286
ganlikun 0:13413ea9a877 287 /* Configure the background color */
ganlikun 0:13413ea9a877 288 LL_DMA2D_BGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue);
ganlikun 0:13413ea9a877 289
ganlikun 0:13413ea9a877 290 /* Configure the background CLUT memory address */
ganlikun 0:13413ea9a877 291 LL_DMA2D_BGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress);
ganlikun 0:13413ea9a877 292 }
ganlikun 0:13413ea9a877 293 else
ganlikun 0:13413ea9a877 294 {
ganlikun 0:13413ea9a877 295 /* Configure the foreground memory address */
ganlikun 0:13413ea9a877 296 LL_DMA2D_FGND_SetMemAddr(DMA2Dx, DMA2D_LayerCfg->MemoryAddress);
ganlikun 0:13413ea9a877 297
ganlikun 0:13413ea9a877 298 /* Configure the foreground line offset */
ganlikun 0:13413ea9a877 299 LL_DMA2D_FGND_SetLineOffset(DMA2Dx, DMA2D_LayerCfg->LineOffset);
ganlikun 0:13413ea9a877 300
ganlikun 0:13413ea9a877 301 /* Configure the foreground Alpha value, Alpha mode, CLUT size, CLUT Color mode and Color mode */
ganlikun 0:13413ea9a877 302 MODIFY_REG(DMA2Dx->FGPFCCR, \
ganlikun 0:13413ea9a877 303 (DMA2D_FGPFCCR_ALPHA | DMA2D_FGPFCCR_AM | DMA2D_FGPFCCR_CS | DMA2D_FGPFCCR_CCM | DMA2D_FGPFCCR_CM), \
ganlikun 0:13413ea9a877 304 ((DMA2D_LayerCfg->Alpha << DMA2D_FGPFCCR_ALPHA_Pos) | DMA2D_LayerCfg->AlphaMode | \
ganlikun 0:13413ea9a877 305 (DMA2D_LayerCfg->CLUTSize << DMA2D_FGPFCCR_CS_Pos) | DMA2D_LayerCfg->CLUTColorMode | \
ganlikun 0:13413ea9a877 306 DMA2D_LayerCfg->ColorMode));
ganlikun 0:13413ea9a877 307
ganlikun 0:13413ea9a877 308 /* Configure the foreground color */
ganlikun 0:13413ea9a877 309 LL_DMA2D_FGND_SetColor(DMA2Dx, DMA2D_LayerCfg->Red, DMA2D_LayerCfg->Green, DMA2D_LayerCfg->Blue);
ganlikun 0:13413ea9a877 310
ganlikun 0:13413ea9a877 311 /* Configure the foreground CLUT memory address */
ganlikun 0:13413ea9a877 312 LL_DMA2D_FGND_SetCLUTMemAddr(DMA2Dx, DMA2D_LayerCfg->CLUTMemoryAddress);
ganlikun 0:13413ea9a877 313 }
ganlikun 0:13413ea9a877 314 }
ganlikun 0:13413ea9a877 315
ganlikun 0:13413ea9a877 316 /**
ganlikun 0:13413ea9a877 317 * @brief Set each @ref LL_DMA2D_LayerCfgTypeDef field to default value.
ganlikun 0:13413ea9a877 318 * @param DMA2D_LayerCfg: pointer to a @ref LL_DMA2D_LayerCfgTypeDef structure
ganlikun 0:13413ea9a877 319 * whose fields will be set to default values.
ganlikun 0:13413ea9a877 320 * @retval None
ganlikun 0:13413ea9a877 321 */
ganlikun 0:13413ea9a877 322 void LL_DMA2D_LayerCfgStructInit(LL_DMA2D_LayerCfgTypeDef *DMA2D_LayerCfg)
ganlikun 0:13413ea9a877 323 {
ganlikun 0:13413ea9a877 324 /* Set DMA2D_LayerCfg fields to default values */
ganlikun 0:13413ea9a877 325 DMA2D_LayerCfg->MemoryAddress = 0x0U;
ganlikun 0:13413ea9a877 326 DMA2D_LayerCfg->ColorMode = LL_DMA2D_INPUT_MODE_ARGB8888;
ganlikun 0:13413ea9a877 327 DMA2D_LayerCfg->LineOffset = 0x0U;
ganlikun 0:13413ea9a877 328 DMA2D_LayerCfg->CLUTColorMode = LL_DMA2D_CLUT_COLOR_MODE_ARGB8888;
ganlikun 0:13413ea9a877 329 DMA2D_LayerCfg->CLUTSize = 0x0U;
ganlikun 0:13413ea9a877 330 DMA2D_LayerCfg->AlphaMode = LL_DMA2D_ALPHA_MODE_NO_MODIF;
ganlikun 0:13413ea9a877 331 DMA2D_LayerCfg->Alpha = 0x0U;
ganlikun 0:13413ea9a877 332 DMA2D_LayerCfg->Blue = 0x0U;
ganlikun 0:13413ea9a877 333 DMA2D_LayerCfg->Green = 0x0U;
ganlikun 0:13413ea9a877 334 DMA2D_LayerCfg->Red = 0x0U;
ganlikun 0:13413ea9a877 335 DMA2D_LayerCfg->CLUTMemoryAddress = 0x0U;
ganlikun 0:13413ea9a877 336 }
ganlikun 0:13413ea9a877 337
ganlikun 0:13413ea9a877 338 /**
ganlikun 0:13413ea9a877 339 * @brief Initialize DMA2D output color register according to the specified parameters
ganlikun 0:13413ea9a877 340 * in DMA2D_ColorStruct.
ganlikun 0:13413ea9a877 341 * @param DMA2Dx DMA2D Instance
ganlikun 0:13413ea9a877 342 * @param DMA2D_ColorStruct: pointer to a LL_DMA2D_ColorTypeDef structure that contains
ganlikun 0:13413ea9a877 343 * the color configuration information for the specified DMA2D peripheral.
ganlikun 0:13413ea9a877 344 * @retval None
ganlikun 0:13413ea9a877 345 */
ganlikun 0:13413ea9a877 346 void LL_DMA2D_ConfigOutputColor(DMA2D_TypeDef *DMA2Dx, LL_DMA2D_ColorTypeDef *DMA2D_ColorStruct)
ganlikun 0:13413ea9a877 347 {
ganlikun 0:13413ea9a877 348 uint32_t outgreen = 0U;
ganlikun 0:13413ea9a877 349 uint32_t outred = 0U;
ganlikun 0:13413ea9a877 350 uint32_t outalpha = 0U;
ganlikun 0:13413ea9a877 351
ganlikun 0:13413ea9a877 352 /* Check the parameters */
ganlikun 0:13413ea9a877 353 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
ganlikun 0:13413ea9a877 354 assert_param(IS_LL_DMA2D_OCMODE(DMA2D_ColorStruct->ColorMode));
ganlikun 0:13413ea9a877 355 assert_param(IS_LL_DMA2D_GREEN(DMA2D_ColorStruct->OutputGreen));
ganlikun 0:13413ea9a877 356 assert_param(IS_LL_DMA2D_RED(DMA2D_ColorStruct->OutputRed));
ganlikun 0:13413ea9a877 357 assert_param(IS_LL_DMA2D_BLUE(DMA2D_ColorStruct->OutputBlue));
ganlikun 0:13413ea9a877 358 assert_param(IS_LL_DMA2D_ALPHA(DMA2D_ColorStruct->OutputAlpha));
ganlikun 0:13413ea9a877 359
ganlikun 0:13413ea9a877 360 /* DMA2D OCOLR register configuration ------------------------------------------*/
ganlikun 0:13413ea9a877 361 if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
ganlikun 0:13413ea9a877 362 {
ganlikun 0:13413ea9a877 363 outgreen = DMA2D_ColorStruct->OutputGreen << 8U;
ganlikun 0:13413ea9a877 364 outred = DMA2D_ColorStruct->OutputRed << 16U;
ganlikun 0:13413ea9a877 365 outalpha = DMA2D_ColorStruct->OutputAlpha << 24U;
ganlikun 0:13413ea9a877 366 }
ganlikun 0:13413ea9a877 367 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
ganlikun 0:13413ea9a877 368 {
ganlikun 0:13413ea9a877 369 outgreen = DMA2D_ColorStruct->OutputGreen << 8U;
ganlikun 0:13413ea9a877 370 outred = DMA2D_ColorStruct->OutputRed << 16U;
ganlikun 0:13413ea9a877 371 outalpha = 0x00000000U;
ganlikun 0:13413ea9a877 372 }
ganlikun 0:13413ea9a877 373 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
ganlikun 0:13413ea9a877 374 {
ganlikun 0:13413ea9a877 375 outgreen = DMA2D_ColorStruct->OutputGreen << 5U;
ganlikun 0:13413ea9a877 376 outred = DMA2D_ColorStruct->OutputRed << 11U;
ganlikun 0:13413ea9a877 377 outalpha = 0x00000000U;
ganlikun 0:13413ea9a877 378 }
ganlikun 0:13413ea9a877 379 else if (DMA2D_ColorStruct->ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
ganlikun 0:13413ea9a877 380 {
ganlikun 0:13413ea9a877 381 outgreen = DMA2D_ColorStruct->OutputGreen << 5U;
ganlikun 0:13413ea9a877 382 outred = DMA2D_ColorStruct->OutputRed << 10U;
ganlikun 0:13413ea9a877 383 outalpha = DMA2D_ColorStruct->OutputAlpha << 15U;
ganlikun 0:13413ea9a877 384 }
ganlikun 0:13413ea9a877 385 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
ganlikun 0:13413ea9a877 386 {
ganlikun 0:13413ea9a877 387 outgreen = DMA2D_ColorStruct->OutputGreen << 4U;
ganlikun 0:13413ea9a877 388 outred = DMA2D_ColorStruct->OutputRed << 8U;
ganlikun 0:13413ea9a877 389 outalpha = DMA2D_ColorStruct->OutputAlpha << 12U;
ganlikun 0:13413ea9a877 390 }
ganlikun 0:13413ea9a877 391 LL_DMA2D_SetOutputColor(DMA2Dx, (outgreen | outred | DMA2D_ColorStruct->OutputBlue | outalpha));
ganlikun 0:13413ea9a877 392 }
ganlikun 0:13413ea9a877 393
ganlikun 0:13413ea9a877 394 /**
ganlikun 0:13413ea9a877 395 * @brief Return DMA2D output Blue color.
ganlikun 0:13413ea9a877 396 * @param DMA2Dx DMA2D Instance.
ganlikun 0:13413ea9a877 397 * @param ColorMode This parameter can be one of the following values:
ganlikun 0:13413ea9a877 398 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
ganlikun 0:13413ea9a877 399 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
ganlikun 0:13413ea9a877 400 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
ganlikun 0:13413ea9a877 401 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
ganlikun 0:13413ea9a877 402 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
ganlikun 0:13413ea9a877 403 * @retval Output Blue color value between Min_Data=0 and Max_Data=0xFF
ganlikun 0:13413ea9a877 404 */
ganlikun 0:13413ea9a877 405 uint32_t LL_DMA2D_GetOutputBlueColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
ganlikun 0:13413ea9a877 406 {
ganlikun 0:13413ea9a877 407 uint32_t color = 0U;
ganlikun 0:13413ea9a877 408
ganlikun 0:13413ea9a877 409 /* Check the parameters */
ganlikun 0:13413ea9a877 410 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
ganlikun 0:13413ea9a877 411 assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
ganlikun 0:13413ea9a877 412
ganlikun 0:13413ea9a877 413 /* DMA2D OCOLR register reading ------------------------------------------*/
ganlikun 0:13413ea9a877 414 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
ganlikun 0:13413ea9a877 415 {
ganlikun 0:13413ea9a877 416 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU));
ganlikun 0:13413ea9a877 417 }
ganlikun 0:13413ea9a877 418 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
ganlikun 0:13413ea9a877 419 {
ganlikun 0:13413ea9a877 420 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFFU));
ganlikun 0:13413ea9a877 421 }
ganlikun 0:13413ea9a877 422 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
ganlikun 0:13413ea9a877 423 {
ganlikun 0:13413ea9a877 424 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU));
ganlikun 0:13413ea9a877 425 }
ganlikun 0:13413ea9a877 426 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
ganlikun 0:13413ea9a877 427 {
ganlikun 0:13413ea9a877 428 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x1FU));
ganlikun 0:13413ea9a877 429 }
ganlikun 0:13413ea9a877 430 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
ganlikun 0:13413ea9a877 431 {
ganlikun 0:13413ea9a877 432 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFU));
ganlikun 0:13413ea9a877 433 }
ganlikun 0:13413ea9a877 434
ganlikun 0:13413ea9a877 435 return color;
ganlikun 0:13413ea9a877 436 }
ganlikun 0:13413ea9a877 437
ganlikun 0:13413ea9a877 438 /**
ganlikun 0:13413ea9a877 439 * @brief Return DMA2D output Green color.
ganlikun 0:13413ea9a877 440 * @param DMA2Dx DMA2D Instance.
ganlikun 0:13413ea9a877 441 * @param ColorMode This parameter can be one of the following values:
ganlikun 0:13413ea9a877 442 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
ganlikun 0:13413ea9a877 443 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
ganlikun 0:13413ea9a877 444 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
ganlikun 0:13413ea9a877 445 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
ganlikun 0:13413ea9a877 446 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
ganlikun 0:13413ea9a877 447 * @retval Output Green color value between Min_Data=0 and Max_Data=0xFF
ganlikun 0:13413ea9a877 448 */
ganlikun 0:13413ea9a877 449 uint32_t LL_DMA2D_GetOutputGreenColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
ganlikun 0:13413ea9a877 450 {
ganlikun 0:13413ea9a877 451 uint32_t color = 0U;
ganlikun 0:13413ea9a877 452
ganlikun 0:13413ea9a877 453 /* Check the parameters */
ganlikun 0:13413ea9a877 454 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
ganlikun 0:13413ea9a877 455 assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
ganlikun 0:13413ea9a877 456
ganlikun 0:13413ea9a877 457 /* DMA2D OCOLR register reading ------------------------------------------*/
ganlikun 0:13413ea9a877 458 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
ganlikun 0:13413ea9a877 459 {
ganlikun 0:13413ea9a877 460 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U);
ganlikun 0:13413ea9a877 461 }
ganlikun 0:13413ea9a877 462 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
ganlikun 0:13413ea9a877 463 {
ganlikun 0:13413ea9a877 464 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF00U) >> 8U);
ganlikun 0:13413ea9a877 465 }
ganlikun 0:13413ea9a877 466 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
ganlikun 0:13413ea9a877 467 {
ganlikun 0:13413ea9a877 468 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7E0U) >> 5U);
ganlikun 0:13413ea9a877 469 }
ganlikun 0:13413ea9a877 470 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
ganlikun 0:13413ea9a877 471 {
ganlikun 0:13413ea9a877 472 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x3E0U) >> 5U);
ganlikun 0:13413ea9a877 473 }
ganlikun 0:13413ea9a877 474 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
ganlikun 0:13413ea9a877 475 {
ganlikun 0:13413ea9a877 476 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF0U) >> 4U);
ganlikun 0:13413ea9a877 477 }
ganlikun 0:13413ea9a877 478
ganlikun 0:13413ea9a877 479 return color;
ganlikun 0:13413ea9a877 480 }
ganlikun 0:13413ea9a877 481
ganlikun 0:13413ea9a877 482 /**
ganlikun 0:13413ea9a877 483 * @brief Return DMA2D output Red color.
ganlikun 0:13413ea9a877 484 * @param DMA2Dx DMA2D Instance.
ganlikun 0:13413ea9a877 485 * @param ColorMode This parameter can be one of the following values:
ganlikun 0:13413ea9a877 486 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
ganlikun 0:13413ea9a877 487 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
ganlikun 0:13413ea9a877 488 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
ganlikun 0:13413ea9a877 489 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
ganlikun 0:13413ea9a877 490 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
ganlikun 0:13413ea9a877 491 * @retval Output Red color value between Min_Data=0 and Max_Data=0xFF
ganlikun 0:13413ea9a877 492 */
ganlikun 0:13413ea9a877 493 uint32_t LL_DMA2D_GetOutputRedColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
ganlikun 0:13413ea9a877 494 {
ganlikun 0:13413ea9a877 495 uint32_t color = 0U;
ganlikun 0:13413ea9a877 496
ganlikun 0:13413ea9a877 497 /* Check the parameters */
ganlikun 0:13413ea9a877 498 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
ganlikun 0:13413ea9a877 499 assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
ganlikun 0:13413ea9a877 500
ganlikun 0:13413ea9a877 501 /* DMA2D OCOLR register reading ------------------------------------------*/
ganlikun 0:13413ea9a877 502 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
ganlikun 0:13413ea9a877 503 {
ganlikun 0:13413ea9a877 504 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U);
ganlikun 0:13413ea9a877 505 }
ganlikun 0:13413ea9a877 506 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888)
ganlikun 0:13413ea9a877 507 {
ganlikun 0:13413ea9a877 508 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF0000U) >> 16U);
ganlikun 0:13413ea9a877 509 }
ganlikun 0:13413ea9a877 510 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565)
ganlikun 0:13413ea9a877 511 {
ganlikun 0:13413ea9a877 512 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF800U) >> 11U);
ganlikun 0:13413ea9a877 513 }
ganlikun 0:13413ea9a877 514 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
ganlikun 0:13413ea9a877 515 {
ganlikun 0:13413ea9a877 516 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x7C00U) >> 10U);
ganlikun 0:13413ea9a877 517 }
ganlikun 0:13413ea9a877 518 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
ganlikun 0:13413ea9a877 519 {
ganlikun 0:13413ea9a877 520 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF00U) >> 8U);
ganlikun 0:13413ea9a877 521 }
ganlikun 0:13413ea9a877 522
ganlikun 0:13413ea9a877 523 return color;
ganlikun 0:13413ea9a877 524 }
ganlikun 0:13413ea9a877 525
ganlikun 0:13413ea9a877 526 /**
ganlikun 0:13413ea9a877 527 * @brief Return DMA2D output Alpha color.
ganlikun 0:13413ea9a877 528 * @param DMA2Dx DMA2D Instance.
ganlikun 0:13413ea9a877 529 * @param ColorMode This parameter can be one of the following values:
ganlikun 0:13413ea9a877 530 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB8888
ganlikun 0:13413ea9a877 531 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB888
ganlikun 0:13413ea9a877 532 * @arg @ref LL_DMA2D_OUTPUT_MODE_RGB565
ganlikun 0:13413ea9a877 533 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB1555
ganlikun 0:13413ea9a877 534 * @arg @ref LL_DMA2D_OUTPUT_MODE_ARGB4444
ganlikun 0:13413ea9a877 535 * @retval Output Alpha color value between Min_Data=0 and Max_Data=0xFF
ganlikun 0:13413ea9a877 536 */
ganlikun 0:13413ea9a877 537 uint32_t LL_DMA2D_GetOutputAlphaColor(DMA2D_TypeDef *DMA2Dx, uint32_t ColorMode)
ganlikun 0:13413ea9a877 538 {
ganlikun 0:13413ea9a877 539 uint32_t color = 0U;
ganlikun 0:13413ea9a877 540
ganlikun 0:13413ea9a877 541 /* Check the parameters */
ganlikun 0:13413ea9a877 542 assert_param(IS_DMA2D_ALL_INSTANCE(DMA2Dx));
ganlikun 0:13413ea9a877 543 assert_param(IS_LL_DMA2D_OCMODE(ColorMode));
ganlikun 0:13413ea9a877 544
ganlikun 0:13413ea9a877 545 /* DMA2D OCOLR register reading ------------------------------------------*/
ganlikun 0:13413ea9a877 546 if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB8888)
ganlikun 0:13413ea9a877 547 {
ganlikun 0:13413ea9a877 548 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xFF000000U) >> 24U);
ganlikun 0:13413ea9a877 549 }
ganlikun 0:13413ea9a877 550 else if ((ColorMode == LL_DMA2D_OUTPUT_MODE_RGB888) || (ColorMode == LL_DMA2D_OUTPUT_MODE_RGB565))
ganlikun 0:13413ea9a877 551 {
ganlikun 0:13413ea9a877 552 color = 0x0U;
ganlikun 0:13413ea9a877 553 }
ganlikun 0:13413ea9a877 554 else if (ColorMode == LL_DMA2D_OUTPUT_MODE_ARGB1555)
ganlikun 0:13413ea9a877 555 {
ganlikun 0:13413ea9a877 556 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0x8000U) >> 15U);
ganlikun 0:13413ea9a877 557 }
ganlikun 0:13413ea9a877 558 else /* ColorMode = LL_DMA2D_OUTPUT_MODE_ARGB4444 */
ganlikun 0:13413ea9a877 559 {
ganlikun 0:13413ea9a877 560 color = (uint32_t)(READ_BIT(DMA2Dx->OCOLR, 0xF000U) >> 12U);
ganlikun 0:13413ea9a877 561 }
ganlikun 0:13413ea9a877 562
ganlikun 0:13413ea9a877 563 return color;
ganlikun 0:13413ea9a877 564 }
ganlikun 0:13413ea9a877 565
ganlikun 0:13413ea9a877 566 /**
ganlikun 0:13413ea9a877 567 * @brief Configure DMA2D transfer size.
ganlikun 0:13413ea9a877 568 * @param DMA2Dx DMA2D Instance
ganlikun 0:13413ea9a877 569 * @param NbrOfLines Value between Min_Data=0 and Max_Data=0xFFFF
ganlikun 0:13413ea9a877 570 * @param NbrOfPixelsPerLines Value between Min_Data=0 and Max_Data=0x3FFF
ganlikun 0:13413ea9a877 571 * @retval None
ganlikun 0:13413ea9a877 572 */
ganlikun 0:13413ea9a877 573 void LL_DMA2D_ConfigSize(DMA2D_TypeDef *DMA2Dx, uint32_t NbrOfLines, uint32_t NbrOfPixelsPerLines)
ganlikun 0:13413ea9a877 574 {
ganlikun 0:13413ea9a877 575 MODIFY_REG(DMA2Dx->NLR, (DMA2D_NLR_PL | DMA2D_NLR_NL), \
ganlikun 0:13413ea9a877 576 ((NbrOfPixelsPerLines << DMA2D_NLR_PL_Pos) | NbrOfLines));
ganlikun 0:13413ea9a877 577 }
ganlikun 0:13413ea9a877 578
ganlikun 0:13413ea9a877 579 /**
ganlikun 0:13413ea9a877 580 * @}
ganlikun 0:13413ea9a877 581 */
ganlikun 0:13413ea9a877 582
ganlikun 0:13413ea9a877 583 /**
ganlikun 0:13413ea9a877 584 * @}
ganlikun 0:13413ea9a877 585 */
ganlikun 0:13413ea9a877 586
ganlikun 0:13413ea9a877 587 /**
ganlikun 0:13413ea9a877 588 * @}
ganlikun 0:13413ea9a877 589 */
ganlikun 0:13413ea9a877 590
ganlikun 0:13413ea9a877 591 #endif /* defined (DMA2D) */
ganlikun 0:13413ea9a877 592
ganlikun 0:13413ea9a877 593 /**
ganlikun 0:13413ea9a877 594 * @}
ganlikun 0:13413ea9a877 595 */
ganlikun 0:13413ea9a877 596
ganlikun 0:13413ea9a877 597 #endif /* USE_FULL_LL_DRIVER */
ganlikun 0:13413ea9a877 598
ganlikun 0:13413ea9a877 599 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
ganlikun 0:13413ea9a877 600