mbed library sources. Supersedes mbed-src.

Dependents:   Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more

Committer:
AnnaBridge
Date:
Tue Mar 20 16:56:18 2018 +0000
Revision:
182:a56a73fd2a6f
Parent:
167:e84263d55307
mbed-dev library. Release version 160

Who changed what in which revision?

UserRevisionLine numberNew contents of line
<> 144:ef7eb2e8f9f7 1 /**
<> 144:ef7eb2e8f9f7 2 ******************************************************************************
<> 144:ef7eb2e8f9f7 3 * @file stm32f4xx_hal_ltdc.c
<> 144:ef7eb2e8f9f7 4 * @author MCD Application Team
<> 144:ef7eb2e8f9f7 5 * @brief LTDC HAL module driver.
<> 144:ef7eb2e8f9f7 6 * This file provides firmware functions to manage the following
<> 144:ef7eb2e8f9f7 7 * functionalities of the LTDC peripheral:
<> 144:ef7eb2e8f9f7 8 * + Initialization and de-initialization functions
<> 144:ef7eb2e8f9f7 9 * + IO operation functions
<> 144:ef7eb2e8f9f7 10 * + Peripheral Control functions
<> 144:ef7eb2e8f9f7 11 * + Peripheral State and Errors functions
<> 144:ef7eb2e8f9f7 12 *
<> 144:ef7eb2e8f9f7 13 @verbatim
<> 144:ef7eb2e8f9f7 14 ==============================================================================
<> 144:ef7eb2e8f9f7 15 ##### How to use this driver #####
<> 144:ef7eb2e8f9f7 16 ==============================================================================
<> 144:ef7eb2e8f9f7 17 [..]
<> 144:ef7eb2e8f9f7 18 (#) Program the required configuration through the following parameters:
<> 144:ef7eb2e8f9f7 19 the LTDC timing, the horizontal and vertical polarity,
<> 144:ef7eb2e8f9f7 20 the pixel clock polarity, Data Enable polarity and the LTDC background color value
<> 144:ef7eb2e8f9f7 21 using HAL_LTDC_Init() function
<> 144:ef7eb2e8f9f7 22
<> 144:ef7eb2e8f9f7 23 (#) Program the required configuration through the following parameters:
<> 144:ef7eb2e8f9f7 24 the pixel format, the blending factors, input alpha value, the window size
<> 144:ef7eb2e8f9f7 25 and the image size using HAL_LTDC_ConfigLayer() function for foreground
<> 144:ef7eb2e8f9f7 26 or/and background layer.
<> 144:ef7eb2e8f9f7 27
<> 144:ef7eb2e8f9f7 28 (#) Optionally, configure and enable the CLUT using HAL_LTDC_ConfigCLUT() and
<> 144:ef7eb2e8f9f7 29 HAL_LTDC_EnableCLUT functions.
<> 144:ef7eb2e8f9f7 30
<> 144:ef7eb2e8f9f7 31 (#) Optionally, enable the Dither using HAL_LTDC_EnableDither().
<> 144:ef7eb2e8f9f7 32
<> 144:ef7eb2e8f9f7 33 (#) Optionally, configure and enable the Color keying using HAL_LTDC_ConfigColorKeying()
<> 144:ef7eb2e8f9f7 34 and HAL_LTDC_EnableColorKeying functions.
<> 144:ef7eb2e8f9f7 35
<> 144:ef7eb2e8f9f7 36 (#) Optionally, configure LineInterrupt using HAL_LTDC_ProgramLineEvent()
<> 144:ef7eb2e8f9f7 37 function
<> 144:ef7eb2e8f9f7 38
<> 144:ef7eb2e8f9f7 39 (#) If needed, reconfigure and change the pixel format value, the alpha value
<> 144:ef7eb2e8f9f7 40 value, the window size, the window position and the layer start address
<> 144:ef7eb2e8f9f7 41 for foreground or/and background layer using respectively the following
<> 144:ef7eb2e8f9f7 42 functions: HAL_LTDC_SetPixelFormat(), HAL_LTDC_SetAlpha(), HAL_LTDC_SetWindowSize(),
<> 144:ef7eb2e8f9f7 43 HAL_LTDC_SetWindowPosition(), HAL_LTDC_SetAddress.
<> 144:ef7eb2e8f9f7 44
<> 144:ef7eb2e8f9f7 45 (#) Variant functions with “_NoReload” post fix allows to set the LTDC configuration/settings without immediate reload.
<> 144:ef7eb2e8f9f7 46 This is useful in case when the program requires to modify serval LTDC settings (on one or both layers)
AnnaBridge 167:e84263d55307 47 then applying(reload) these settings in one shot by calling the function “HAL_LTDC_Reload”
<> 144:ef7eb2e8f9f7 48
<> 144:ef7eb2e8f9f7 49 After calling the “_NoReload” functions to set different color/format/layer settings,
AnnaBridge 167:e84263d55307 50 the program can call the function “HAL_LTDC_Reload” To apply(Reload) these settings.
AnnaBridge 167:e84263d55307 51 Function “HAL_LTDC_Reload” can be called with the parameter “ReloadType”
<> 144:ef7eb2e8f9f7 52 set to LTDC_RELOAD_IMMEDIATE if an immediate reload is required.
AnnaBridge 167:e84263d55307 53 Function “HAL_LTDC_Reload” can be called with the parameter “ReloadType”
<> 144:ef7eb2e8f9f7 54 set to LTDC_RELOAD_VERTICAL_BLANKING if the reload should be done in the next vertical blanking period,
<> 144:ef7eb2e8f9f7 55 this option allows to avoid display flicker by applying the new settings during the vertical blanking period.
<> 144:ef7eb2e8f9f7 56
<> 144:ef7eb2e8f9f7 57
<> 144:ef7eb2e8f9f7 58 (#) To control LTDC state you can use the following function: HAL_LTDC_GetState()
<> 144:ef7eb2e8f9f7 59
<> 144:ef7eb2e8f9f7 60 *** LTDC HAL driver macros list ***
<> 144:ef7eb2e8f9f7 61 =============================================
<> 144:ef7eb2e8f9f7 62 [..]
<> 144:ef7eb2e8f9f7 63 Below the list of most used macros in LTDC HAL driver.
<> 144:ef7eb2e8f9f7 64
<> 144:ef7eb2e8f9f7 65 (+) __HAL_LTDC_ENABLE: Enable the LTDC.
<> 144:ef7eb2e8f9f7 66 (+) __HAL_LTDC_DISABLE: Disable the LTDC.
AnnaBridge 167:e84263d55307 67 (+) __HAL_LTDC_LAYER_ENABLE: Enable a LTDC Layer.
AnnaBridge 167:e84263d55307 68 (+) __HAL_LTDC_LAYER_DISABLE: Disable a LTDC Layer.
<> 144:ef7eb2e8f9f7 69 (+) __HAL_LTDC_CLEAR_FLAG: Clear the LTDC pending flags.
<> 144:ef7eb2e8f9f7 70 (+) __HAL_LTDC_ENABLE_IT: Enable the specified LTDC interrupts.
<> 144:ef7eb2e8f9f7 71 (+) __HAL_LTDC_DISABLE_IT: Disable the specified LTDC interrupts.
<> 144:ef7eb2e8f9f7 72
<> 144:ef7eb2e8f9f7 73 [..]
<> 144:ef7eb2e8f9f7 74 (@) You can refer to the LTDC HAL driver header file for more useful macros
<> 144:ef7eb2e8f9f7 75
<> 144:ef7eb2e8f9f7 76 @endverbatim
<> 144:ef7eb2e8f9f7 77 ******************************************************************************
<> 144:ef7eb2e8f9f7 78 * @attention
<> 144:ef7eb2e8f9f7 79 *
AnnaBridge 167:e84263d55307 80 * <h2><center>&copy; COPYRIGHT(c) 2017 STMicroelectronics</center></h2>
<> 144:ef7eb2e8f9f7 81 *
<> 144:ef7eb2e8f9f7 82 * Redistribution and use in source and binary forms, with or without modification,
<> 144:ef7eb2e8f9f7 83 * are permitted provided that the following conditions are met:
<> 144:ef7eb2e8f9f7 84 * 1. Redistributions of source code must retain the above copyright notice,
<> 144:ef7eb2e8f9f7 85 * this list of conditions and the following disclaimer.
<> 144:ef7eb2e8f9f7 86 * 2. Redistributions in binary form must reproduce the above copyright notice,
<> 144:ef7eb2e8f9f7 87 * this list of conditions and the following disclaimer in the documentation
<> 144:ef7eb2e8f9f7 88 * and/or other materials provided with the distribution.
<> 144:ef7eb2e8f9f7 89 * 3. Neither the name of STMicroelectronics nor the names of its contributors
<> 144:ef7eb2e8f9f7 90 * may be used to endorse or promote products derived from this software
<> 144:ef7eb2e8f9f7 91 * without specific prior written permission.
<> 144:ef7eb2e8f9f7 92 *
<> 144:ef7eb2e8f9f7 93 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
<> 144:ef7eb2e8f9f7 94 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
<> 144:ef7eb2e8f9f7 95 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
<> 144:ef7eb2e8f9f7 96 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
<> 144:ef7eb2e8f9f7 97 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
<> 144:ef7eb2e8f9f7 98 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
<> 144:ef7eb2e8f9f7 99 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
<> 144:ef7eb2e8f9f7 100 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
<> 144:ef7eb2e8f9f7 101 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
<> 144:ef7eb2e8f9f7 102 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
<> 144:ef7eb2e8f9f7 103 *
<> 144:ef7eb2e8f9f7 104 ******************************************************************************
<> 144:ef7eb2e8f9f7 105 */
<> 144:ef7eb2e8f9f7 106
<> 144:ef7eb2e8f9f7 107 /* Includes ------------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 108 #include "stm32f4xx_hal.h"
<> 144:ef7eb2e8f9f7 109
<> 144:ef7eb2e8f9f7 110 /** @addtogroup STM32F4xx_HAL_Driver
<> 144:ef7eb2e8f9f7 111 * @{
<> 144:ef7eb2e8f9f7 112 */
<> 144:ef7eb2e8f9f7 113 /** @defgroup LTDC LTDC
<> 144:ef7eb2e8f9f7 114 * @brief LTDC HAL module driver
<> 144:ef7eb2e8f9f7 115 * @{
<> 144:ef7eb2e8f9f7 116 */
<> 144:ef7eb2e8f9f7 117
<> 144:ef7eb2e8f9f7 118 #ifdef HAL_LTDC_MODULE_ENABLED
<> 144:ef7eb2e8f9f7 119
<> 144:ef7eb2e8f9f7 120 #if defined(STM32F429xx) || defined(STM32F439xx) || defined(STM32F469xx) || defined(STM32F479xx)
<> 144:ef7eb2e8f9f7 121
<> 144:ef7eb2e8f9f7 122 /* Private typedef -----------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 123 /* Private define ------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 124 /* Private macro -------------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 125 /* Private variables ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 126 /* Private function prototypes -----------------------------------------------*/
<> 144:ef7eb2e8f9f7 127 static void LTDC_SetConfig(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx);
<> 144:ef7eb2e8f9f7 128 /* Private functions ---------------------------------------------------------*/
<> 144:ef7eb2e8f9f7 129
<> 144:ef7eb2e8f9f7 130 /** @defgroup LTDC_Exported_Functions LTDC Exported Functions
<> 144:ef7eb2e8f9f7 131 * @{
<> 144:ef7eb2e8f9f7 132 */
<> 144:ef7eb2e8f9f7 133
<> 144:ef7eb2e8f9f7 134 /** @defgroup LTDC_Exported_Functions_Group1 Initialization and Configuration functions
<> 144:ef7eb2e8f9f7 135 * @brief Initialization and Configuration functions
<> 144:ef7eb2e8f9f7 136 *
<> 144:ef7eb2e8f9f7 137 @verbatim
<> 144:ef7eb2e8f9f7 138 ===============================================================================
<> 144:ef7eb2e8f9f7 139 ##### Initialization and Configuration functions #####
<> 144:ef7eb2e8f9f7 140 ===============================================================================
<> 144:ef7eb2e8f9f7 141 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 142 (+) Initialize and configure the LTDC
<> 144:ef7eb2e8f9f7 143 (+) De-initialize the LTDC
<> 144:ef7eb2e8f9f7 144
<> 144:ef7eb2e8f9f7 145 @endverbatim
<> 144:ef7eb2e8f9f7 146 * @{
<> 144:ef7eb2e8f9f7 147 */
<> 144:ef7eb2e8f9f7 148
<> 144:ef7eb2e8f9f7 149 /**
AnnaBridge 167:e84263d55307 150 * @brief Initialize the LTDC according to the specified parameters in the LTDC_InitTypeDef.
AnnaBridge 167:e84263d55307 151 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 152 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 153 * @retval HAL status
<> 144:ef7eb2e8f9f7 154 */
<> 144:ef7eb2e8f9f7 155 HAL_StatusTypeDef HAL_LTDC_Init(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 156 {
<> 144:ef7eb2e8f9f7 157 uint32_t tmp = 0U, tmp1 = 0U;
<> 144:ef7eb2e8f9f7 158
<> 144:ef7eb2e8f9f7 159 /* Check the LTDC peripheral state */
<> 144:ef7eb2e8f9f7 160 if(hltdc == NULL)
<> 144:ef7eb2e8f9f7 161 {
<> 144:ef7eb2e8f9f7 162 return HAL_ERROR;
<> 144:ef7eb2e8f9f7 163 }
<> 144:ef7eb2e8f9f7 164
<> 144:ef7eb2e8f9f7 165 /* Check function parameters */
<> 144:ef7eb2e8f9f7 166 assert_param(IS_LTDC_ALL_INSTANCE(hltdc->Instance));
<> 144:ef7eb2e8f9f7 167 assert_param(IS_LTDC_HSYNC(hltdc->Init.HorizontalSync));
<> 144:ef7eb2e8f9f7 168 assert_param(IS_LTDC_VSYNC(hltdc->Init.VerticalSync));
<> 144:ef7eb2e8f9f7 169 assert_param(IS_LTDC_AHBP(hltdc->Init.AccumulatedHBP));
<> 144:ef7eb2e8f9f7 170 assert_param(IS_LTDC_AVBP(hltdc->Init.AccumulatedVBP));
<> 144:ef7eb2e8f9f7 171 assert_param(IS_LTDC_AAH(hltdc->Init.AccumulatedActiveH));
<> 144:ef7eb2e8f9f7 172 assert_param(IS_LTDC_AAW(hltdc->Init.AccumulatedActiveW));
<> 144:ef7eb2e8f9f7 173 assert_param(IS_LTDC_TOTALH(hltdc->Init.TotalHeigh));
<> 144:ef7eb2e8f9f7 174 assert_param(IS_LTDC_TOTALW(hltdc->Init.TotalWidth));
<> 144:ef7eb2e8f9f7 175 assert_param(IS_LTDC_HSPOL(hltdc->Init.HSPolarity));
<> 144:ef7eb2e8f9f7 176 assert_param(IS_LTDC_VSPOL(hltdc->Init.VSPolarity));
<> 144:ef7eb2e8f9f7 177 assert_param(IS_LTDC_DEPOL(hltdc->Init.DEPolarity));
<> 144:ef7eb2e8f9f7 178 assert_param(IS_LTDC_PCPOL(hltdc->Init.PCPolarity));
<> 144:ef7eb2e8f9f7 179
<> 144:ef7eb2e8f9f7 180 if(hltdc->State == HAL_LTDC_STATE_RESET)
<> 144:ef7eb2e8f9f7 181 {
<> 144:ef7eb2e8f9f7 182 /* Allocate lock resource and initialize it */
<> 144:ef7eb2e8f9f7 183 hltdc->Lock = HAL_UNLOCKED;
<> 144:ef7eb2e8f9f7 184 /* Init the low level hardware */
<> 144:ef7eb2e8f9f7 185 HAL_LTDC_MspInit(hltdc);
<> 144:ef7eb2e8f9f7 186 }
<> 144:ef7eb2e8f9f7 187
<> 144:ef7eb2e8f9f7 188 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 189 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 190
AnnaBridge 167:e84263d55307 191 /* Configure the HS, VS, DE and PC polarity */
<> 144:ef7eb2e8f9f7 192 hltdc->Instance->GCR &= ~(LTDC_GCR_HSPOL | LTDC_GCR_VSPOL | LTDC_GCR_DEPOL | LTDC_GCR_PCPOL);
<> 144:ef7eb2e8f9f7 193 hltdc->Instance->GCR |= (uint32_t)(hltdc->Init.HSPolarity | hltdc->Init.VSPolarity | \
<> 144:ef7eb2e8f9f7 194 hltdc->Init.DEPolarity | hltdc->Init.PCPolarity);
<> 144:ef7eb2e8f9f7 195
AnnaBridge 167:e84263d55307 196 /* Set Synchronization size */
<> 144:ef7eb2e8f9f7 197 hltdc->Instance->SSCR &= ~(LTDC_SSCR_VSH | LTDC_SSCR_HSW);
<> 144:ef7eb2e8f9f7 198 tmp = (hltdc->Init.HorizontalSync << 16U);
<> 144:ef7eb2e8f9f7 199 hltdc->Instance->SSCR |= (tmp | hltdc->Init.VerticalSync);
<> 144:ef7eb2e8f9f7 200
AnnaBridge 167:e84263d55307 201 /* Set Accumulated Back porch */
<> 144:ef7eb2e8f9f7 202 hltdc->Instance->BPCR &= ~(LTDC_BPCR_AVBP | LTDC_BPCR_AHBP);
<> 144:ef7eb2e8f9f7 203 tmp = (hltdc->Init.AccumulatedHBP << 16U);
<> 144:ef7eb2e8f9f7 204 hltdc->Instance->BPCR |= (tmp | hltdc->Init.AccumulatedVBP);
<> 144:ef7eb2e8f9f7 205
AnnaBridge 167:e84263d55307 206 /* Set Accumulated Active Width */
<> 144:ef7eb2e8f9f7 207 hltdc->Instance->AWCR &= ~(LTDC_AWCR_AAH | LTDC_AWCR_AAW);
<> 144:ef7eb2e8f9f7 208 tmp = (hltdc->Init.AccumulatedActiveW << 16U);
<> 144:ef7eb2e8f9f7 209 hltdc->Instance->AWCR |= (tmp | hltdc->Init.AccumulatedActiveH);
<> 144:ef7eb2e8f9f7 210
AnnaBridge 167:e84263d55307 211 /* Set Total Width */
<> 144:ef7eb2e8f9f7 212 hltdc->Instance->TWCR &= ~(LTDC_TWCR_TOTALH | LTDC_TWCR_TOTALW);
<> 144:ef7eb2e8f9f7 213 tmp = (hltdc->Init.TotalWidth << 16U);
<> 144:ef7eb2e8f9f7 214 hltdc->Instance->TWCR |= (tmp | hltdc->Init.TotalHeigh);
<> 144:ef7eb2e8f9f7 215
AnnaBridge 167:e84263d55307 216 /* Set the background color value */
<> 144:ef7eb2e8f9f7 217 tmp = ((uint32_t)(hltdc->Init.Backcolor.Green) << 8U);
<> 144:ef7eb2e8f9f7 218 tmp1 = ((uint32_t)(hltdc->Init.Backcolor.Red) << 16U);
<> 144:ef7eb2e8f9f7 219 hltdc->Instance->BCCR &= ~(LTDC_BCCR_BCBLUE | LTDC_BCCR_BCGREEN | LTDC_BCCR_BCRED);
<> 144:ef7eb2e8f9f7 220 hltdc->Instance->BCCR |= (tmp1 | tmp | hltdc->Init.Backcolor.Blue);
<> 144:ef7eb2e8f9f7 221
AnnaBridge 167:e84263d55307 222 /* Enable the Transfer Error and FIFO underrun interrupts */
AnnaBridge 167:e84263d55307 223 __HAL_LTDC_ENABLE_IT(hltdc, LTDC_IT_TE | LTDC_IT_FU);
<> 144:ef7eb2e8f9f7 224
<> 144:ef7eb2e8f9f7 225 /* Enable LTDC by setting LTDCEN bit */
<> 144:ef7eb2e8f9f7 226 __HAL_LTDC_ENABLE(hltdc);
<> 144:ef7eb2e8f9f7 227
<> 144:ef7eb2e8f9f7 228 /* Initialize the error code */
<> 144:ef7eb2e8f9f7 229 hltdc->ErrorCode = HAL_LTDC_ERROR_NONE;
<> 144:ef7eb2e8f9f7 230
<> 144:ef7eb2e8f9f7 231 /* Initialize the LTDC state*/
<> 144:ef7eb2e8f9f7 232 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 233
<> 144:ef7eb2e8f9f7 234 return HAL_OK;
<> 144:ef7eb2e8f9f7 235 }
<> 144:ef7eb2e8f9f7 236
<> 144:ef7eb2e8f9f7 237 /**
AnnaBridge 167:e84263d55307 238 * @brief De-initialize the LTDC peripheral.
AnnaBridge 167:e84263d55307 239 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 240 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 241 * @retval None
<> 144:ef7eb2e8f9f7 242 */
<> 144:ef7eb2e8f9f7 243
<> 144:ef7eb2e8f9f7 244 HAL_StatusTypeDef HAL_LTDC_DeInit(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 245 {
<> 144:ef7eb2e8f9f7 246 /* DeInit the low level hardware */
<> 144:ef7eb2e8f9f7 247 HAL_LTDC_MspDeInit(hltdc);
<> 144:ef7eb2e8f9f7 248
<> 144:ef7eb2e8f9f7 249 /* Initialize the error code */
<> 144:ef7eb2e8f9f7 250 hltdc->ErrorCode = HAL_LTDC_ERROR_NONE;
<> 144:ef7eb2e8f9f7 251
<> 144:ef7eb2e8f9f7 252 /* Initialize the LTDC state*/
<> 144:ef7eb2e8f9f7 253 hltdc->State = HAL_LTDC_STATE_RESET;
<> 144:ef7eb2e8f9f7 254
<> 144:ef7eb2e8f9f7 255 /* Release Lock */
<> 144:ef7eb2e8f9f7 256 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 257
<> 144:ef7eb2e8f9f7 258 return HAL_OK;
<> 144:ef7eb2e8f9f7 259 }
<> 144:ef7eb2e8f9f7 260
<> 144:ef7eb2e8f9f7 261 /**
AnnaBridge 167:e84263d55307 262 * @brief Initialize the LTDC MSP.
AnnaBridge 167:e84263d55307 263 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 264 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 265 * @retval None
<> 144:ef7eb2e8f9f7 266 */
<> 144:ef7eb2e8f9f7 267 __weak void HAL_LTDC_MspInit(LTDC_HandleTypeDef* hltdc)
<> 144:ef7eb2e8f9f7 268 {
<> 144:ef7eb2e8f9f7 269 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 270 UNUSED(hltdc);
AnnaBridge 167:e84263d55307 271
AnnaBridge 167:e84263d55307 272 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 273 the HAL_LTDC_MspInit could be implemented in the user file
<> 144:ef7eb2e8f9f7 274 */
<> 144:ef7eb2e8f9f7 275 }
<> 144:ef7eb2e8f9f7 276
<> 144:ef7eb2e8f9f7 277 /**
AnnaBridge 167:e84263d55307 278 * @brief De-initialize the LTDC MSP.
AnnaBridge 167:e84263d55307 279 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 280 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 281 * @retval None
<> 144:ef7eb2e8f9f7 282 */
<> 144:ef7eb2e8f9f7 283 __weak void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef* hltdc)
<> 144:ef7eb2e8f9f7 284 {
<> 144:ef7eb2e8f9f7 285 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 286 UNUSED(hltdc);
AnnaBridge 167:e84263d55307 287
AnnaBridge 167:e84263d55307 288 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 289 the HAL_LTDC_MspDeInit could be implemented in the user file
<> 144:ef7eb2e8f9f7 290 */
<> 144:ef7eb2e8f9f7 291 }
<> 144:ef7eb2e8f9f7 292
<> 144:ef7eb2e8f9f7 293 /**
<> 144:ef7eb2e8f9f7 294 * @}
<> 144:ef7eb2e8f9f7 295 */
<> 144:ef7eb2e8f9f7 296
<> 144:ef7eb2e8f9f7 297 /** @defgroup LTDC_Exported_Functions_Group2 IO operation functions
<> 144:ef7eb2e8f9f7 298 * @brief IO operation functions
<> 144:ef7eb2e8f9f7 299 *
<> 144:ef7eb2e8f9f7 300 @verbatim
<> 144:ef7eb2e8f9f7 301 ===============================================================================
<> 144:ef7eb2e8f9f7 302 ##### IO operation functions #####
<> 144:ef7eb2e8f9f7 303 ===============================================================================
<> 144:ef7eb2e8f9f7 304 [..] This section provides function allowing to:
<> 144:ef7eb2e8f9f7 305 (+) Handle LTDC interrupt request
<> 144:ef7eb2e8f9f7 306
<> 144:ef7eb2e8f9f7 307 @endverbatim
<> 144:ef7eb2e8f9f7 308 * @{
<> 144:ef7eb2e8f9f7 309 */
<> 144:ef7eb2e8f9f7 310 /**
AnnaBridge 167:e84263d55307 311 * @brief Handle LTDC interrupt request.
AnnaBridge 167:e84263d55307 312 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 313 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 314 * @retval HAL status
<> 144:ef7eb2e8f9f7 315 */
<> 144:ef7eb2e8f9f7 316 void HAL_LTDC_IRQHandler(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 317 {
AnnaBridge 167:e84263d55307 318 uint32_t isrflags = READ_REG(hltdc->Instance->ISR);
AnnaBridge 167:e84263d55307 319 uint32_t itsources = READ_REG(hltdc->Instance->IER);
AnnaBridge 167:e84263d55307 320
<> 144:ef7eb2e8f9f7 321 /* Transfer Error Interrupt management ***************************************/
AnnaBridge 167:e84263d55307 322 if(((isrflags & LTDC_ISR_TERRIF) != RESET) && ((itsources & LTDC_IER_TERRIE) != RESET))
<> 144:ef7eb2e8f9f7 323 {
AnnaBridge 167:e84263d55307 324 /* Disable the transfer Error interrupt */
AnnaBridge 167:e84263d55307 325 __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_TE);
<> 144:ef7eb2e8f9f7 326
AnnaBridge 167:e84263d55307 327 /* Clear the transfer error flag */
AnnaBridge 167:e84263d55307 328 __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_TE);
<> 144:ef7eb2e8f9f7 329
AnnaBridge 167:e84263d55307 330 /* Update error code */
AnnaBridge 167:e84263d55307 331 hltdc->ErrorCode |= HAL_LTDC_ERROR_TE;
<> 144:ef7eb2e8f9f7 332
AnnaBridge 167:e84263d55307 333 /* Change LTDC state */
AnnaBridge 167:e84263d55307 334 hltdc->State = HAL_LTDC_STATE_ERROR;
<> 144:ef7eb2e8f9f7 335
AnnaBridge 167:e84263d55307 336 /* Process unlocked */
AnnaBridge 167:e84263d55307 337 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 338
AnnaBridge 167:e84263d55307 339 /* Transfer error Callback */
AnnaBridge 167:e84263d55307 340 HAL_LTDC_ErrorCallback(hltdc);
<> 144:ef7eb2e8f9f7 341 }
AnnaBridge 167:e84263d55307 342
<> 144:ef7eb2e8f9f7 343 /* FIFO underrun Interrupt management ***************************************/
AnnaBridge 167:e84263d55307 344 if(((isrflags & LTDC_ISR_FUIF) != RESET) && ((itsources & LTDC_IER_FUIE) != RESET))
<> 144:ef7eb2e8f9f7 345 {
AnnaBridge 167:e84263d55307 346 /* Disable the FIFO underrun interrupt */
AnnaBridge 167:e84263d55307 347 __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_FU);
<> 144:ef7eb2e8f9f7 348
AnnaBridge 167:e84263d55307 349 /* Clear the FIFO underrun flag */
AnnaBridge 167:e84263d55307 350 __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_FU);
<> 144:ef7eb2e8f9f7 351
AnnaBridge 167:e84263d55307 352 /* Update error code */
AnnaBridge 167:e84263d55307 353 hltdc->ErrorCode |= HAL_LTDC_ERROR_FU;
<> 144:ef7eb2e8f9f7 354
AnnaBridge 167:e84263d55307 355 /* Change LTDC state */
AnnaBridge 167:e84263d55307 356 hltdc->State = HAL_LTDC_STATE_ERROR;
<> 144:ef7eb2e8f9f7 357
AnnaBridge 167:e84263d55307 358 /* Process unlocked */
AnnaBridge 167:e84263d55307 359 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 360
AnnaBridge 167:e84263d55307 361 /* Transfer error Callback */
AnnaBridge 167:e84263d55307 362 HAL_LTDC_ErrorCallback(hltdc);
<> 144:ef7eb2e8f9f7 363 }
AnnaBridge 167:e84263d55307 364
<> 144:ef7eb2e8f9f7 365 /* Line Interrupt management ************************************************/
AnnaBridge 167:e84263d55307 366 if(((isrflags & LTDC_ISR_LIF) != RESET) && ((itsources & LTDC_IER_LIE) != RESET))
<> 144:ef7eb2e8f9f7 367 {
AnnaBridge 167:e84263d55307 368 /* Disable the Line interrupt */
AnnaBridge 167:e84263d55307 369 __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_LI);
AnnaBridge 167:e84263d55307 370
AnnaBridge 167:e84263d55307 371 /* Clear the Line interrupt flag */
AnnaBridge 167:e84263d55307 372 __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_LI);
<> 144:ef7eb2e8f9f7 373
AnnaBridge 167:e84263d55307 374 /* Change LTDC state */
AnnaBridge 167:e84263d55307 375 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 376
AnnaBridge 167:e84263d55307 377 /* Process unlocked */
AnnaBridge 167:e84263d55307 378 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 379
AnnaBridge 167:e84263d55307 380 /* Line interrupt Callback */
AnnaBridge 167:e84263d55307 381 HAL_LTDC_LineEventCallback(hltdc);
<> 144:ef7eb2e8f9f7 382 }
AnnaBridge 167:e84263d55307 383
<> 144:ef7eb2e8f9f7 384 /* Register reload Interrupt management ***************************************/
AnnaBridge 167:e84263d55307 385 if(((isrflags & LTDC_ISR_RRIF) != RESET) && ((itsources & LTDC_IER_RRIE) != RESET))
<> 144:ef7eb2e8f9f7 386 {
AnnaBridge 167:e84263d55307 387 /* Disable the register reload interrupt */
AnnaBridge 167:e84263d55307 388 __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_RR);
<> 144:ef7eb2e8f9f7 389
AnnaBridge 167:e84263d55307 390 /* Clear the register reload flag */
AnnaBridge 167:e84263d55307 391 __HAL_LTDC_CLEAR_FLAG(hltdc, LTDC_FLAG_RR);
<> 144:ef7eb2e8f9f7 392
AnnaBridge 167:e84263d55307 393 /* Change LTDC state */
AnnaBridge 167:e84263d55307 394 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 395
AnnaBridge 167:e84263d55307 396 /* Process unlocked */
AnnaBridge 167:e84263d55307 397 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 398
AnnaBridge 167:e84263d55307 399 /* Register reload interrupt Callback */
AnnaBridge 167:e84263d55307 400 HAL_LTDC_ReloadEventCallback(hltdc);
AnnaBridge 167:e84263d55307 401 }
<> 144:ef7eb2e8f9f7 402 }
<> 144:ef7eb2e8f9f7 403
<> 144:ef7eb2e8f9f7 404 /**
<> 144:ef7eb2e8f9f7 405 * @brief Error LTDC callback.
AnnaBridge 167:e84263d55307 406 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 407 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 408 * @retval None
<> 144:ef7eb2e8f9f7 409 */
<> 144:ef7eb2e8f9f7 410 __weak void HAL_LTDC_ErrorCallback(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 411 {
<> 144:ef7eb2e8f9f7 412 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 413 UNUSED(hltdc);
AnnaBridge 167:e84263d55307 414
AnnaBridge 167:e84263d55307 415 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 416 the HAL_LTDC_ErrorCallback could be implemented in the user file
<> 144:ef7eb2e8f9f7 417 */
<> 144:ef7eb2e8f9f7 418 }
<> 144:ef7eb2e8f9f7 419
<> 144:ef7eb2e8f9f7 420 /**
<> 144:ef7eb2e8f9f7 421 * @brief Line Event callback.
AnnaBridge 167:e84263d55307 422 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 423 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 424 * @retval None
<> 144:ef7eb2e8f9f7 425 */
<> 144:ef7eb2e8f9f7 426 __weak void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 427 {
<> 144:ef7eb2e8f9f7 428 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 429 UNUSED(hltdc);
<> 144:ef7eb2e8f9f7 430
AnnaBridge 167:e84263d55307 431 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 432 the HAL_LTDC_LineEventCallback could be implemented in the user file
<> 144:ef7eb2e8f9f7 433 */
<> 144:ef7eb2e8f9f7 434 }
<> 144:ef7eb2e8f9f7 435
<> 144:ef7eb2e8f9f7 436 /**
<> 144:ef7eb2e8f9f7 437 * @brief Reload Event callback.
AnnaBridge 167:e84263d55307 438 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 439 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 440 * @retval None
<> 144:ef7eb2e8f9f7 441 */
<> 144:ef7eb2e8f9f7 442 __weak void HAL_LTDC_ReloadEventCallback(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 443 {
<> 144:ef7eb2e8f9f7 444 /* Prevent unused argument(s) compilation warning */
<> 144:ef7eb2e8f9f7 445 UNUSED(hltdc);
<> 144:ef7eb2e8f9f7 446
AnnaBridge 167:e84263d55307 447 /* NOTE : This function should not be modified, when the callback is needed,
<> 144:ef7eb2e8f9f7 448 the HAL_LTDC_ReloadEvenCallback could be implemented in the user file
<> 144:ef7eb2e8f9f7 449 */
<> 144:ef7eb2e8f9f7 450 }
<> 144:ef7eb2e8f9f7 451
<> 144:ef7eb2e8f9f7 452 /**
<> 144:ef7eb2e8f9f7 453 * @}
<> 144:ef7eb2e8f9f7 454 */
<> 144:ef7eb2e8f9f7 455
<> 144:ef7eb2e8f9f7 456 /** @defgroup LTDC_Exported_Functions_Group3 Peripheral Control functions
<> 144:ef7eb2e8f9f7 457 * @brief Peripheral Control functions
<> 144:ef7eb2e8f9f7 458 *
<> 144:ef7eb2e8f9f7 459 @verbatim
<> 144:ef7eb2e8f9f7 460 ===============================================================================
<> 144:ef7eb2e8f9f7 461 ##### Peripheral Control functions #####
<> 144:ef7eb2e8f9f7 462 ===============================================================================
<> 144:ef7eb2e8f9f7 463 [..] This section provides functions allowing to:
<> 144:ef7eb2e8f9f7 464 (+) Configure the LTDC foreground or/and background parameters.
<> 144:ef7eb2e8f9f7 465 (+) Set the active layer.
<> 144:ef7eb2e8f9f7 466 (+) Configure the color keying.
<> 144:ef7eb2e8f9f7 467 (+) Configure the C-LUT.
<> 144:ef7eb2e8f9f7 468 (+) Enable / Disable the color keying.
<> 144:ef7eb2e8f9f7 469 (+) Enable / Disable the C-LUT.
<> 144:ef7eb2e8f9f7 470 (+) Update the layer position.
<> 144:ef7eb2e8f9f7 471 (+) Update the layer size.
<> 144:ef7eb2e8f9f7 472 (+) Update pixel format on the fly.
<> 144:ef7eb2e8f9f7 473 (+) Update transparency on the fly.
<> 144:ef7eb2e8f9f7 474 (+) Update address on the fly.
<> 144:ef7eb2e8f9f7 475
<> 144:ef7eb2e8f9f7 476 @endverbatim
<> 144:ef7eb2e8f9f7 477 * @{
<> 144:ef7eb2e8f9f7 478 */
<> 144:ef7eb2e8f9f7 479
<> 144:ef7eb2e8f9f7 480 /**
<> 144:ef7eb2e8f9f7 481 * @brief Configure the LTDC Layer according to the specified
<> 144:ef7eb2e8f9f7 482 * parameters in the LTDC_InitTypeDef and create the associated handle.
AnnaBridge 167:e84263d55307 483 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 484 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 485 * @param pLayerCfg pointer to a LTDC_LayerCfgTypeDef structure that contains
<> 144:ef7eb2e8f9f7 486 * the configuration information for the Layer.
AnnaBridge 167:e84263d55307 487 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 488 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 489 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 490 * @retval HAL status
<> 144:ef7eb2e8f9f7 491 */
<> 144:ef7eb2e8f9f7 492 HAL_StatusTypeDef HAL_LTDC_ConfigLayer(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 493 {
AnnaBridge 167:e84263d55307 494 /* Check the parameters */
AnnaBridge 167:e84263d55307 495 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 496 assert_param(IS_LTDC_HCONFIGST(pLayerCfg->WindowX0));
AnnaBridge 167:e84263d55307 497 assert_param(IS_LTDC_HCONFIGSP(pLayerCfg->WindowX1));
AnnaBridge 167:e84263d55307 498 assert_param(IS_LTDC_VCONFIGST(pLayerCfg->WindowY0));
AnnaBridge 167:e84263d55307 499 assert_param(IS_LTDC_VCONFIGSP(pLayerCfg->WindowY1));
AnnaBridge 167:e84263d55307 500 assert_param(IS_LTDC_PIXEL_FORMAT(pLayerCfg->PixelFormat));
AnnaBridge 167:e84263d55307 501 assert_param(IS_LTDC_ALPHA(pLayerCfg->Alpha));
AnnaBridge 167:e84263d55307 502 assert_param(IS_LTDC_ALPHA(pLayerCfg->Alpha0));
AnnaBridge 167:e84263d55307 503 assert_param(IS_LTDC_BLENDING_FACTOR1(pLayerCfg->BlendingFactor1));
AnnaBridge 167:e84263d55307 504 assert_param(IS_LTDC_BLENDING_FACTOR2(pLayerCfg->BlendingFactor2));
AnnaBridge 167:e84263d55307 505 assert_param(IS_LTDC_CFBLL(pLayerCfg->ImageWidth));
AnnaBridge 167:e84263d55307 506 assert_param(IS_LTDC_CFBLNBR(pLayerCfg->ImageHeight));
AnnaBridge 167:e84263d55307 507
<> 144:ef7eb2e8f9f7 508 /* Process locked */
<> 144:ef7eb2e8f9f7 509 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 510
<> 144:ef7eb2e8f9f7 511 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 512 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 513
<> 144:ef7eb2e8f9f7 514 /* Copy new layer configuration into handle structure */
<> 144:ef7eb2e8f9f7 515 hltdc->LayerCfg[LayerIdx] = *pLayerCfg;
<> 144:ef7eb2e8f9f7 516
<> 144:ef7eb2e8f9f7 517 /* Configure the LTDC Layer */
<> 144:ef7eb2e8f9f7 518 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 519
AnnaBridge 167:e84263d55307 520 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 521 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 522
<> 144:ef7eb2e8f9f7 523 /* Initialize the LTDC state*/
<> 144:ef7eb2e8f9f7 524 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 525
<> 144:ef7eb2e8f9f7 526 /* Process unlocked */
<> 144:ef7eb2e8f9f7 527 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 528
<> 144:ef7eb2e8f9f7 529 return HAL_OK;
<> 144:ef7eb2e8f9f7 530 }
<> 144:ef7eb2e8f9f7 531
<> 144:ef7eb2e8f9f7 532 /**
<> 144:ef7eb2e8f9f7 533 * @brief Configure the color keying.
AnnaBridge 167:e84263d55307 534 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 535 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 536 * @param RGBValue the color key value
AnnaBridge 167:e84263d55307 537 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 538 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 539 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 540 * @retval HAL status
<> 144:ef7eb2e8f9f7 541 */
<> 144:ef7eb2e8f9f7 542 HAL_StatusTypeDef HAL_LTDC_ConfigColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t RGBValue, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 543 {
AnnaBridge 167:e84263d55307 544 /* Check the parameters */
AnnaBridge 167:e84263d55307 545 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 546
<> 144:ef7eb2e8f9f7 547 /* Process locked */
<> 144:ef7eb2e8f9f7 548 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 549
<> 144:ef7eb2e8f9f7 550 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 551 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 552
AnnaBridge 167:e84263d55307 553 /* Configure the default color values */
<> 144:ef7eb2e8f9f7 554 LTDC_LAYER(hltdc, LayerIdx)->CKCR &= ~(LTDC_LxCKCR_CKBLUE | LTDC_LxCKCR_CKGREEN | LTDC_LxCKCR_CKRED);
<> 144:ef7eb2e8f9f7 555 LTDC_LAYER(hltdc, LayerIdx)->CKCR = RGBValue;
<> 144:ef7eb2e8f9f7 556
AnnaBridge 167:e84263d55307 557 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 558 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 559
<> 144:ef7eb2e8f9f7 560 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 561 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 562
<> 144:ef7eb2e8f9f7 563 /* Process unlocked */
<> 144:ef7eb2e8f9f7 564 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 565
<> 144:ef7eb2e8f9f7 566 return HAL_OK;
<> 144:ef7eb2e8f9f7 567 }
<> 144:ef7eb2e8f9f7 568
<> 144:ef7eb2e8f9f7 569 /**
<> 144:ef7eb2e8f9f7 570 * @brief Load the color lookup table.
AnnaBridge 167:e84263d55307 571 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 572 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 573 * @param pCLUT pointer to the color lookup table address.
AnnaBridge 167:e84263d55307 574 * @param CLUTSize the color lookup table size.
AnnaBridge 167:e84263d55307 575 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 576 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 577 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 578 * @retval HAL status
<> 144:ef7eb2e8f9f7 579 */
<> 144:ef7eb2e8f9f7 580 HAL_StatusTypeDef HAL_LTDC_ConfigCLUT(LTDC_HandleTypeDef *hltdc, uint32_t *pCLUT, uint32_t CLUTSize, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 581 {
<> 144:ef7eb2e8f9f7 582 uint32_t tmp = 0U;
<> 144:ef7eb2e8f9f7 583 uint32_t counter = 0U;
<> 144:ef7eb2e8f9f7 584 uint32_t pcounter = 0U;
<> 144:ef7eb2e8f9f7 585
AnnaBridge 167:e84263d55307 586 /* Check the parameters */
AnnaBridge 167:e84263d55307 587 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 588
<> 144:ef7eb2e8f9f7 589 /* Process locked */
<> 144:ef7eb2e8f9f7 590 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 591
<> 144:ef7eb2e8f9f7 592 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 593 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 594
<> 144:ef7eb2e8f9f7 595 for(counter = 0U; (counter < CLUTSize); counter++)
<> 144:ef7eb2e8f9f7 596 {
<> 144:ef7eb2e8f9f7 597 if(hltdc->LayerCfg[LayerIdx].PixelFormat == LTDC_PIXEL_FORMAT_AL44)
<> 144:ef7eb2e8f9f7 598 {
<> 144:ef7eb2e8f9f7 599 tmp = (((counter + 16U*counter) << 24U) | ((uint32_t)(*pCLUT) & 0xFFU) | ((uint32_t)(*pCLUT) & 0xFF00U) | ((uint32_t)(*pCLUT) & 0xFF0000U));
<> 144:ef7eb2e8f9f7 600 }
<> 144:ef7eb2e8f9f7 601 else
<> 144:ef7eb2e8f9f7 602 {
<> 144:ef7eb2e8f9f7 603 tmp = ((counter << 24U) | ((uint32_t)(*pCLUT) & 0xFFU) | ((uint32_t)(*pCLUT) & 0xFF00U) | ((uint32_t)(*pCLUT) & 0xFF0000U));
<> 144:ef7eb2e8f9f7 604 }
<> 144:ef7eb2e8f9f7 605 pcounter = (uint32_t)pCLUT + sizeof(*pCLUT);
<> 144:ef7eb2e8f9f7 606 pCLUT = (uint32_t *)pcounter;
<> 144:ef7eb2e8f9f7 607
<> 144:ef7eb2e8f9f7 608 /* Specifies the C-LUT address and RGB value */
<> 144:ef7eb2e8f9f7 609 LTDC_LAYER(hltdc, LayerIdx)->CLUTWR = tmp;
<> 144:ef7eb2e8f9f7 610 }
<> 144:ef7eb2e8f9f7 611
<> 144:ef7eb2e8f9f7 612 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 613 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 614
<> 144:ef7eb2e8f9f7 615 /* Process unlocked */
<> 144:ef7eb2e8f9f7 616 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 617
<> 144:ef7eb2e8f9f7 618 return HAL_OK;
<> 144:ef7eb2e8f9f7 619 }
<> 144:ef7eb2e8f9f7 620
<> 144:ef7eb2e8f9f7 621 /**
<> 144:ef7eb2e8f9f7 622 * @brief Enable the color keying.
AnnaBridge 167:e84263d55307 623 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 624 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 625 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 626 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 627 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 628 * @retval HAL status
<> 144:ef7eb2e8f9f7 629 */
<> 144:ef7eb2e8f9f7 630 HAL_StatusTypeDef HAL_LTDC_EnableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 631 {
AnnaBridge 167:e84263d55307 632 /* Check the parameters */
AnnaBridge 167:e84263d55307 633 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 634
<> 144:ef7eb2e8f9f7 635 /* Process locked */
<> 144:ef7eb2e8f9f7 636 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 637
<> 144:ef7eb2e8f9f7 638 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 639 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 640
<> 144:ef7eb2e8f9f7 641 /* Enable LTDC color keying by setting COLKEN bit */
<> 144:ef7eb2e8f9f7 642 LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_COLKEN;
<> 144:ef7eb2e8f9f7 643
AnnaBridge 167:e84263d55307 644 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 645 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 646
<> 144:ef7eb2e8f9f7 647 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 648 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 649
<> 144:ef7eb2e8f9f7 650 /* Process unlocked */
<> 144:ef7eb2e8f9f7 651 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 652
<> 144:ef7eb2e8f9f7 653 return HAL_OK;
<> 144:ef7eb2e8f9f7 654 }
<> 144:ef7eb2e8f9f7 655
<> 144:ef7eb2e8f9f7 656 /**
<> 144:ef7eb2e8f9f7 657 * @brief Disable the color keying.
AnnaBridge 167:e84263d55307 658 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 659 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 660 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 661 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 662 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 663 * @retval HAL status
<> 144:ef7eb2e8f9f7 664 */
<> 144:ef7eb2e8f9f7 665 HAL_StatusTypeDef HAL_LTDC_DisableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 666 {
AnnaBridge 167:e84263d55307 667 /* Check the parameters */
AnnaBridge 167:e84263d55307 668 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 669
<> 144:ef7eb2e8f9f7 670 /* Process locked */
<> 144:ef7eb2e8f9f7 671 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 672
<> 144:ef7eb2e8f9f7 673 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 674 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 675
<> 144:ef7eb2e8f9f7 676 /* Disable LTDC color keying by setting COLKEN bit */
<> 144:ef7eb2e8f9f7 677 LTDC_LAYER(hltdc, LayerIdx)->CR &= ~(uint32_t)LTDC_LxCR_COLKEN;
<> 144:ef7eb2e8f9f7 678
AnnaBridge 167:e84263d55307 679 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 680 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 681
<> 144:ef7eb2e8f9f7 682 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 683 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 684
<> 144:ef7eb2e8f9f7 685 /* Process unlocked */
<> 144:ef7eb2e8f9f7 686 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 687
<> 144:ef7eb2e8f9f7 688 return HAL_OK;
<> 144:ef7eb2e8f9f7 689 }
<> 144:ef7eb2e8f9f7 690
<> 144:ef7eb2e8f9f7 691 /**
<> 144:ef7eb2e8f9f7 692 * @brief Enable the color lookup table.
AnnaBridge 167:e84263d55307 693 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 694 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 695 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 696 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 697 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 698 * @retval HAL status
<> 144:ef7eb2e8f9f7 699 */
<> 144:ef7eb2e8f9f7 700 HAL_StatusTypeDef HAL_LTDC_EnableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 701 {
AnnaBridge 167:e84263d55307 702 /* Check the parameters */
AnnaBridge 167:e84263d55307 703 assert_param(IS_LTDC_LAYER(LayerIdx));
<> 144:ef7eb2e8f9f7 704
<> 144:ef7eb2e8f9f7 705 /* Process locked */
<> 144:ef7eb2e8f9f7 706 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 707
<> 144:ef7eb2e8f9f7 708 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 709 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 710
AnnaBridge 167:e84263d55307 711 /* Enable LTDC color lookup table by setting CLUTEN bit */
<> 144:ef7eb2e8f9f7 712 LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_CLUTEN;
<> 144:ef7eb2e8f9f7 713
AnnaBridge 167:e84263d55307 714 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 715 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 716
<> 144:ef7eb2e8f9f7 717 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 718 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 719
<> 144:ef7eb2e8f9f7 720 /* Process unlocked */
<> 144:ef7eb2e8f9f7 721 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 722
<> 144:ef7eb2e8f9f7 723 return HAL_OK;
<> 144:ef7eb2e8f9f7 724 }
<> 144:ef7eb2e8f9f7 725
<> 144:ef7eb2e8f9f7 726 /**
<> 144:ef7eb2e8f9f7 727 * @brief Disable the color lookup table.
AnnaBridge 167:e84263d55307 728 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 729 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 730 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 731 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 732 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 733 * @retval HAL status
<> 144:ef7eb2e8f9f7 734 */
<> 144:ef7eb2e8f9f7 735 HAL_StatusTypeDef HAL_LTDC_DisableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 736 {
AnnaBridge 167:e84263d55307 737 /* Check the parameters */
AnnaBridge 167:e84263d55307 738 assert_param(IS_LTDC_LAYER(LayerIdx));
<> 144:ef7eb2e8f9f7 739
<> 144:ef7eb2e8f9f7 740 /* Process locked */
<> 144:ef7eb2e8f9f7 741 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 742
<> 144:ef7eb2e8f9f7 743 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 744 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 745
<> 144:ef7eb2e8f9f7 746 /* Disable LTDC color lookup table by setting CLUTEN bit */
<> 144:ef7eb2e8f9f7 747 LTDC_LAYER(hltdc, LayerIdx)->CR &= ~(uint32_t)LTDC_LxCR_CLUTEN;
<> 144:ef7eb2e8f9f7 748
AnnaBridge 167:e84263d55307 749 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 750 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 751
<> 144:ef7eb2e8f9f7 752 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 753 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 754
<> 144:ef7eb2e8f9f7 755 /* Process unlocked */
<> 144:ef7eb2e8f9f7 756 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 757
<> 144:ef7eb2e8f9f7 758 return HAL_OK;
<> 144:ef7eb2e8f9f7 759 }
<> 144:ef7eb2e8f9f7 760
<> 144:ef7eb2e8f9f7 761 /**
AnnaBridge 167:e84263d55307 762 * @brief Enable Dither.
AnnaBridge 167:e84263d55307 763 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 764 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 765 * @retval HAL status
<> 144:ef7eb2e8f9f7 766 */
<> 144:ef7eb2e8f9f7 767
<> 144:ef7eb2e8f9f7 768 HAL_StatusTypeDef HAL_LTDC_EnableDither(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 769 {
<> 144:ef7eb2e8f9f7 770 /* Process locked */
<> 144:ef7eb2e8f9f7 771 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 772
<> 144:ef7eb2e8f9f7 773 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 774 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 775
<> 144:ef7eb2e8f9f7 776 /* Enable Dither by setting DTEN bit */
AnnaBridge 167:e84263d55307 777 LTDC->GCR |= (uint32_t)LTDC_GCR_DEN;
<> 144:ef7eb2e8f9f7 778
<> 144:ef7eb2e8f9f7 779 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 780 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 781
<> 144:ef7eb2e8f9f7 782 /* Process unlocked */
<> 144:ef7eb2e8f9f7 783 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 784
<> 144:ef7eb2e8f9f7 785 return HAL_OK;
<> 144:ef7eb2e8f9f7 786 }
<> 144:ef7eb2e8f9f7 787
<> 144:ef7eb2e8f9f7 788 /**
AnnaBridge 167:e84263d55307 789 * @brief Disable Dither.
AnnaBridge 167:e84263d55307 790 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 791 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 792 * @retval HAL status
<> 144:ef7eb2e8f9f7 793 */
<> 144:ef7eb2e8f9f7 794
<> 144:ef7eb2e8f9f7 795 HAL_StatusTypeDef HAL_LTDC_DisableDither(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 796 {
<> 144:ef7eb2e8f9f7 797 /* Process locked */
<> 144:ef7eb2e8f9f7 798 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 799
<> 144:ef7eb2e8f9f7 800 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 801 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 802
<> 144:ef7eb2e8f9f7 803 /* Disable Dither by setting DTEN bit */
AnnaBridge 167:e84263d55307 804 LTDC->GCR &= ~(uint32_t)LTDC_GCR_DEN;
<> 144:ef7eb2e8f9f7 805
<> 144:ef7eb2e8f9f7 806 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 807 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 808
<> 144:ef7eb2e8f9f7 809 /* Process unlocked */
<> 144:ef7eb2e8f9f7 810 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 811
<> 144:ef7eb2e8f9f7 812 return HAL_OK;
<> 144:ef7eb2e8f9f7 813 }
<> 144:ef7eb2e8f9f7 814
<> 144:ef7eb2e8f9f7 815 /**
<> 144:ef7eb2e8f9f7 816 * @brief Set the LTDC window size.
AnnaBridge 167:e84263d55307 817 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 818 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 819 * @param XSize LTDC Pixel per line
AnnaBridge 167:e84263d55307 820 * @param YSize LTDC Line number
AnnaBridge 167:e84263d55307 821 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 822 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 823 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 824 * @retval HAL status
<> 144:ef7eb2e8f9f7 825 */
<> 144:ef7eb2e8f9f7 826 HAL_StatusTypeDef HAL_LTDC_SetWindowSize(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 827 {
<> 144:ef7eb2e8f9f7 828 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 829
AnnaBridge 167:e84263d55307 830 /* Check the parameters (Layers parameters)*/
AnnaBridge 167:e84263d55307 831 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 832 assert_param(IS_LTDC_CFBLL(XSize));
AnnaBridge 167:e84263d55307 833 assert_param(IS_LTDC_CFBLNBR(YSize));
AnnaBridge 167:e84263d55307 834
<> 144:ef7eb2e8f9f7 835 /* Process locked */
<> 144:ef7eb2e8f9f7 836 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 837
<> 144:ef7eb2e8f9f7 838 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 839 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 840
<> 144:ef7eb2e8f9f7 841 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 842 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 843
AnnaBridge 167:e84263d55307 844 /* update horizontal stop */
<> 144:ef7eb2e8f9f7 845 pLayerCfg->WindowX1 = XSize + pLayerCfg->WindowX0;
<> 144:ef7eb2e8f9f7 846
AnnaBridge 167:e84263d55307 847 /* update vertical stop */
<> 144:ef7eb2e8f9f7 848 pLayerCfg->WindowY1 = YSize + pLayerCfg->WindowY0;
<> 144:ef7eb2e8f9f7 849
<> 144:ef7eb2e8f9f7 850 /* Reconfigures the color frame buffer pitch in byte */
<> 144:ef7eb2e8f9f7 851 pLayerCfg->ImageWidth = XSize;
<> 144:ef7eb2e8f9f7 852
<> 144:ef7eb2e8f9f7 853 /* Reconfigures the frame buffer line number */
<> 144:ef7eb2e8f9f7 854 pLayerCfg->ImageHeight = YSize;
<> 144:ef7eb2e8f9f7 855
<> 144:ef7eb2e8f9f7 856 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 857 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 858
AnnaBridge 167:e84263d55307 859 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 860 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 861
<> 144:ef7eb2e8f9f7 862 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 863 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 864
<> 144:ef7eb2e8f9f7 865 /* Process unlocked */
<> 144:ef7eb2e8f9f7 866 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 867
<> 144:ef7eb2e8f9f7 868 return HAL_OK;
<> 144:ef7eb2e8f9f7 869 }
<> 144:ef7eb2e8f9f7 870
<> 144:ef7eb2e8f9f7 871 /**
<> 144:ef7eb2e8f9f7 872 * @brief Set the LTDC window position.
AnnaBridge 167:e84263d55307 873 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 874 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 875 * @param X0 LTDC window X offset
AnnaBridge 167:e84263d55307 876 * @param Y0 LTDC window Y offset
AnnaBridge 167:e84263d55307 877 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 878 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 879 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 880 * @retval HAL status
<> 144:ef7eb2e8f9f7 881 */
<> 144:ef7eb2e8f9f7 882 HAL_StatusTypeDef HAL_LTDC_SetWindowPosition(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 883 {
<> 144:ef7eb2e8f9f7 884 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 885
AnnaBridge 167:e84263d55307 886 /* Check the parameters */
AnnaBridge 167:e84263d55307 887 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 888 assert_param(IS_LTDC_CFBLL(X0));
AnnaBridge 167:e84263d55307 889 assert_param(IS_LTDC_CFBLNBR(Y0));
AnnaBridge 167:e84263d55307 890
<> 144:ef7eb2e8f9f7 891 /* Process locked */
<> 144:ef7eb2e8f9f7 892 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 893
<> 144:ef7eb2e8f9f7 894 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 895 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 896
<> 144:ef7eb2e8f9f7 897 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 898 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 899
<> 144:ef7eb2e8f9f7 900 /* update horizontal start/stop */
<> 144:ef7eb2e8f9f7 901 pLayerCfg->WindowX0 = X0;
<> 144:ef7eb2e8f9f7 902 pLayerCfg->WindowX1 = X0 + pLayerCfg->ImageWidth;
<> 144:ef7eb2e8f9f7 903
<> 144:ef7eb2e8f9f7 904 /* update vertical start/stop */
<> 144:ef7eb2e8f9f7 905 pLayerCfg->WindowY0 = Y0;
<> 144:ef7eb2e8f9f7 906 pLayerCfg->WindowY1 = Y0 + pLayerCfg->ImageHeight;
<> 144:ef7eb2e8f9f7 907
<> 144:ef7eb2e8f9f7 908 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 909 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 910
AnnaBridge 167:e84263d55307 911 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 912 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 913
<> 144:ef7eb2e8f9f7 914 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 915 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 916
<> 144:ef7eb2e8f9f7 917 /* Process unlocked */
<> 144:ef7eb2e8f9f7 918 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 919
<> 144:ef7eb2e8f9f7 920 return HAL_OK;
<> 144:ef7eb2e8f9f7 921 }
<> 144:ef7eb2e8f9f7 922
<> 144:ef7eb2e8f9f7 923 /**
<> 144:ef7eb2e8f9f7 924 * @brief Reconfigure the pixel format.
AnnaBridge 167:e84263d55307 925 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 926 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 927 * @param Pixelformat new pixel format value.
AnnaBridge 167:e84263d55307 928 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 929 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 930 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1).
<> 144:ef7eb2e8f9f7 931 * @retval HAL status
<> 144:ef7eb2e8f9f7 932 */
<> 144:ef7eb2e8f9f7 933 HAL_StatusTypeDef HAL_LTDC_SetPixelFormat(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 934 {
<> 144:ef7eb2e8f9f7 935 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 936
AnnaBridge 167:e84263d55307 937 /* Check the parameters */
AnnaBridge 167:e84263d55307 938 assert_param(IS_LTDC_PIXEL_FORMAT(Pixelformat));
AnnaBridge 167:e84263d55307 939 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 940
<> 144:ef7eb2e8f9f7 941 /* Process locked */
<> 144:ef7eb2e8f9f7 942 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 943
<> 144:ef7eb2e8f9f7 944 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 945 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 946
<> 144:ef7eb2e8f9f7 947 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 948 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 949
<> 144:ef7eb2e8f9f7 950 /* Reconfigure the pixel format */
<> 144:ef7eb2e8f9f7 951 pLayerCfg->PixelFormat = Pixelformat;
<> 144:ef7eb2e8f9f7 952
<> 144:ef7eb2e8f9f7 953 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 954 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 955
AnnaBridge 167:e84263d55307 956 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 957 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 958
<> 144:ef7eb2e8f9f7 959 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 960 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 961
<> 144:ef7eb2e8f9f7 962 /* Process unlocked */
<> 144:ef7eb2e8f9f7 963 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 964
<> 144:ef7eb2e8f9f7 965 return HAL_OK;
<> 144:ef7eb2e8f9f7 966 }
<> 144:ef7eb2e8f9f7 967
<> 144:ef7eb2e8f9f7 968 /**
<> 144:ef7eb2e8f9f7 969 * @brief Reconfigure the layer alpha value.
AnnaBridge 167:e84263d55307 970 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 971 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 972 * @param Alpha new alpha value.
AnnaBridge 167:e84263d55307 973 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 974 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 975 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 976 * @retval HAL status
<> 144:ef7eb2e8f9f7 977 */
<> 144:ef7eb2e8f9f7 978 HAL_StatusTypeDef HAL_LTDC_SetAlpha(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 979 {
<> 144:ef7eb2e8f9f7 980 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 981
AnnaBridge 167:e84263d55307 982 /* Check the parameters */
AnnaBridge 167:e84263d55307 983 assert_param(IS_LTDC_ALPHA(Alpha));
AnnaBridge 167:e84263d55307 984 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 985
<> 144:ef7eb2e8f9f7 986 /* Process locked */
<> 144:ef7eb2e8f9f7 987 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 988
<> 144:ef7eb2e8f9f7 989 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 990 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 991
<> 144:ef7eb2e8f9f7 992 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 993 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 994
<> 144:ef7eb2e8f9f7 995 /* Reconfigure the Alpha value */
<> 144:ef7eb2e8f9f7 996 pLayerCfg->Alpha = Alpha;
<> 144:ef7eb2e8f9f7 997
<> 144:ef7eb2e8f9f7 998 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 999 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 1000
AnnaBridge 167:e84263d55307 1001 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 1002 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 1003
<> 144:ef7eb2e8f9f7 1004 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1005 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1006
<> 144:ef7eb2e8f9f7 1007 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1008 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1009
<> 144:ef7eb2e8f9f7 1010 return HAL_OK;
<> 144:ef7eb2e8f9f7 1011 }
<> 144:ef7eb2e8f9f7 1012 /**
<> 144:ef7eb2e8f9f7 1013 * @brief Reconfigure the frame buffer Address.
AnnaBridge 167:e84263d55307 1014 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1015 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1016 * @param Address new address value.
AnnaBridge 167:e84263d55307 1017 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1018 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1019 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1).
<> 144:ef7eb2e8f9f7 1020 * @retval HAL status
<> 144:ef7eb2e8f9f7 1021 */
<> 144:ef7eb2e8f9f7 1022 HAL_StatusTypeDef HAL_LTDC_SetAddress(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1023 {
<> 144:ef7eb2e8f9f7 1024 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 1025
AnnaBridge 167:e84263d55307 1026 /* Check the parameters */
AnnaBridge 167:e84263d55307 1027 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1028
<> 144:ef7eb2e8f9f7 1029 /* Process locked */
<> 144:ef7eb2e8f9f7 1030 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1031
<> 144:ef7eb2e8f9f7 1032 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1033 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1034
<> 144:ef7eb2e8f9f7 1035 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 1036 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 1037
<> 144:ef7eb2e8f9f7 1038 /* Reconfigure the Address */
<> 144:ef7eb2e8f9f7 1039 pLayerCfg->FBStartAdress = Address;
<> 144:ef7eb2e8f9f7 1040
<> 144:ef7eb2e8f9f7 1041 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 1042 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 1043
AnnaBridge 167:e84263d55307 1044 /* Set the Immediate Reload type */
<> 144:ef7eb2e8f9f7 1045 hltdc->Instance->SRCR = LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 1046
<> 144:ef7eb2e8f9f7 1047 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1048 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1049
<> 144:ef7eb2e8f9f7 1050 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1051 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1052
<> 144:ef7eb2e8f9f7 1053 return HAL_OK;
<> 144:ef7eb2e8f9f7 1054 }
<> 144:ef7eb2e8f9f7 1055
<> 144:ef7eb2e8f9f7 1056 /**
<> 144:ef7eb2e8f9f7 1057 * @brief Function used to reconfigure the pitch for specific cases where the attached LayerIdx buffer have a width that is
<> 144:ef7eb2e8f9f7 1058 * larger than the one intended to be displayed on screen. Example of a buffer 800x480 attached to layer for which we
<> 144:ef7eb2e8f9f7 1059 * want to read and display on screen only a portion 320x240 taken in the center of the buffer. The pitch in pixels
<> 144:ef7eb2e8f9f7 1060 * will be in that case 800 pixels and not 320 pixels as initially configured by previous call to HAL_LTDC_ConfigLayer().
AnnaBridge 167:e84263d55307 1061 * @note This function should be called only after a previous call to HAL_LTDC_ConfigLayer() to modify the default pitch
AnnaBridge 167:e84263d55307 1062 * configured by HAL_LTDC_ConfigLayer() when required (refer to example described just above).
AnnaBridge 167:e84263d55307 1063 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1064 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1065 * @param LinePitchInPixels New line pitch in pixels to configure for LTDC layer 'LayerIdx'.
AnnaBridge 167:e84263d55307 1066 * @param LayerIdx LTDC layer index concerned by the modification of line pitch.
<> 144:ef7eb2e8f9f7 1067 * @retval HAL status
<> 144:ef7eb2e8f9f7 1068 */
<> 144:ef7eb2e8f9f7 1069 HAL_StatusTypeDef HAL_LTDC_SetPitch(LTDC_HandleTypeDef *hltdc, uint32_t LinePitchInPixels, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1070 {
<> 144:ef7eb2e8f9f7 1071 uint32_t tmp = 0U;
<> 144:ef7eb2e8f9f7 1072 uint32_t pitchUpdate = 0U;
<> 144:ef7eb2e8f9f7 1073 uint32_t pixelFormat = 0U;
AnnaBridge 167:e84263d55307 1074
AnnaBridge 167:e84263d55307 1075 /* Check the parameters */
AnnaBridge 167:e84263d55307 1076 assert_param(IS_LTDC_LAYER(LayerIdx));
<> 144:ef7eb2e8f9f7 1077
<> 144:ef7eb2e8f9f7 1078 /* Process locked */
<> 144:ef7eb2e8f9f7 1079 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1080
<> 144:ef7eb2e8f9f7 1081 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1082 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1083
<> 144:ef7eb2e8f9f7 1084 /* get LayerIdx used pixel format */
<> 144:ef7eb2e8f9f7 1085 pixelFormat = hltdc->LayerCfg[LayerIdx].PixelFormat;
<> 144:ef7eb2e8f9f7 1086
<> 144:ef7eb2e8f9f7 1087 if(pixelFormat == LTDC_PIXEL_FORMAT_ARGB8888)
<> 144:ef7eb2e8f9f7 1088 {
<> 144:ef7eb2e8f9f7 1089 tmp = 4U;
<> 144:ef7eb2e8f9f7 1090 }
<> 144:ef7eb2e8f9f7 1091 else if (pixelFormat == LTDC_PIXEL_FORMAT_RGB888)
<> 144:ef7eb2e8f9f7 1092 {
<> 144:ef7eb2e8f9f7 1093 tmp = 3U;
<> 144:ef7eb2e8f9f7 1094 }
<> 144:ef7eb2e8f9f7 1095 else if((pixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \
<> 144:ef7eb2e8f9f7 1096 (pixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \
<> 144:ef7eb2e8f9f7 1097 (pixelFormat == LTDC_PIXEL_FORMAT_ARGB1555) || \
<> 144:ef7eb2e8f9f7 1098 (pixelFormat == LTDC_PIXEL_FORMAT_AL88))
<> 144:ef7eb2e8f9f7 1099 {
<> 144:ef7eb2e8f9f7 1100 tmp = 2U;
<> 144:ef7eb2e8f9f7 1101 }
<> 144:ef7eb2e8f9f7 1102 else
<> 144:ef7eb2e8f9f7 1103 {
<> 144:ef7eb2e8f9f7 1104 tmp = 1U;
<> 144:ef7eb2e8f9f7 1105 }
<> 144:ef7eb2e8f9f7 1106
<> 144:ef7eb2e8f9f7 1107 pitchUpdate = ((LinePitchInPixels * tmp) << 16U);
<> 144:ef7eb2e8f9f7 1108
<> 144:ef7eb2e8f9f7 1109 /* Clear previously set standard pitch */
<> 144:ef7eb2e8f9f7 1110 LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~LTDC_LxCFBLR_CFBP;
<> 144:ef7eb2e8f9f7 1111
AnnaBridge 167:e84263d55307 1112 /* Set the Reload type as immediate update of LTDC pitch configured above */
<> 144:ef7eb2e8f9f7 1113 LTDC->SRCR |= LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 1114
<> 144:ef7eb2e8f9f7 1115 /* Set new line pitch value */
<> 144:ef7eb2e8f9f7 1116 LTDC_LAYER(hltdc, LayerIdx)->CFBLR |= pitchUpdate;
<> 144:ef7eb2e8f9f7 1117
AnnaBridge 167:e84263d55307 1118 /* Set the Reload type as immediate update of LTDC pitch configured above */
<> 144:ef7eb2e8f9f7 1119 LTDC->SRCR |= LTDC_SRCR_IMR;
<> 144:ef7eb2e8f9f7 1120
<> 144:ef7eb2e8f9f7 1121 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1122 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1123
<> 144:ef7eb2e8f9f7 1124 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1125 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1126
<> 144:ef7eb2e8f9f7 1127 return HAL_OK;
<> 144:ef7eb2e8f9f7 1128 }
<> 144:ef7eb2e8f9f7 1129
<> 144:ef7eb2e8f9f7 1130 /**
AnnaBridge 167:e84263d55307 1131 * @brief Define the position of the line interrupt.
AnnaBridge 167:e84263d55307 1132 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
AnnaBridge 167:e84263d55307 1133 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1134 * @param Line Line Interrupt Position.
AnnaBridge 167:e84263d55307 1135 * @note User application may resort to HAL_LTDC_LineEventCallback() at line interrupt generation.
<> 144:ef7eb2e8f9f7 1136 * @retval HAL status
<> 144:ef7eb2e8f9f7 1137 */
<> 144:ef7eb2e8f9f7 1138 HAL_StatusTypeDef HAL_LTDC_ProgramLineEvent(LTDC_HandleTypeDef *hltdc, uint32_t Line)
<> 144:ef7eb2e8f9f7 1139 {
AnnaBridge 167:e84263d55307 1140 /* Check the parameters */
AnnaBridge 167:e84263d55307 1141 assert_param(IS_LTDC_LIPOS(Line));
AnnaBridge 167:e84263d55307 1142
<> 144:ef7eb2e8f9f7 1143 /* Process locked */
<> 144:ef7eb2e8f9f7 1144 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1145
<> 144:ef7eb2e8f9f7 1146 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1147 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1148
AnnaBridge 167:e84263d55307 1149 /* Disable the Line interrupt */
AnnaBridge 167:e84263d55307 1150 __HAL_LTDC_DISABLE_IT(hltdc, LTDC_IT_LI);
AnnaBridge 167:e84263d55307 1151
AnnaBridge 167:e84263d55307 1152 /* Set the Line Interrupt position */
AnnaBridge 167:e84263d55307 1153 LTDC->LIPCR = (uint32_t)Line;
<> 144:ef7eb2e8f9f7 1154
<> 144:ef7eb2e8f9f7 1155 /* Enable the Line interrupt */
<> 144:ef7eb2e8f9f7 1156 __HAL_LTDC_ENABLE_IT(hltdc, LTDC_IT_LI);
<> 144:ef7eb2e8f9f7 1157
<> 144:ef7eb2e8f9f7 1158 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1159 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1160
<> 144:ef7eb2e8f9f7 1161 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1162 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1163
<> 144:ef7eb2e8f9f7 1164 return HAL_OK;
<> 144:ef7eb2e8f9f7 1165 }
<> 144:ef7eb2e8f9f7 1166
<> 144:ef7eb2e8f9f7 1167 /**
AnnaBridge 167:e84263d55307 1168 * @brief Reload LTDC Layers configuration.
AnnaBridge 167:e84263d55307 1169 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
AnnaBridge 167:e84263d55307 1170 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1171 * @param ReloadType This parameter can be one of the following values :
AnnaBridge 167:e84263d55307 1172 * LTDC_RELOAD_IMMEDIATE : Immediate Reload
AnnaBridge 167:e84263d55307 1173 * LTDC_RELOAD_VERTICAL_BLANKING : Reload in the next Vertical Blanking
AnnaBridge 167:e84263d55307 1174 * @note User application may resort to HAL_LTDC_ReloadEventCallback() at reload interrupt generation.
<> 144:ef7eb2e8f9f7 1175 * @retval HAL status
<> 144:ef7eb2e8f9f7 1176 */
AnnaBridge 167:e84263d55307 1177 HAL_StatusTypeDef HAL_LTDC_Reload(LTDC_HandleTypeDef *hltdc, uint32_t ReloadType)
<> 144:ef7eb2e8f9f7 1178 {
AnnaBridge 167:e84263d55307 1179 /* Check the parameters */
AnnaBridge 167:e84263d55307 1180 assert_param(IS_LTDC_RELOAD(ReloadType));
<> 144:ef7eb2e8f9f7 1181
<> 144:ef7eb2e8f9f7 1182 /* Process locked */
<> 144:ef7eb2e8f9f7 1183 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1184
<> 144:ef7eb2e8f9f7 1185 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1186 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1187
<> 144:ef7eb2e8f9f7 1188 /* Enable the Reload interrupt */
<> 144:ef7eb2e8f9f7 1189 __HAL_LTDC_ENABLE_IT(hltdc, LTDC_IT_RR);
<> 144:ef7eb2e8f9f7 1190
<> 144:ef7eb2e8f9f7 1191 /* Apply Reload type */
<> 144:ef7eb2e8f9f7 1192 hltdc->Instance->SRCR = ReloadType;
<> 144:ef7eb2e8f9f7 1193
<> 144:ef7eb2e8f9f7 1194 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1195 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1196
<> 144:ef7eb2e8f9f7 1197 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1198 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1199
<> 144:ef7eb2e8f9f7 1200 return HAL_OK;
<> 144:ef7eb2e8f9f7 1201 }
<> 144:ef7eb2e8f9f7 1202
<> 144:ef7eb2e8f9f7 1203 /**
<> 144:ef7eb2e8f9f7 1204 * @brief Configure the LTDC Layer according to the specified without reloading
<> 144:ef7eb2e8f9f7 1205 * parameters in the LTDC_InitTypeDef and create the associated handle.
AnnaBridge 167:e84263d55307 1206 * Variant of the function HAL_LTDC_ConfigLayer without immediate reload.
AnnaBridge 167:e84263d55307 1207 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1208 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1209 * @param pLayerCfg pointer to a LTDC_LayerCfgTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1210 * the configuration information for the Layer.
AnnaBridge 167:e84263d55307 1211 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1212 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1213 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1214 * @retval HAL status
<> 144:ef7eb2e8f9f7 1215 */
<> 144:ef7eb2e8f9f7 1216 HAL_StatusTypeDef HAL_LTDC_ConfigLayer_NoReload(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1217 {
AnnaBridge 167:e84263d55307 1218 /* Check the parameters */
AnnaBridge 167:e84263d55307 1219 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1220 assert_param(IS_LTDC_HCONFIGST(pLayerCfg->WindowX0));
AnnaBridge 167:e84263d55307 1221 assert_param(IS_LTDC_HCONFIGSP(pLayerCfg->WindowX1));
AnnaBridge 167:e84263d55307 1222 assert_param(IS_LTDC_VCONFIGST(pLayerCfg->WindowY0));
AnnaBridge 167:e84263d55307 1223 assert_param(IS_LTDC_VCONFIGSP(pLayerCfg->WindowY1));
AnnaBridge 167:e84263d55307 1224 assert_param(IS_LTDC_PIXEL_FORMAT(pLayerCfg->PixelFormat));
AnnaBridge 167:e84263d55307 1225 assert_param(IS_LTDC_ALPHA(pLayerCfg->Alpha));
AnnaBridge 167:e84263d55307 1226 assert_param(IS_LTDC_ALPHA(pLayerCfg->Alpha0));
AnnaBridge 167:e84263d55307 1227 assert_param(IS_LTDC_BLENDING_FACTOR1(pLayerCfg->BlendingFactor1));
AnnaBridge 167:e84263d55307 1228 assert_param(IS_LTDC_BLENDING_FACTOR2(pLayerCfg->BlendingFactor2));
AnnaBridge 167:e84263d55307 1229 assert_param(IS_LTDC_CFBLL(pLayerCfg->ImageWidth));
AnnaBridge 167:e84263d55307 1230 assert_param(IS_LTDC_CFBLNBR(pLayerCfg->ImageHeight));
AnnaBridge 167:e84263d55307 1231
<> 144:ef7eb2e8f9f7 1232 /* Process locked */
<> 144:ef7eb2e8f9f7 1233 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1234
<> 144:ef7eb2e8f9f7 1235 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1236 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1237
<> 144:ef7eb2e8f9f7 1238 /* Copy new layer configuration into handle structure */
<> 144:ef7eb2e8f9f7 1239 hltdc->LayerCfg[LayerIdx] = *pLayerCfg;
<> 144:ef7eb2e8f9f7 1240
<> 144:ef7eb2e8f9f7 1241 /* Configure the LTDC Layer */
<> 144:ef7eb2e8f9f7 1242 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 1243
AnnaBridge 167:e84263d55307 1244 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1245
<> 144:ef7eb2e8f9f7 1246 /* Initialize the LTDC state*/
<> 144:ef7eb2e8f9f7 1247 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1248
<> 144:ef7eb2e8f9f7 1249 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1250 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1251
<> 144:ef7eb2e8f9f7 1252 return HAL_OK;
<> 144:ef7eb2e8f9f7 1253 }
<> 144:ef7eb2e8f9f7 1254
<> 144:ef7eb2e8f9f7 1255 /**
<> 144:ef7eb2e8f9f7 1256 * @brief Set the LTDC window size without reloading.
AnnaBridge 167:e84263d55307 1257 * Variant of the function HAL_LTDC_SetWindowSize without immediate reload.
AnnaBridge 167:e84263d55307 1258 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1259 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1260 * @param XSize LTDC Pixel per line
AnnaBridge 167:e84263d55307 1261 * @param YSize LTDC Line number
AnnaBridge 167:e84263d55307 1262 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1263 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1264 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1265 * @retval HAL status
<> 144:ef7eb2e8f9f7 1266 */
<> 144:ef7eb2e8f9f7 1267 HAL_StatusTypeDef HAL_LTDC_SetWindowSize_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1268 {
<> 144:ef7eb2e8f9f7 1269 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 1270
AnnaBridge 167:e84263d55307 1271 /* Check the parameters (Layers parameters)*/
AnnaBridge 167:e84263d55307 1272 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1273 assert_param(IS_LTDC_CFBLL(XSize));
AnnaBridge 167:e84263d55307 1274 assert_param(IS_LTDC_CFBLNBR(YSize));
AnnaBridge 167:e84263d55307 1275
<> 144:ef7eb2e8f9f7 1276 /* Process locked */
<> 144:ef7eb2e8f9f7 1277 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1278
<> 144:ef7eb2e8f9f7 1279 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1280 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1281
<> 144:ef7eb2e8f9f7 1282 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 1283 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 1284
AnnaBridge 167:e84263d55307 1285 /* update horizontal stop */
<> 144:ef7eb2e8f9f7 1286 pLayerCfg->WindowX1 = XSize + pLayerCfg->WindowX0;
<> 144:ef7eb2e8f9f7 1287
AnnaBridge 167:e84263d55307 1288 /* update vertical stop */
<> 144:ef7eb2e8f9f7 1289 pLayerCfg->WindowY1 = YSize + pLayerCfg->WindowY0;
<> 144:ef7eb2e8f9f7 1290
<> 144:ef7eb2e8f9f7 1291 /* Reconfigures the color frame buffer pitch in byte */
<> 144:ef7eb2e8f9f7 1292 pLayerCfg->ImageWidth = XSize;
<> 144:ef7eb2e8f9f7 1293
<> 144:ef7eb2e8f9f7 1294 /* Reconfigures the frame buffer line number */
<> 144:ef7eb2e8f9f7 1295 pLayerCfg->ImageHeight = YSize;
<> 144:ef7eb2e8f9f7 1296
<> 144:ef7eb2e8f9f7 1297 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 1298 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 1299
AnnaBridge 167:e84263d55307 1300 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1301
<> 144:ef7eb2e8f9f7 1302 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1303 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1304
<> 144:ef7eb2e8f9f7 1305 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1306 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1307
<> 144:ef7eb2e8f9f7 1308 return HAL_OK;
<> 144:ef7eb2e8f9f7 1309 }
<> 144:ef7eb2e8f9f7 1310
<> 144:ef7eb2e8f9f7 1311 /**
<> 144:ef7eb2e8f9f7 1312 * @brief Set the LTDC window position without reloading.
AnnaBridge 167:e84263d55307 1313 * Variant of the function HAL_LTDC_SetWindowPosition without immediate reload.
AnnaBridge 167:e84263d55307 1314 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1315 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1316 * @param X0 LTDC window X offset
AnnaBridge 167:e84263d55307 1317 * @param Y0 LTDC window Y offset
AnnaBridge 167:e84263d55307 1318 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1319 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1320 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1321 * @retval HAL status
<> 144:ef7eb2e8f9f7 1322 */
<> 144:ef7eb2e8f9f7 1323 HAL_StatusTypeDef HAL_LTDC_SetWindowPosition_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1324 {
<> 144:ef7eb2e8f9f7 1325 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 1326
AnnaBridge 167:e84263d55307 1327 /* Check the parameters */
AnnaBridge 167:e84263d55307 1328 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1329 assert_param(IS_LTDC_CFBLL(X0));
AnnaBridge 167:e84263d55307 1330 assert_param(IS_LTDC_CFBLNBR(Y0));
AnnaBridge 167:e84263d55307 1331
<> 144:ef7eb2e8f9f7 1332 /* Process locked */
<> 144:ef7eb2e8f9f7 1333 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1334
<> 144:ef7eb2e8f9f7 1335 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1336 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1337
<> 144:ef7eb2e8f9f7 1338 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 1339 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 1340
<> 144:ef7eb2e8f9f7 1341 /* update horizontal start/stop */
<> 144:ef7eb2e8f9f7 1342 pLayerCfg->WindowX0 = X0;
<> 144:ef7eb2e8f9f7 1343 pLayerCfg->WindowX1 = X0 + pLayerCfg->ImageWidth;
<> 144:ef7eb2e8f9f7 1344
<> 144:ef7eb2e8f9f7 1345 /* update vertical start/stop */
<> 144:ef7eb2e8f9f7 1346 pLayerCfg->WindowY0 = Y0;
<> 144:ef7eb2e8f9f7 1347 pLayerCfg->WindowY1 = Y0 + pLayerCfg->ImageHeight;
<> 144:ef7eb2e8f9f7 1348
<> 144:ef7eb2e8f9f7 1349 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 1350 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 1351
AnnaBridge 167:e84263d55307 1352 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1353
<> 144:ef7eb2e8f9f7 1354 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1355 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1356
<> 144:ef7eb2e8f9f7 1357 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1358 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1359
<> 144:ef7eb2e8f9f7 1360 return HAL_OK;
<> 144:ef7eb2e8f9f7 1361 }
<> 144:ef7eb2e8f9f7 1362
<> 144:ef7eb2e8f9f7 1363 /**
<> 144:ef7eb2e8f9f7 1364 * @brief Reconfigure the pixel format without reloading.
AnnaBridge 167:e84263d55307 1365 * Variant of the function HAL_LTDC_SetPixelFormat without immediate reload.
AnnaBridge 167:e84263d55307 1366 * @param hltdc pointer to a LTDC_HandleTypeDfef structure that contains
<> 144:ef7eb2e8f9f7 1367 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1368 * @param Pixelformat new pixel format value.
AnnaBridge 167:e84263d55307 1369 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1370 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1371 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1).
<> 144:ef7eb2e8f9f7 1372 * @retval HAL status
<> 144:ef7eb2e8f9f7 1373 */
<> 144:ef7eb2e8f9f7 1374 HAL_StatusTypeDef HAL_LTDC_SetPixelFormat_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1375 {
<> 144:ef7eb2e8f9f7 1376 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 1377
AnnaBridge 167:e84263d55307 1378 /* Check the parameters */
AnnaBridge 167:e84263d55307 1379 assert_param(IS_LTDC_PIXEL_FORMAT(Pixelformat));
AnnaBridge 167:e84263d55307 1380 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1381
<> 144:ef7eb2e8f9f7 1382 /* Process locked */
<> 144:ef7eb2e8f9f7 1383 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1384
<> 144:ef7eb2e8f9f7 1385 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1386 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1387
<> 144:ef7eb2e8f9f7 1388 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 1389 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 1390
<> 144:ef7eb2e8f9f7 1391 /* Reconfigure the pixel format */
<> 144:ef7eb2e8f9f7 1392 pLayerCfg->PixelFormat = Pixelformat;
<> 144:ef7eb2e8f9f7 1393
<> 144:ef7eb2e8f9f7 1394 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 1395 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 1396
AnnaBridge 167:e84263d55307 1397 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1398
<> 144:ef7eb2e8f9f7 1399 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1400 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1401
<> 144:ef7eb2e8f9f7 1402 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1403 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1404
<> 144:ef7eb2e8f9f7 1405 return HAL_OK;
<> 144:ef7eb2e8f9f7 1406 }
<> 144:ef7eb2e8f9f7 1407
<> 144:ef7eb2e8f9f7 1408 /**
<> 144:ef7eb2e8f9f7 1409 * @brief Reconfigure the layer alpha value without reloading.
AnnaBridge 167:e84263d55307 1410 * Variant of the function HAL_LTDC_SetAlpha without immediate reload.
AnnaBridge 167:e84263d55307 1411 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1412 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1413 * @param Alpha new alpha value.
AnnaBridge 167:e84263d55307 1414 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1415 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1416 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1417 * @retval HAL status
<> 144:ef7eb2e8f9f7 1418 */
<> 144:ef7eb2e8f9f7 1419 HAL_StatusTypeDef HAL_LTDC_SetAlpha_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1420 {
<> 144:ef7eb2e8f9f7 1421 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 1422
AnnaBridge 167:e84263d55307 1423 /* Check the parameters */
AnnaBridge 167:e84263d55307 1424 assert_param(IS_LTDC_ALPHA(Alpha));
AnnaBridge 167:e84263d55307 1425 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1426
<> 144:ef7eb2e8f9f7 1427 /* Process locked */
<> 144:ef7eb2e8f9f7 1428 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1429
<> 144:ef7eb2e8f9f7 1430 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1431 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1432
<> 144:ef7eb2e8f9f7 1433 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 1434 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 1435
<> 144:ef7eb2e8f9f7 1436 /* Reconfigure the Alpha value */
<> 144:ef7eb2e8f9f7 1437 pLayerCfg->Alpha = Alpha;
<> 144:ef7eb2e8f9f7 1438
<> 144:ef7eb2e8f9f7 1439 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 1440 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 1441
AnnaBridge 167:e84263d55307 1442 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1443
<> 144:ef7eb2e8f9f7 1444 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1445 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1446
<> 144:ef7eb2e8f9f7 1447 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1448 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1449
<> 144:ef7eb2e8f9f7 1450 return HAL_OK;
<> 144:ef7eb2e8f9f7 1451 }
<> 144:ef7eb2e8f9f7 1452
<> 144:ef7eb2e8f9f7 1453 /**
<> 144:ef7eb2e8f9f7 1454 * @brief Reconfigure the frame buffer Address without reloading.
AnnaBridge 167:e84263d55307 1455 * Variant of the function HAL_LTDC_SetAddress without immediate reload.
AnnaBridge 167:e84263d55307 1456 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1457 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1458 * @param Address new address value.
AnnaBridge 167:e84263d55307 1459 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1460 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1461 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1).
<> 144:ef7eb2e8f9f7 1462 * @retval HAL status
<> 144:ef7eb2e8f9f7 1463 */
<> 144:ef7eb2e8f9f7 1464 HAL_StatusTypeDef HAL_LTDC_SetAddress_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1465 {
<> 144:ef7eb2e8f9f7 1466 LTDC_LayerCfgTypeDef *pLayerCfg;
<> 144:ef7eb2e8f9f7 1467
AnnaBridge 167:e84263d55307 1468 /* Check the parameters */
AnnaBridge 167:e84263d55307 1469 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1470
<> 144:ef7eb2e8f9f7 1471 /* Process locked */
<> 144:ef7eb2e8f9f7 1472 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1473
<> 144:ef7eb2e8f9f7 1474 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1475 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1476
<> 144:ef7eb2e8f9f7 1477 /* Get layer configuration from handle structure */
<> 144:ef7eb2e8f9f7 1478 pLayerCfg = &hltdc->LayerCfg[LayerIdx];
<> 144:ef7eb2e8f9f7 1479
<> 144:ef7eb2e8f9f7 1480 /* Reconfigure the Address */
<> 144:ef7eb2e8f9f7 1481 pLayerCfg->FBStartAdress = Address;
<> 144:ef7eb2e8f9f7 1482
<> 144:ef7eb2e8f9f7 1483 /* Set LTDC parameters */
<> 144:ef7eb2e8f9f7 1484 LTDC_SetConfig(hltdc, pLayerCfg, LayerIdx);
<> 144:ef7eb2e8f9f7 1485
AnnaBridge 167:e84263d55307 1486 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1487
<> 144:ef7eb2e8f9f7 1488 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1489 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1490
<> 144:ef7eb2e8f9f7 1491 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1492 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1493
<> 144:ef7eb2e8f9f7 1494 return HAL_OK;
<> 144:ef7eb2e8f9f7 1495 }
<> 144:ef7eb2e8f9f7 1496
<> 144:ef7eb2e8f9f7 1497 /**
<> 144:ef7eb2e8f9f7 1498 * @brief Function used to reconfigure the pitch for specific cases where the attached LayerIdx buffer have a width that is
<> 144:ef7eb2e8f9f7 1499 * larger than the one intended to be displayed on screen. Example of a buffer 800x480 attached to layer for which we
<> 144:ef7eb2e8f9f7 1500 * want to read and display on screen only a portion 320x240 taken in the center of the buffer. The pitch in pixels
<> 144:ef7eb2e8f9f7 1501 * will be in that case 800 pixels and not 320 pixels as initially configured by previous call to HAL_LTDC_ConfigLayer().
AnnaBridge 167:e84263d55307 1502 * @note This function should be called only after a previous call to HAL_LTDC_ConfigLayer() to modify the default pitch
AnnaBridge 167:e84263d55307 1503 * configured by HAL_LTDC_ConfigLayer() when required (refer to example described just above).
AnnaBridge 167:e84263d55307 1504 * Variant of the function HAL_LTDC_SetPitch without immediate reload.
AnnaBridge 167:e84263d55307 1505 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1506 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1507 * @param LinePitchInPixels New line pitch in pixels to configure for LTDC layer 'LayerIdx'.
AnnaBridge 167:e84263d55307 1508 * @param LayerIdx LTDC layer index concerned by the modification of line pitch.
<> 144:ef7eb2e8f9f7 1509 * @retval HAL status
<> 144:ef7eb2e8f9f7 1510 */
<> 144:ef7eb2e8f9f7 1511 HAL_StatusTypeDef HAL_LTDC_SetPitch_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LinePitchInPixels, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1512 {
AnnaBridge 167:e84263d55307 1513 uint32_t tmp = 0U;
AnnaBridge 167:e84263d55307 1514 uint32_t pitchUpdate = 0U;
AnnaBridge 167:e84263d55307 1515 uint32_t pixelFormat = 0U;
AnnaBridge 167:e84263d55307 1516
AnnaBridge 167:e84263d55307 1517 /* Check the parameters */
AnnaBridge 167:e84263d55307 1518 assert_param(IS_LTDC_LAYER(LayerIdx));
<> 144:ef7eb2e8f9f7 1519
<> 144:ef7eb2e8f9f7 1520 /* Process locked */
<> 144:ef7eb2e8f9f7 1521 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1522
<> 144:ef7eb2e8f9f7 1523 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1524 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1525
<> 144:ef7eb2e8f9f7 1526 /* get LayerIdx used pixel format */
<> 144:ef7eb2e8f9f7 1527 pixelFormat = hltdc->LayerCfg[LayerIdx].PixelFormat;
<> 144:ef7eb2e8f9f7 1528
<> 144:ef7eb2e8f9f7 1529 if(pixelFormat == LTDC_PIXEL_FORMAT_ARGB8888)
<> 144:ef7eb2e8f9f7 1530 {
AnnaBridge 167:e84263d55307 1531 tmp = 4U;
<> 144:ef7eb2e8f9f7 1532 }
<> 144:ef7eb2e8f9f7 1533 else if (pixelFormat == LTDC_PIXEL_FORMAT_RGB888)
<> 144:ef7eb2e8f9f7 1534 {
AnnaBridge 167:e84263d55307 1535 tmp = 3U;
<> 144:ef7eb2e8f9f7 1536 }
<> 144:ef7eb2e8f9f7 1537 else if((pixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \
<> 144:ef7eb2e8f9f7 1538 (pixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \
<> 144:ef7eb2e8f9f7 1539 (pixelFormat == LTDC_PIXEL_FORMAT_ARGB1555) || \
<> 144:ef7eb2e8f9f7 1540 (pixelFormat == LTDC_PIXEL_FORMAT_AL88))
<> 144:ef7eb2e8f9f7 1541 {
AnnaBridge 167:e84263d55307 1542 tmp = 2U;
<> 144:ef7eb2e8f9f7 1543 }
<> 144:ef7eb2e8f9f7 1544 else
<> 144:ef7eb2e8f9f7 1545 {
AnnaBridge 167:e84263d55307 1546 tmp = 1U;
<> 144:ef7eb2e8f9f7 1547 }
<> 144:ef7eb2e8f9f7 1548
AnnaBridge 167:e84263d55307 1549 pitchUpdate = ((LinePitchInPixels * tmp) << 16U);
<> 144:ef7eb2e8f9f7 1550
<> 144:ef7eb2e8f9f7 1551 /* Clear previously set standard pitch */
<> 144:ef7eb2e8f9f7 1552 LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~LTDC_LxCFBLR_CFBP;
<> 144:ef7eb2e8f9f7 1553
<> 144:ef7eb2e8f9f7 1554 /* Set new line pitch value */
<> 144:ef7eb2e8f9f7 1555 LTDC_LAYER(hltdc, LayerIdx)->CFBLR |= pitchUpdate;
<> 144:ef7eb2e8f9f7 1556
AnnaBridge 167:e84263d55307 1557 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1558
<> 144:ef7eb2e8f9f7 1559 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1560 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1561
<> 144:ef7eb2e8f9f7 1562 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1563 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1564
<> 144:ef7eb2e8f9f7 1565 return HAL_OK;
<> 144:ef7eb2e8f9f7 1566 }
<> 144:ef7eb2e8f9f7 1567
<> 144:ef7eb2e8f9f7 1568
<> 144:ef7eb2e8f9f7 1569 /**
<> 144:ef7eb2e8f9f7 1570 * @brief Configure the color keying without reloading.
AnnaBridge 167:e84263d55307 1571 * Variant of the function HAL_LTDC_ConfigColorKeying without immediate reload.
AnnaBridge 167:e84263d55307 1572 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1573 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1574 * @param RGBValue the color key value
AnnaBridge 167:e84263d55307 1575 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1576 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1577 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1578 * @retval HAL status
<> 144:ef7eb2e8f9f7 1579 */
<> 144:ef7eb2e8f9f7 1580 HAL_StatusTypeDef HAL_LTDC_ConfigColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t RGBValue, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1581 {
AnnaBridge 167:e84263d55307 1582 /* Check the parameters */
AnnaBridge 167:e84263d55307 1583 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1584
<> 144:ef7eb2e8f9f7 1585 /* Process locked */
<> 144:ef7eb2e8f9f7 1586 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1587
<> 144:ef7eb2e8f9f7 1588 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1589 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1590
AnnaBridge 167:e84263d55307 1591 /* Configure the default color values */
<> 144:ef7eb2e8f9f7 1592 LTDC_LAYER(hltdc, LayerIdx)->CKCR &= ~(LTDC_LxCKCR_CKBLUE | LTDC_LxCKCR_CKGREEN | LTDC_LxCKCR_CKRED);
<> 144:ef7eb2e8f9f7 1593 LTDC_LAYER(hltdc, LayerIdx)->CKCR = RGBValue;
<> 144:ef7eb2e8f9f7 1594
AnnaBridge 167:e84263d55307 1595 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1596
<> 144:ef7eb2e8f9f7 1597 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1598 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1599
<> 144:ef7eb2e8f9f7 1600 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1601 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1602
<> 144:ef7eb2e8f9f7 1603 return HAL_OK;
<> 144:ef7eb2e8f9f7 1604 }
<> 144:ef7eb2e8f9f7 1605
<> 144:ef7eb2e8f9f7 1606 /**
<> 144:ef7eb2e8f9f7 1607 * @brief Enable the color keying without reloading.
AnnaBridge 167:e84263d55307 1608 * Variant of the function HAL_LTDC_EnableColorKeying without immediate reload.
AnnaBridge 167:e84263d55307 1609 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1610 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1611 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1612 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1613 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1614 * @retval HAL status
<> 144:ef7eb2e8f9f7 1615 */
<> 144:ef7eb2e8f9f7 1616 HAL_StatusTypeDef HAL_LTDC_EnableColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1617 {
AnnaBridge 167:e84263d55307 1618 /* Check the parameters */
AnnaBridge 167:e84263d55307 1619 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1620
<> 144:ef7eb2e8f9f7 1621 /* Process locked */
<> 144:ef7eb2e8f9f7 1622 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1623
<> 144:ef7eb2e8f9f7 1624 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1625 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1626
<> 144:ef7eb2e8f9f7 1627 /* Enable LTDC color keying by setting COLKEN bit */
<> 144:ef7eb2e8f9f7 1628 LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_COLKEN;
<> 144:ef7eb2e8f9f7 1629
AnnaBridge 167:e84263d55307 1630 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1631
<> 144:ef7eb2e8f9f7 1632 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1633 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1634
<> 144:ef7eb2e8f9f7 1635 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1636 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1637
<> 144:ef7eb2e8f9f7 1638 return HAL_OK;
<> 144:ef7eb2e8f9f7 1639 }
<> 144:ef7eb2e8f9f7 1640
<> 144:ef7eb2e8f9f7 1641 /**
<> 144:ef7eb2e8f9f7 1642 * @brief Disable the color keying without reloading.
AnnaBridge 167:e84263d55307 1643 * Variant of the function HAL_LTDC_DisableColorKeying without immediate reload.
AnnaBridge 167:e84263d55307 1644 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1645 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1646 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1647 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1648 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1649 * @retval HAL status
<> 144:ef7eb2e8f9f7 1650 */
<> 144:ef7eb2e8f9f7 1651 HAL_StatusTypeDef HAL_LTDC_DisableColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1652 {
AnnaBridge 167:e84263d55307 1653 /* Check the parameters */
AnnaBridge 167:e84263d55307 1654 assert_param(IS_LTDC_LAYER(LayerIdx));
AnnaBridge 167:e84263d55307 1655
<> 144:ef7eb2e8f9f7 1656 /* Process locked */
<> 144:ef7eb2e8f9f7 1657 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1658
<> 144:ef7eb2e8f9f7 1659 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1660 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1661
<> 144:ef7eb2e8f9f7 1662 /* Disable LTDC color keying by setting COLKEN bit */
<> 144:ef7eb2e8f9f7 1663 LTDC_LAYER(hltdc, LayerIdx)->CR &= ~(uint32_t)LTDC_LxCR_COLKEN;
<> 144:ef7eb2e8f9f7 1664
AnnaBridge 167:e84263d55307 1665 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1666
<> 144:ef7eb2e8f9f7 1667 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1668 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1669
<> 144:ef7eb2e8f9f7 1670 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1671 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1672
<> 144:ef7eb2e8f9f7 1673 return HAL_OK;
<> 144:ef7eb2e8f9f7 1674 }
<> 144:ef7eb2e8f9f7 1675
<> 144:ef7eb2e8f9f7 1676 /**
<> 144:ef7eb2e8f9f7 1677 * @brief Enable the color lookup table without reloading.
AnnaBridge 167:e84263d55307 1678 * Variant of the function HAL_LTDC_EnableCLUT without immediate reload.
AnnaBridge 167:e84263d55307 1679 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1680 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1681 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1682 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1683 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1684 * @retval HAL status
<> 144:ef7eb2e8f9f7 1685 */
<> 144:ef7eb2e8f9f7 1686 HAL_StatusTypeDef HAL_LTDC_EnableCLUT_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1687 {
AnnaBridge 167:e84263d55307 1688 /* Check the parameters */
AnnaBridge 167:e84263d55307 1689 assert_param(IS_LTDC_LAYER(LayerIdx));
<> 144:ef7eb2e8f9f7 1690
<> 144:ef7eb2e8f9f7 1691 /* Process locked */
<> 144:ef7eb2e8f9f7 1692 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1693
<> 144:ef7eb2e8f9f7 1694 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1695 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1696
<> 144:ef7eb2e8f9f7 1697 /* Disable LTDC color lookup table by setting CLUTEN bit */
<> 144:ef7eb2e8f9f7 1698 LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_CLUTEN;
<> 144:ef7eb2e8f9f7 1699
AnnaBridge 167:e84263d55307 1700 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1701
<> 144:ef7eb2e8f9f7 1702 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1703 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1704
<> 144:ef7eb2e8f9f7 1705 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1706 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1707
<> 144:ef7eb2e8f9f7 1708 return HAL_OK;
<> 144:ef7eb2e8f9f7 1709 }
<> 144:ef7eb2e8f9f7 1710
<> 144:ef7eb2e8f9f7 1711 /**
<> 144:ef7eb2e8f9f7 1712 * @brief Disable the color lookup table without reloading.
AnnaBridge 167:e84263d55307 1713 * Variant of the function HAL_LTDC_DisableCLUT without immediate reload.
AnnaBridge 167:e84263d55307 1714 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1715 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1716 * @param LayerIdx LTDC Layer index.
<> 144:ef7eb2e8f9f7 1717 * This parameter can be one of the following values:
AnnaBridge 167:e84263d55307 1718 * LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1719 * @retval HAL status
<> 144:ef7eb2e8f9f7 1720 */
<> 144:ef7eb2e8f9f7 1721 HAL_StatusTypeDef HAL_LTDC_DisableCLUT_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1722 {
AnnaBridge 167:e84263d55307 1723 /* Check the parameters */
AnnaBridge 167:e84263d55307 1724 assert_param(IS_LTDC_LAYER(LayerIdx));
<> 144:ef7eb2e8f9f7 1725
<> 144:ef7eb2e8f9f7 1726 /* Process locked */
<> 144:ef7eb2e8f9f7 1727 __HAL_LOCK(hltdc);
<> 144:ef7eb2e8f9f7 1728
<> 144:ef7eb2e8f9f7 1729 /* Change LTDC peripheral state */
<> 144:ef7eb2e8f9f7 1730 hltdc->State = HAL_LTDC_STATE_BUSY;
<> 144:ef7eb2e8f9f7 1731
<> 144:ef7eb2e8f9f7 1732 /* Disable LTDC color lookup table by setting CLUTEN bit */
<> 144:ef7eb2e8f9f7 1733 LTDC_LAYER(hltdc, LayerIdx)->CR &= ~(uint32_t)LTDC_LxCR_CLUTEN;
<> 144:ef7eb2e8f9f7 1734
AnnaBridge 167:e84263d55307 1735 /* Do not set the Immediate Reload */
<> 144:ef7eb2e8f9f7 1736
<> 144:ef7eb2e8f9f7 1737 /* Change the LTDC state*/
<> 144:ef7eb2e8f9f7 1738 hltdc->State = HAL_LTDC_STATE_READY;
<> 144:ef7eb2e8f9f7 1739
<> 144:ef7eb2e8f9f7 1740 /* Process unlocked */
<> 144:ef7eb2e8f9f7 1741 __HAL_UNLOCK(hltdc);
<> 144:ef7eb2e8f9f7 1742
<> 144:ef7eb2e8f9f7 1743 return HAL_OK;
<> 144:ef7eb2e8f9f7 1744 }
<> 144:ef7eb2e8f9f7 1745
<> 144:ef7eb2e8f9f7 1746 /**
<> 144:ef7eb2e8f9f7 1747 * @}
<> 144:ef7eb2e8f9f7 1748 */
<> 144:ef7eb2e8f9f7 1749
<> 144:ef7eb2e8f9f7 1750 /** @defgroup LTDC_Exported_Functions_Group4 Peripheral State and Errors functions
<> 144:ef7eb2e8f9f7 1751 * @brief Peripheral State and Errors functions
<> 144:ef7eb2e8f9f7 1752 *
<> 144:ef7eb2e8f9f7 1753 @verbatim
<> 144:ef7eb2e8f9f7 1754 ===============================================================================
<> 144:ef7eb2e8f9f7 1755 ##### Peripheral State and Errors functions #####
<> 144:ef7eb2e8f9f7 1756 ===============================================================================
<> 144:ef7eb2e8f9f7 1757 [..]
<> 144:ef7eb2e8f9f7 1758 This subsection provides functions allowing to
AnnaBridge 167:e84263d55307 1759 (+) Check the LTDC handle state.
AnnaBridge 167:e84263d55307 1760 (+) Get the LTDC handle error code.
<> 144:ef7eb2e8f9f7 1761
<> 144:ef7eb2e8f9f7 1762 @endverbatim
<> 144:ef7eb2e8f9f7 1763 * @{
<> 144:ef7eb2e8f9f7 1764 */
<> 144:ef7eb2e8f9f7 1765
<> 144:ef7eb2e8f9f7 1766 /**
AnnaBridge 167:e84263d55307 1767 * @brief Return the LTDC handle state.
AnnaBridge 167:e84263d55307 1768 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1769 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 1770 * @retval HAL state
<> 144:ef7eb2e8f9f7 1771 */
<> 144:ef7eb2e8f9f7 1772 HAL_LTDC_StateTypeDef HAL_LTDC_GetState(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 1773 {
<> 144:ef7eb2e8f9f7 1774 return hltdc->State;
<> 144:ef7eb2e8f9f7 1775 }
<> 144:ef7eb2e8f9f7 1776
<> 144:ef7eb2e8f9f7 1777 /**
AnnaBridge 167:e84263d55307 1778 * @brief Return the LTDC handle error code.
AnnaBridge 167:e84263d55307 1779 * @param hltdc pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1780 * the configuration information for the LTDC.
<> 144:ef7eb2e8f9f7 1781 * @retval LTDC Error Code
<> 144:ef7eb2e8f9f7 1782 */
<> 144:ef7eb2e8f9f7 1783 uint32_t HAL_LTDC_GetError(LTDC_HandleTypeDef *hltdc)
<> 144:ef7eb2e8f9f7 1784 {
<> 144:ef7eb2e8f9f7 1785 return hltdc->ErrorCode;
<> 144:ef7eb2e8f9f7 1786 }
<> 144:ef7eb2e8f9f7 1787
<> 144:ef7eb2e8f9f7 1788 /**
<> 144:ef7eb2e8f9f7 1789 * @}
<> 144:ef7eb2e8f9f7 1790 */
<> 144:ef7eb2e8f9f7 1791
<> 144:ef7eb2e8f9f7 1792 /**
AnnaBridge 167:e84263d55307 1793 * @}
AnnaBridge 167:e84263d55307 1794 */
AnnaBridge 167:e84263d55307 1795
AnnaBridge 167:e84263d55307 1796 /** @defgroup LTDC_Private_Functions LTDC Private Functions
AnnaBridge 167:e84263d55307 1797 * @{
AnnaBridge 167:e84263d55307 1798 */
AnnaBridge 167:e84263d55307 1799
AnnaBridge 167:e84263d55307 1800 /**
AnnaBridge 167:e84263d55307 1801 * @brief Configure the LTDC peripheral
AnnaBridge 167:e84263d55307 1802 * @param hltdc Pointer to a LTDC_HandleTypeDef structure that contains
<> 144:ef7eb2e8f9f7 1803 * the configuration information for the LTDC.
AnnaBridge 167:e84263d55307 1804 * @param pLayerCfg Pointer LTDC Layer Configuration structure
AnnaBridge 167:e84263d55307 1805 * @param LayerIdx LTDC Layer index.
AnnaBridge 167:e84263d55307 1806 * This parameter can be one of the following values: LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1)
<> 144:ef7eb2e8f9f7 1807 * @retval None
<> 144:ef7eb2e8f9f7 1808 */
<> 144:ef7eb2e8f9f7 1809 static void LTDC_SetConfig(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx)
<> 144:ef7eb2e8f9f7 1810 {
<> 144:ef7eb2e8f9f7 1811 uint32_t tmp = 0U;
<> 144:ef7eb2e8f9f7 1812 uint32_t tmp1 = 0U;
<> 144:ef7eb2e8f9f7 1813 uint32_t tmp2 = 0U;
<> 144:ef7eb2e8f9f7 1814
AnnaBridge 167:e84263d55307 1815 /* Configure the horizontal start and stop position */
<> 144:ef7eb2e8f9f7 1816 tmp = ((pLayerCfg->WindowX1 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U)) << 16U);
<> 144:ef7eb2e8f9f7 1817 LTDC_LAYER(hltdc, LayerIdx)->WHPCR &= ~(LTDC_LxWHPCR_WHSTPOS | LTDC_LxWHPCR_WHSPPOS);
<> 144:ef7eb2e8f9f7 1818 LTDC_LAYER(hltdc, LayerIdx)->WHPCR = ((pLayerCfg->WindowX0 + ((hltdc->Instance->BPCR & LTDC_BPCR_AHBP) >> 16U) + 1U) | tmp);
<> 144:ef7eb2e8f9f7 1819
AnnaBridge 167:e84263d55307 1820 /* Configure the vertical start and stop position */
<> 144:ef7eb2e8f9f7 1821 tmp = ((pLayerCfg->WindowY1 + (hltdc->Instance->BPCR & LTDC_BPCR_AVBP)) << 16U);
<> 144:ef7eb2e8f9f7 1822 LTDC_LAYER(hltdc, LayerIdx)->WVPCR &= ~(LTDC_LxWVPCR_WVSTPOS | LTDC_LxWVPCR_WVSPPOS);
<> 144:ef7eb2e8f9f7 1823 LTDC_LAYER(hltdc, LayerIdx)->WVPCR = ((pLayerCfg->WindowY0 + (hltdc->Instance->BPCR & LTDC_BPCR_AVBP) + 1U) | tmp);
<> 144:ef7eb2e8f9f7 1824
<> 144:ef7eb2e8f9f7 1825 /* Specifies the pixel format */
<> 144:ef7eb2e8f9f7 1826 LTDC_LAYER(hltdc, LayerIdx)->PFCR &= ~(LTDC_LxPFCR_PF);
<> 144:ef7eb2e8f9f7 1827 LTDC_LAYER(hltdc, LayerIdx)->PFCR = (pLayerCfg->PixelFormat);
<> 144:ef7eb2e8f9f7 1828
AnnaBridge 167:e84263d55307 1829 /* Configure the default color values */
<> 144:ef7eb2e8f9f7 1830 tmp = ((uint32_t)(pLayerCfg->Backcolor.Green) << 8U);
<> 144:ef7eb2e8f9f7 1831 tmp1 = ((uint32_t)(pLayerCfg->Backcolor.Red) << 16U);
<> 144:ef7eb2e8f9f7 1832 tmp2 = (pLayerCfg->Alpha0 << 24U);
<> 144:ef7eb2e8f9f7 1833 LTDC_LAYER(hltdc, LayerIdx)->DCCR &= ~(LTDC_LxDCCR_DCBLUE | LTDC_LxDCCR_DCGREEN | LTDC_LxDCCR_DCRED | LTDC_LxDCCR_DCALPHA);
<> 144:ef7eb2e8f9f7 1834 LTDC_LAYER(hltdc, LayerIdx)->DCCR = (pLayerCfg->Backcolor.Blue | tmp | tmp1 | tmp2);
<> 144:ef7eb2e8f9f7 1835
<> 144:ef7eb2e8f9f7 1836 /* Specifies the constant alpha value */
<> 144:ef7eb2e8f9f7 1837 LTDC_LAYER(hltdc, LayerIdx)->CACR &= ~(LTDC_LxCACR_CONSTA);
<> 144:ef7eb2e8f9f7 1838 LTDC_LAYER(hltdc, LayerIdx)->CACR = (pLayerCfg->Alpha);
<> 144:ef7eb2e8f9f7 1839
<> 144:ef7eb2e8f9f7 1840 /* Specifies the blending factors */
<> 144:ef7eb2e8f9f7 1841 LTDC_LAYER(hltdc, LayerIdx)->BFCR &= ~(LTDC_LxBFCR_BF2 | LTDC_LxBFCR_BF1);
<> 144:ef7eb2e8f9f7 1842 LTDC_LAYER(hltdc, LayerIdx)->BFCR = (pLayerCfg->BlendingFactor1 | pLayerCfg->BlendingFactor2);
<> 144:ef7eb2e8f9f7 1843
AnnaBridge 167:e84263d55307 1844 /* Configure the color frame buffer start address */
<> 144:ef7eb2e8f9f7 1845 LTDC_LAYER(hltdc, LayerIdx)->CFBAR &= ~(LTDC_LxCFBAR_CFBADD);
<> 144:ef7eb2e8f9f7 1846 LTDC_LAYER(hltdc, LayerIdx)->CFBAR = (pLayerCfg->FBStartAdress);
<> 144:ef7eb2e8f9f7 1847
<> 144:ef7eb2e8f9f7 1848 if(pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_ARGB8888)
<> 144:ef7eb2e8f9f7 1849 {
<> 144:ef7eb2e8f9f7 1850 tmp = 4U;
<> 144:ef7eb2e8f9f7 1851 }
<> 144:ef7eb2e8f9f7 1852 else if (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_RGB888)
<> 144:ef7eb2e8f9f7 1853 {
<> 144:ef7eb2e8f9f7 1854 tmp = 3U;
<> 144:ef7eb2e8f9f7 1855 }
<> 144:ef7eb2e8f9f7 1856 else if((pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_ARGB4444) || \
<> 144:ef7eb2e8f9f7 1857 (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_RGB565) || \
<> 144:ef7eb2e8f9f7 1858 (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_ARGB1555) || \
<> 144:ef7eb2e8f9f7 1859 (pLayerCfg->PixelFormat == LTDC_PIXEL_FORMAT_AL88))
<> 144:ef7eb2e8f9f7 1860 {
<> 144:ef7eb2e8f9f7 1861 tmp = 2U;
<> 144:ef7eb2e8f9f7 1862 }
<> 144:ef7eb2e8f9f7 1863 else
<> 144:ef7eb2e8f9f7 1864 {
<> 144:ef7eb2e8f9f7 1865 tmp = 1U;
<> 144:ef7eb2e8f9f7 1866 }
<> 144:ef7eb2e8f9f7 1867
AnnaBridge 167:e84263d55307 1868 /* Configure the color frame buffer pitch in byte */
<> 144:ef7eb2e8f9f7 1869 LTDC_LAYER(hltdc, LayerIdx)->CFBLR &= ~(LTDC_LxCFBLR_CFBLL | LTDC_LxCFBLR_CFBP);
<> 144:ef7eb2e8f9f7 1870 LTDC_LAYER(hltdc, LayerIdx)->CFBLR = (((pLayerCfg->ImageWidth * tmp) << 16U) | (((pLayerCfg->WindowX1 - pLayerCfg->WindowX0) * tmp) + 3U));
<> 144:ef7eb2e8f9f7 1871
AnnaBridge 167:e84263d55307 1872 /* Configure the frame buffer line number */
<> 144:ef7eb2e8f9f7 1873 LTDC_LAYER(hltdc, LayerIdx)->CFBLNR &= ~(LTDC_LxCFBLNR_CFBLNBR);
<> 144:ef7eb2e8f9f7 1874 LTDC_LAYER(hltdc, LayerIdx)->CFBLNR = (pLayerCfg->ImageHeight);
<> 144:ef7eb2e8f9f7 1875
<> 144:ef7eb2e8f9f7 1876 /* Enable LTDC_Layer by setting LEN bit */
<> 144:ef7eb2e8f9f7 1877 LTDC_LAYER(hltdc, LayerIdx)->CR |= (uint32_t)LTDC_LxCR_LEN;
<> 144:ef7eb2e8f9f7 1878 }
<> 144:ef7eb2e8f9f7 1879
<> 144:ef7eb2e8f9f7 1880 /**
<> 144:ef7eb2e8f9f7 1881 * @}
<> 144:ef7eb2e8f9f7 1882 */
<> 144:ef7eb2e8f9f7 1883 #endif /* STM32F429xx || STM32F439xx || STM32F469xx || STM32F479xx */
<> 144:ef7eb2e8f9f7 1884 #endif /* HAL_LTDC_MODULE_ENABLED */
AnnaBridge 167:e84263d55307 1885
<> 144:ef7eb2e8f9f7 1886 /**
<> 144:ef7eb2e8f9f7 1887 * @}
<> 144:ef7eb2e8f9f7 1888 */
<> 144:ef7eb2e8f9f7 1889
<> 144:ef7eb2e8f9f7 1890 /**
<> 144:ef7eb2e8f9f7 1891 * @}
<> 144:ef7eb2e8f9f7 1892 */
<> 144:ef7eb2e8f9f7 1893
<> 144:ef7eb2e8f9f7 1894 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/