1 /**
2   ******************************************************************************
3   * @file    stm32n6xx_hal_ltdc.h
4   * @author  MCD Application Team
5   * @brief   Header file of LTDC HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2023 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32N6xx_HAL_LTDC_H
21 #define STM32N6xx_HAL_LTDC_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32n6xx_hal_def.h"
29 
30 #if defined (LTDC)
31 
32 /** @addtogroup STM32N6xx_HAL_Driver
33   * @{
34   */
35 
36 /** @defgroup LTDC LTDC
37   * @brief LTDC HAL module driver
38   * @{
39   */
40 
41 /* Exported types ------------------------------------------------------------*/
42 /** @defgroup LTDC_Exported_Types LTDC Exported Types
43   * @{
44   */
45 #define MAX_LAYER  2U
46 
47 /**
48   * @brief  LTDC color structure definition
49   */
50 typedef struct
51 {
52   uint8_t Blue;                    /*!< Configures the blue value.
53                                         This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */
54 
55   uint8_t Green;                   /*!< Configures the green value.
56                                         This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */
57 
58   uint8_t Red;                     /*!< Configures the red value.
59                                         This parameter must be a number between Min_Data = 0x00 and Max_Data = 0xFF. */
60 
61   uint8_t Reserved;                /*!< Reserved 0xFF */
62 } LTDC_ColorTypeDef;
63 
64 /**
65   * @brief  LTDC Init structure definition
66   */
67 typedef struct
68 {
69   uint32_t            HSPolarity;                /*!< configures the horizontal synchronization polarity.
70                                                       This parameter can be one value of @ref LTDC_HS_POLARITY */
71 
72   uint32_t            VSPolarity;                /*!< configures the vertical synchronization polarity.
73                                                       This parameter can be one value of @ref LTDC_VS_POLARITY */
74 
75   uint32_t            DEPolarity;                /*!< configures the data enable polarity.
76                                                       This parameter can be one of value of @ref LTDC_DE_POLARITY */
77 
78   uint32_t            PCPolarity;                /*!< configures the pixel clock polarity.
79                                                       This parameter can be one of value of @ref LTDC_PC_POLARITY */
80 
81   uint32_t            HorizontalSync;            /*!< configures the number of Horizontal synchronization width.
82                                                       This parameter must be a number between
83                                                       Min_Data = 0x000 and Max_Data = 0xFFF. */
84 
85   uint32_t            VerticalSync;              /*!< configures the number of Vertical synchronization height.
86                                                       This parameter must be a number between
87                                                       Min_Data = 0x000 and Max_Data = 0x7FF. */
88 
89   uint32_t            AccumulatedHBP;            /*!< configures the accumulated horizontal back porch width.
90                                                       This parameter must be a number between
91                                                       Min_Data = LTDC_HorizontalSync and Max_Data = 0xFFF. */
92 
93   uint32_t            AccumulatedVBP;            /*!< configures the accumulated vertical back porch height.
94                                                       This parameter must be a number between
95                                                       Min_Data = LTDC_VerticalSync and Max_Data = 0x7FF. */
96 
97   uint32_t            AccumulatedActiveW;        /*!< configures the accumulated active width.
98                                                       This parameter must be a number between
99                                                       Min_Data = LTDC_AccumulatedHBP and Max_Data = 0xFFF. */
100 
101   uint32_t            AccumulatedActiveH;        /*!< configures the accumulated active height.
102                                                       This parameter must be a number between
103                                                       Min_Data = LTDC_AccumulatedVBP and Max_Data = 0x7FF. */
104 
105   uint32_t            TotalWidth;                /*!< configures the total width.
106                                                       This parameter must be a number between
107                                                       Min_Data = LTDC_AccumulatedActiveW and Max_Data = 0xFFF. */
108 
109   uint32_t            TotalHeigh;                /*!< configures the total height.
110                                                       This parameter must be a number between
111                                                       Min_Data = LTDC_AccumulatedActiveH and Max_Data = 0x7FF. */
112 
113   LTDC_ColorTypeDef   Backcolor;                 /*!< Configures the background color. */
114 } LTDC_InitTypeDef;
115 
116 /**
117   * @brief  LTDC Layer structure definition
118   */
119 typedef struct
120 {
121   uint32_t WindowX0;                   /*!< Configures the Window Horizontal Start Position.
122                                             This parameter must be a number between
123                                             Min_Data = 0x000 and Max_Data = 0xFFF. */
124 
125   uint32_t WindowX1;                   /*!< Configures the Window Horizontal Stop Position.
126                                             This parameter must be a number between
127                                             Min_Data = 0x000 and Max_Data = 0xFFF. */
128 
129   uint32_t WindowY0;                   /*!< Configures the Window vertical Start Position.
130                                             This parameter must be a number between
131                                             Min_Data = 0x000 and Max_Data = 0x7FF. */
132 
133   uint32_t WindowY1;                   /*!< Configures the Window vertical Stop Position.
134                                             This parameter must be a number between
135                                             Min_Data = 0x0000 and Max_Data = 0x7FF. */
136 
137   uint32_t PixelFormat;                /*!< Specifies the pixel format.
138                                             This parameter can be one of value of @ref LTDC_Pixelformat */
139 
140   uint32_t Alpha;                      /*!< Specifies the constant alpha used for blending.
141                                             This parameter must be a number between
142                                             Min_Data = 0x00 and Max_Data = 0xFF. */
143 
144   uint32_t Alpha0;                     /*!< Configures the default alpha value.
145                                             This parameter must be a number between
146                                             Min_Data = 0x00 and Max_Data = 0xFF. */
147 
148   uint32_t BlendingFactor1;            /*!< Select the blending factor 1.
149                                             This parameter can be one of value of @ref LTDC_BlendingFactor1 */
150 
151   uint32_t BlendingFactor2;            /*!< Select the blending factor 2.
152                                             This parameter can be one of value of @ref LTDC_BlendingFactor2 */
153 
154   uint32_t FBStartAdress;              /*!< Configures the color frame buffer address */
155 
156   uint32_t ImageWidth;                 /*!< Configures the color frame buffer line length.
157                                             This parameter must be a number between
158                                             Min_Data = 0x0000 and Max_Data = 0x1FFF. */
159 
160   uint32_t ImageHeight;                /*!< Specifies the number of line in frame buffer.
161                                             This parameter must be a number between
162                                             Min_Data = 0x000 and Max_Data = 0x7FF. */
163 
164   LTDC_ColorTypeDef   Backcolor;       /*!< Configures the layer background color. */
165 } LTDC_LayerCfgTypeDef;
166 
167 /**
168   * @brief  LTDC Flexible Layer structure definition
169   */
170 typedef struct
171 {
172   uint32_t WindowX0;                   /*!< Configures the Window Horizontal Start Position.
173                                             This parameter must be a number between
174                                             Min_Data = 0x000 and Max_Data = 0xFFF. */
175 
176   uint32_t WindowX1;                   /*!< Configures the Window Horizontal Stop Position.
177                                             This parameter must be a number between
178                                             Min_Data = 0x000 and Max_Data = 0xFFF. */
179 
180   uint32_t WindowY0;                   /*!< Configures the Window vertical Start Position.
181                                             This parameter must be a number between
182                                             Min_Data = 0x000 and Max_Data = 0x7FF. */
183 
184   uint32_t WindowY1;                   /*!< Configures the Window vertical Stop Position.
185                                             This parameter must be a number between
186                                             Min_Data = 0x0000 and Max_Data = 0x7FF. */
187 
188   uint32_t Alpha;                      /*!< Specifies the constant alpha used for blending.
189                                             This parameter must be a number between
190                                             Min_Data = 0x00 and Max_Data = 0xFF. */
191 
192   uint32_t Alpha0;                     /*!< Configures the default alpha value.
193                                             This parameter must be a number between
194                                             Min_Data = 0x00 and Max_Data = 0xFF. */
195 
196   uint32_t BlendingFactor1;            /*!< Select the blending factor 1.
197                                             This parameter can be one of value of @ref LTDC_BlendingFactor1 */
198 
199   uint32_t BlendingFactor2;            /*!< Select the blending factor 2.
200                                             This parameter can be one of value of @ref LTDC_BlendingFactor2 */
201 
202   uint32_t ImageWidth;                 /*!< Configures the color frame buffer line length.
203                                             This parameter must be a number between
204                                             Min_Data = 0x0000 and Max_Data = 0x1FFF. */
205 
206   uint32_t ImageHeight;                /*!< Specifies the number of line in frame buffer.
207                                             This parameter must be a number between
208                                             Min_Data = 0x000 and Max_Data = 0x7FF. */
209 
210   LTDC_ColorTypeDef   Backcolor;       /*!< Configures the layer background color. */
211 } LTDC_LayerTypeDef;
212 
213 /**
214   * @brief  LTDC Flexible ARGB format structure definition
215   */
216 typedef struct
217 {
218   uint32_t PixelSize;          /*!< Value of ARGB Pixel size. Could be a value of LTDC_ARGB_SIZE
219                                   This parameter can be one of value of @ref LTDC_ARGB_SIZE                     */
220 
221   uint32_t AlphaPos;           /*!< Position of the Alpha component inside the pixel memory word (in bits)
222                                   This parameter must be a number between Min_Data = 0x000 and Max_Data = 0x1F. */
223 
224   uint32_t RedPos;             /*!< Position of the Red component inside the pixel memory word (in bits)
225                                   This parameter must be a number between Min_Data = 0x000 and Max_Data = 0x1F. */
226 
227   uint32_t GreenPos;           /*!< Position of the Green component inside the pixel memory word (in bits)
228                                   This parameter must be a number between Min_Data = 0x000 and Max_Data = 0x1F. */
229 
230   uint32_t BluePos;            /*!< Position of the Blue component inside the pixel memory word (in bits)
231                                   This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xF.   */
232 
233   uint32_t AlphaWidth;         /*!< Width of the Alpha component in bits
234                                   This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xF.   */
235 
236   uint32_t RedWidth;           /*!< Width of the Red component in bits
237                                   This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xF.   */
238 
239   uint32_t GreenWidth;         /*!< Width of the Green component in bits
240                                   This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xF.   */
241 
242   uint32_t BlueWidth;          /*!< Width of the Blue component in bits
243                                   This parameter must be a number between Min_Data = 0x0 and Max_Data = 0xF.   */
244 } LTDC_FlexARGBTypeDef;
245 
246 /**
247   * @brief  LTDC Layer Flexible ARGB format structure definition
248   */
249 typedef struct
250 {
251   LTDC_LayerTypeDef Layer;          /*!< Pointer to LTDC_LayerTypeDef structure     */
252   LTDC_FlexARGBTypeDef FlexARGB;    /*!< Pointer to LTDC_FlexARGBTypeDef structure  */
253   uint32_t ARGBAddress;              /*!< Configures the color frame buffer address  */
254 } LTDC_LayerFlexARGBTypeDef;
255 
256 /**
257   * @brief  LTDC Flexible YUV format structure definition
258   */
259 typedef struct
260 {
261   uint32_t YUVOrder;             /*!< Y/UV order.
262                                       This parameter can be one of value of @ref LTDC_YUV_ORDER        */
263 
264   uint32_t LuminanceOrder;       /*!< Y1/Y2 order.
265                                       This parameter can be one of value of @ref LTDC_LUMINANCE_ORDER  */
266 
267   uint32_t ChrominanceOrder;     /*!< U/V order.
268                                       This parameter can be one of value of @ref LTDC_CHROMINANCE_ORDER */
269 
270   uint32_t LuminanceRescale;     /*!< Enable or disable luminance rescale.
271                                       This parameter can be one of value of @ref LTDC_LUMINANCE_RANGE   */
272 } LTDC_FlexYUVTypeDef;
273 
274 /**
275   * @brief  LTDC Flexible YUV coplanar structure definition
276   */
277 typedef struct
278 {
279   LTDC_LayerTypeDef Layer;             /*!< Pointer to LTDC_LayerTypeDef structure                           */
280 
281   LTDC_FlexYUVTypeDef FlexYUV;         /*!< Pointer to LTDC_FlexYUVTypeDef structure                         */
282 
283   uint32_t YUVAddress;                        /*!< YUV Frame Buffer address                                         */
284 
285   uint32_t ColorConverter;                    /*!< Configure the YUV to RGB conversion.
286                                                    This parameter can be one of value of @ref LTDC_YUV2RGBCONVERTOR */
287 } LTDC_LayerFlexYUVCoPlanarTypeDef;
288 
289 /**
290   * @brief  LTDC YUV Semiplanar addresses structure definition
291   */
292 typedef struct
293 {
294   uint32_t YAddress;     /*!< Y Frame Buffer address  */
295   uint32_t UVAddress;    /*!< UV Frame Buffer address */
296 } LTDC_YUVSemiPlanarAddressTypeDef;
297 
298 /**
299   * @brief  LTDC YUV Fullplanar addresses structure definition
300   */
301 typedef struct
302 {
303   uint32_t YAddress;    /*!< Y Frame Buffer address */
304   uint32_t UAddress;    /*!< U Frame Buffer address */
305   uint32_t VAddress;    /*!< V Frame Buffer address */
306 } LTDC_YUVFullPlanarAddressTypeDef;
307 
308 /**
309   * @brief  LTDC Layer Flexible YUV semi Planar structure definition
310   */
311 typedef struct
312 {
313   LTDC_LayerTypeDef Layer;                                  /*!< Pointer to LTDC_LayerTypeDef              */
314   LTDC_FlexYUVTypeDef FlexYUV;                              /*!< Pointer LTDC_FlexYUVTypeDef               */
315   LTDC_YUVSemiPlanarAddressTypeDef YUVSemiPlanarAddress;    /*!< Pointer LTDC_YUVSemiPlanarAddressTypeDef  */
316   uint32_t ColorConverter;                                    /*!< Configure the YUV to RGB conversion.
317                                                                   This parameter can be one of value
318                                                                   of @ref LTDC_YUV2RGBCONVERTOR              */
319 } LTDC_LayerFlexYUVSemiPlanarTypeDef;
320 
321 /**
322   * @brief  LTDC Layer Flexible YUV full Planar structure definition
323   */
324 typedef struct
325 {
326   LTDC_LayerTypeDef Layer;                                  /*!< Pointer to LTDC_LayerTypeDef              */
327   LTDC_FlexYUVTypeDef FlexYUV;                              /*!< Pointer LTDC_FlexYUVTypeDef               */
328   LTDC_YUVFullPlanarAddressTypeDef YUVFullPlanarAddress;    /*!< Pointer LTDC_YUVFullPlanarAddressTypeDef  */
329   uint32_t ColorConverter;                                    /*!< Configure the YUV to RGB conversion.
330                                                                    This parameter can be one of value
331                                                                    of @ref LTDC_YUV2RGBCONVERTOR              */
332 } LTDC_LayerFlexYUVFullPlanarTypeDef;
333 
334 /**
335   * @brief  HAL LTDC State structures definition
336   */
337 typedef enum
338 {
339   HAL_LTDC_STATE_RESET             = 0x00U,    /*!< LTDC not yet initialized or disabled */
340   HAL_LTDC_STATE_READY             = 0x01U,    /*!< LTDC initialized and ready for use   */
341   HAL_LTDC_STATE_BUSY              = 0x02U,    /*!< LTDC internal process is ongoing     */
342   HAL_LTDC_STATE_TIMEOUT           = 0x03U,    /*!< LTDC Timeout state                   */
343   HAL_LTDC_STATE_ERROR             = 0x04U     /*!< LTDC state error                     */
344 } HAL_LTDC_StateTypeDef;
345 
346 /**
347   * @brief  LTDC handle Structure definition
348   */
349 #if (USE_HAL_LTDC_REGISTER_CALLBACKS == 1)
350 typedef struct __LTDC_HandleTypeDef
351 #else
352 typedef struct
353 #endif /* USE_HAL_LTDC_REGISTER_CALLBACKS */
354 {
355   LTDC_TypeDef                *Instance;                /*!< LTDC Register base address                */
356 
357   LTDC_InitTypeDef            Init;                     /*!< LTDC parameters                           */
358 
359   LTDC_LayerCfgTypeDef        LayerCfg[MAX_LAYER];      /*!< LTDC Layers parameters                    */
360 
361   HAL_LockTypeDef             Lock;                     /*!< LTDC Lock                                 */
362 
363   __IO HAL_LTDC_StateTypeDef  State;                    /*!< LTDC state                                */
364 
365   __IO uint32_t               ErrorCode;                /*!< LTDC Error code                           */
366 
367 #if (USE_HAL_LTDC_REGISTER_CALLBACKS == 1)
368   void (* LineEventCallback)(struct __LTDC_HandleTypeDef *hltdc);     /*!< LTDC Line Event Callback    */
369   void (* ReloadEventCallback)(struct __LTDC_HandleTypeDef *hltdc);   /*!< LTDC Reload Event Callback  */
370   void (* ErrorCallback)(struct __LTDC_HandleTypeDef *hltdc);         /*!< LTDC Error Callback         */
371   void (* WarningEventCallback)(struct __LTDC_HandleTypeDef *hltdc);  /*!< LTDC Warning Event          */
372 
373   void (* MspInitCallback)(struct __LTDC_HandleTypeDef *hltdc);       /*!< LTDC Msp Init callback      */
374   void (* MspDeInitCallback)(struct __LTDC_HandleTypeDef *hltdc);     /*!< LTDC Msp DeInit callback    */
375 
376 #endif /* USE_HAL_LTDC_REGISTER_CALLBACKS */
377 
378 
379 } LTDC_HandleTypeDef;
380 
381 #if (USE_HAL_LTDC_REGISTER_CALLBACKS == 1)
382 /**
383   * @brief  HAL LTDC Callback ID enumeration definition
384   */
385 typedef enum
386 {
387   HAL_LTDC_MSPINIT_CB_ID            = 0x00U,    /*!< LTDC MspInit callback ID       */
388   HAL_LTDC_MSPDEINIT_CB_ID          = 0x01U,    /*!< LTDC MspDeInit callback ID     */
389 
390   HAL_LTDC_LINE_EVENT_CB_ID         = 0x02U,    /*!< LTDC Line Event Callback ID    */
391   HAL_LTDC_RELOAD_EVENT_CB_ID       = 0x03U,    /*!< LTDC Reload Callback ID        */
392   HAL_LTDC_WARNING_EVENT_CB_ID      = 0x08U,    /*!< LTDC Warning Event Callback ID */
393   HAL_LTDC_ERROR_CB_ID              = 0x04U     /*!< LTDC Error Callback ID         */
394 
395 } HAL_LTDC_CallbackIDTypeDef;
396 
397 /**
398   * @brief  HAL LTDC Callback pointer definition
399   */
400 typedef  void (*pLTDC_CallbackTypeDef)(LTDC_HandleTypeDef *hltdc);  /*!< pointer to an LTDC callback function */
401 
402 #endif /* USE_HAL_LTDC_REGISTER_CALLBACKS */
403 
404 /**
405   * @}
406   */
407 
408 /* Exported constants --------------------------------------------------------*/
409 /** @defgroup LTDC_Exported_Constants LTDC Exported Constants
410   * @{
411   */
412 
413 /** @defgroup LTDC_Error_Code LTDC Error Code
414   * @{
415   */
416 #define HAL_LTDC_ERROR_NONE               0x00000000U   /*!< LTDC No error             */
417 #define HAL_LTDC_ERROR_TE                 0x00000001U   /*!< LTDC Transfer error       */
418 #define HAL_LTDC_ERROR_FU                 0x00000002U   /*!< LTDC FIFO Underrun        */
419 #define HAL_LTDC_ERROR_CRC                0x00000004U   /*!< LTDC CRC error            */
420 #define HAL_LTDC_ERROR_TIMEOUT            0x00000020U   /*!< LTDC Timeout error        */
421 #if (USE_HAL_LTDC_REGISTER_CALLBACKS == 1)
422 #define  HAL_LTDC_ERROR_INVALID_CALLBACK  0x00000040U   /*!< LTDC Invalid Callback error  */
423 #endif /* USE_HAL_LTDC_REGISTER_CALLBACKS */
424 /**
425   * @}
426   */
427 
428 /** @defgroup LTDC_Layer LTDC Layer
429   * @{
430   */
431 #define LTDC_LAYER_1                      0U       /*!< LTDC Layer 1 */
432 #define LTDC_LAYER_2                      1U       /*!< LTDC Layer 2 */
433 /**
434   * @}
435   */
436 
437 /** @defgroup LTDC_HS_POLARITY LTDC HS POLARITY
438   * @{
439   */
440 #define LTDC_HSPOLARITY_AL                0U                    /*!< Horizontal Synchronization is active low. */
441 #define LTDC_HSPOLARITY_AH                LTDC_GCR_HSPOL        /*!< Horizontal Synchronization is active high. */
442 /**
443   * @}
444   */
445 
446 /** @defgroup LTDC_VS_POLARITY LTDC VS POLARITY
447   * @{
448   */
449 #define LTDC_VSPOLARITY_AL                0U                    /*!< Vertical Synchronization is active low. */
450 #define LTDC_VSPOLARITY_AH                LTDC_GCR_VSPOL        /*!< Vertical Synchronization is active high. */
451 /**
452   * @}
453   */
454 
455 /** @defgroup LTDC_DE_POLARITY LTDC DE POLARITY
456   * @{
457   */
458 #define LTDC_DEPOLARITY_AL                0U                    /*!< Data Enable, is active low. */
459 #define LTDC_DEPOLARITY_AH                LTDC_GCR_DEPOL        /*!< Data Enable, is active high. */
460 /**
461   * @}
462   */
463 
464 /** @defgroup LTDC_PC_POLARITY LTDC PC POLARITY
465   * @{
466   */
467 #define LTDC_PCPOLARITY_IPC               0U                    /*!< input pixel clock. */
468 #define LTDC_PCPOLARITY_IIPC              LTDC_GCR_PCPOL        /*!< inverted input pixel clock. */
469 /**
470   * @}
471   */
472 
473 /** @defgroup LTDC_SYNC LTDC SYNC
474   * @{
475   */
476 #define LTDC_HORIZONTALSYNC               (LTDC_SSCR_HSW >> 16U)    /*!< Horizontal synchronization width. */
477 #define LTDC_VERTICALSYNC                 LTDC_SSCR_VSH             /*!< Vertical synchronization height. */
478 /**
479   * @}
480   */
481 
482 /** @defgroup LTDC_BACK_COLOR LTDC BACK COLOR
483   * @{
484   */
485 #define LTDC_COLOR                        0x000000FFU   /*!< Color mask */
486 /**
487   * @}
488   */
489 
490 /** @defgroup LTDC_BlendingFactor1 LTDC Blending Factor1
491   * @{
492   */
493 #define LTDC_BLENDING_FACTOR1_CA          0x00000400U   /*!< Blending factor : Cte Alpha */
494 #define LTDC_BLENDING_FACTOR1_PAxCA       0x00000600U   /*!< Blending factor : Cte Alpha x Pixel Alpha*/
495 /**
496   * @}
497   */
498 
499 /** @defgroup LTDC_BlendingFactor2 LTDC Blending Factor2
500   * @{
501   */
502 #define LTDC_BLENDING_FACTOR2_CA          0x00000005U   /*!< Blending factor : Cte Alpha */
503 #define LTDC_BLENDING_FACTOR2_PAxCA       0x00000007U   /*!< Blending factor : Cte Alpha x Pixel Alpha*/
504 /**
505   * @}
506   */
507 
508 /** @defgroup LTDC_Pixelformat LTDC Pixel format
509   * @{
510   */
511 #define LTDC_PIXEL_FORMAT_ARGB8888     0x0U             /*!< ARGB8888 LTDC pixel format*/
512 #define LTDC_PIXEL_FORMAT_ABGR8888     0x1U             /*!< ABGR888  LTDC pixel format*/
513 #define LTDC_PIXEL_FORMAT_RGBA8888     0x2U             /*!< RGBA888  LTDC pixel format*/
514 #define LTDC_PIXEL_FORMAT_BGRA8888     0x3U             /*!< BGRA8888 LTDC pixel format*/
515 #define LTDC_PIXEL_FORMAT_RGB565       0x4U             /*!< RGB565   LTDC pixel format*/
516 #define LTDC_PIXEL_FORMAT_BGR565       0x5U             /*!< BGR565   LTDC pixel format*/
517 #define LTDC_PIXEL_FORMAT_RGB888       0x6U             /*!< RGB888   LTDC pixel format*/
518 #define LTDC_PIXEL_FORMAT_ARGB1555     0x7U             /*!< ARGB1555 LTDC pixel format*/
519 #define LTDC_PIXEL_FORMAT_ARGB4444     0x8U             /*!< ARGB4444 LTDC pixel format*/
520 #define LTDC_PIXEL_FORMAT_L8           0x9U             /*!< L8 LTDC pixel format      */
521 #define LTDC_PIXEL_FORMAT_AL44         0xAU             /*!< AL44 LTDC pixel format    */
522 #define LTDC_PIXEL_FORMAT_AL88         0xBU             /*!< AL88 LTDC pixel format    */
523 /**
524   * @}
525   */
526 
527 /** @defgroup LTDC_Mirror LTDC Mirror Configuration
528   * @{
529   */
530 #define LTDC_MIRROR_HORIZONTAL                       0U       /*!< Enable Horizontal Mirroring                  */
531 #define LTDC_MIRROR_VERTICAL                         1U       /*!< Enable Vertical Mirroring                    */
532 #define LTDC_MIRROR_HORIZONTAL_VERTICAL              2U       /*!< Enable Horizontal and vertical Mirroring     */
533 #define LTDC_MIRROR_NONE                             3U       /*!< Disable Horizontal and vertical Mirroring    */
534 /**
535   * @}
536   */
537 
538 /** @defgroup LTDC_ARGB_SIZE LTDC ARGB pixel size in bytes
539   * @{
540   */
541 #define LTDC_ARGB_PIXEL_SIZE_1_BYTE      0U       /*!<Custom ARGB with 1 byte per pixel          */
542 #define LTDC_ARGB_PIXEL_SIZE_2_BYTES     1U       /*!<Custom ARGB with 2 bytes per pixel         */
543 #define LTDC_ARGB_PIXEL_SIZE_3_BYTES     2U       /*!<Custom ARGB with 3 bytes per pixel         */
544 #define LTDC_ARGB_PIXEL_SIZE_4_BYTES     3U       /*!<Custom ARGB with 4 bytes per pixel         */
545 /**
546   * @}
547   */
548 
549 /** @defgroup LTDC_YUV_ORDER LTDC YUV order from LSB
550   * @{
551   */
552 #define LTDC_YUV_ORDER_LUMINANCE_FIRST   LTDC_LxPCR_YF     /*!<Luminance component first            */
553 #define LTDC_YUV_ORDER_CHROMINANCE_FIRST 0U                /*!<Chrominance component (U or V) first */
554 /**
555   * @}
556   */
557 
558 /** @defgroup LTDC_CHROMINANCE_ORDER LTDC chrominance order from LSB
559   * @{
560   */
561 #define LTDC_YUV_CHROMIANCE_ORDER_U_FIRST   LTDC_LxPCR_CBF    /*!<Chrominance order U first  */
562 #define LTDC_YUV_CHROMIANCE_ORDER_V_FIRST   0U                /*!<Chrominance order V first  */
563 /**
564   * @}
565   */
566 
567 /** @defgroup LTDC_LUMINANCE_ORDER LTDC luminance order from LSB
568   * @{
569   */
570 #define LTDC_YUV_LUMINANCE_ORDER_ODD_FIRST   LTDC_LxPCR_OF     /*!<Lumiance order Y1 then Y2    */
571 #define LTDC_YUV_LUMINANCE_ORDER_EVEN_FIRST  0U                /*!<Luminance order Y2 then Y1   */
572 /**
573   * @}
574   */
575 
576 /** @defgroup LTDC_LUMINANCE_RANGE LTDC luminance range
577   * @{
578   */
579 #define LTDC_YUV_LUMINANCE_RESCALE_ENABLE    LTDC_LxPCR_YREN   /*!< Rescale Luminance from [16-235] to [0-255] */
580 #define LTDC_YUV_LUMINANCE_RESCALE_DISABLE   0U                /*!< Luminance provided in range [0-255]        */
581 /**
582   * @}
583   */
584 
585 /** @defgroup LTDC_BLENDING_ORDER LTDC layers blending order
586   * @{
587   */
588 #define LTDC_BLENDING_ORDER_FOREGROUND    LTDC_LxBFCR_BOR   /*!<Layer set to Foreground during blending */
589 #define LTDC_BLENDING_ORDER_BACKGROUND    0U                /*!<Layer set to Background during blending  */
590 /**
591   * @}
592   */
593 
594 /** @defgroup LTDC_RGB_COMPONENT LTDC RGB component
595   * @{
596   */
597 #define LTDC_RGB_COMPONENT_RED   LTDC_GCCR_REN                                   /*!<Red component                   */
598 #define LTDC_RGB_COMPONENT_GREEN LTDC_GCCR_GEN                                   /*!<Green component                 */
599 #define LTDC_RGB_COMPONENT_BLUE  LTDC_GCCR_BEN                                   /*!<Blue component                  */
600 #define LTDC_RGB_COMPONENT_ALL   (LTDC_GCCR_REN | LTDC_GCCR_GEN | LTDC_GCCR_BEN) /*!<Red, Blue and Green components  */
601 /**
602   * @}
603   */
604 
605 /** @defgroup LTDC_DISPLAY LTDC Display
606   * @{
607   */
608 #define LTDC_OUT_RGB       0U                                                       /*!< Select RGB as output format (default)    */
609 #define LTDC_OUT_YUV_HDTV  (LTDC_EDCR_OCYEN  | LTDC_EDCR_OCYSEL)                    /*!< RGB converted to YUV using ITU-R BT.709  */
610 #define LTDC_OUT_YUV_SDTV  LTDC_EDCR_OCYEN                                          /*!< RGB converted to YUV using ITU-R BT.601  */
611 #define LTDC_OUT_YVU_HDTV  (LTDC_EDCR_OCYEN | LTDC_EDCR_OCYSEL | LTDC_EDCR_OCYCO)   /*!< RGB converted to YVU using ITU-R BT.709  */
612 #define LTDC_OUT_YVU_SDTV  (LTDC_EDCR_OCYEN | LTDC_EDCR_OCYCO)                      /*!< RGB converted to YVU using ITU-R BT.601  */
613 
614 
615 /**
616   * @}
617   */
618 /** @defgroup LTDC_YUV2RGBCONVERTOR LTDC YUV to RGB color convertor
619   * @{
620  */
621 #define LTDC_YUV2RGBCONVERTOR_BT601_REDUCED_RANGE  0U                /*!< Select ITU-R BT.601 as output format      */
622 #define LTDC_YUV2RGBCONVERTOR_BT709_REDUCED_RANGE  1U                /*!< Select ITU-R BT.709 as output format      */
623 #define LTDC_YUV2RGBCONVERTOR_BT601_FULL_RANGE     2U                /*!< Select RGB as output format               */
624 #define LTDC_YUV2RGBCONVERTOR_BT709_FULL_RANGE     3U                /*!< Select RGB as output format               */
625 /**
626   * @}
627   */
628 
629 /** @defgroup LTDC_Alpha LTDC Alpha
630   * @{
631   */
632 #define LTDC_ALPHA                        LTDC_LxCACR_CONSTA        /*!< LTDC Constant Alpha mask */
633 /**
634   * @}
635   */
636 
637 /** @defgroup LTDC_LAYER_Config LTDC LAYER Config
638   * @{
639   */
640 #define LTDC_STOPPOSITION                 (LTDC_LxWHPCR_WHSPPOS >> 16U) /*!< LTDC Layer stop position  */
641 #define LTDC_STARTPOSITION                LTDC_LxWHPCR_WHSTPOS          /*!< LTDC Layer start position */
642 
643 #define LTDC_COLOR_FRAME_BUFFER           LTDC_LxCFBLR_CFBLL            /*!< LTDC Layer Line length    */
644 #define LTDC_LINE_NUMBER                  LTDC_LxCFBLNR_CFBLNBR         /*!< LTDC Layer Line number    */
645 /**
646   * @}
647   */
648 
649 /** @defgroup LTDC_Interrupts LTDC Interrupts
650   * @{
651   */
652 #define LTDC_IT_LI                        LTDC_IER_LIE              /*!< LTDC Line Interrupt                  */
653 #define LTDC_IT_FU                        LTDC_IER_FUIE             /*!< LTDC FIFO Underrun Interrupt         */
654 #define LTDC_IT_TE                        LTDC_IER_TERRIE           /*!< LTDC Transfer Error Interrupt        */
655 #define LTDC_IT_RR                        LTDC_IER_RRIE             /*!< LTDC Register Reload Interrupt       */
656 #define LTDC_IT_CRC                       LTDC_IER_CRCIE            /*!< LTDC CRC error Interrupt             */
657 #define LTDC_IT_FUW                       LTDC_IER_FUWIE            /*!< LTDC FIFO Warning Underrun Interrupt */
658 /**
659   * @}
660   */
661 
662 /** @defgroup LTDC_Flags LTDC Flags
663   * @{
664   */
665 #define LTDC_FLAG_LI                      LTDC_ISR_LIF              /*!< LTDC Line Interrupt Flag             */
666 #define LTDC_FLAG_FU                      LTDC_ISR_FUIF             /*!< LTDC FIFO Underrun interrupt Flag    */
667 #define LTDC_FLAG_TE                      LTDC_ISR_TERRIF           /*!< LTDC Transfer Error interrupt Flag   */
668 #define LTDC_FLAG_RR                      LTDC_ISR_RRIF             /*!< LTDC Register Reload interrupt Flag  */
669 #define LTDC_FLAG_CRC                     LTDC_ISR_CRCIF            /*!< LTDC CRC error Interrupt             */
670 #define LTDC_FLAG_FUW                     LTDC_ISR_FUWIF            /*!< LTDC FIFO Warning Underrun Interrupt */
671 /**
672   * @}
673   */
674 
675 /** @defgroup LTDC_Reload_Type LTDC Reload Type
676   * @{
677   */
678 #define LTDC_RELOAD_IMMEDIATE             LTDC_SRCR_IMR             /*!< Immediate Reload */
679 #define LTDC_RELOAD_VERTICAL_BLANKING     LTDC_SRCR_VBR             /*!< Vertical Blanking Reload */
680 /**
681   * @}
682   */
683 
684 /**
685   * @}
686   */
687 
688 /* Exported macro ------------------------------------------------------------*/
689 /** @defgroup LTDC_Exported_Macros LTDC Exported Macros
690   * @{
691   */
692 
693 /** @brief Reset LTDC handle state.
694   * @param  __HANDLE__  LTDC handle
695   * @retval None
696   */
697 #if (USE_HAL_LTDC_REGISTER_CALLBACKS == 1)
698 #define __HAL_LTDC_RESET_HANDLE_STATE(__HANDLE__) do{                                                 \
699                                                       (__HANDLE__)->State = HAL_LTDC_STATE_RESET;     \
700                                                       (__HANDLE__)->MspInitCallback = NULL;           \
701                                                       (__HANDLE__)->MspDeInitCallback = NULL;         \
702                                                     } while(0)
703 #else
704 #define __HAL_LTDC_RESET_HANDLE_STATE(__HANDLE__) ((__HANDLE__)->State = HAL_LTDC_STATE_RESET)
705 #endif /*USE_HAL_LTDC_REGISTER_CALLBACKS */
706 
707 /**
708   * @brief  Enable the LTDC.
709   * @param  __HANDLE__  LTDC handle
710   * @retval None.
711   */
712 #define __HAL_LTDC_ENABLE(__HANDLE__)    ((__HANDLE__)->Instance->GCR |= LTDC_GCR_LTDCEN)
713 
714 /**
715   * @brief  Disable the LTDC.
716   * @param  __HANDLE__  LTDC handle
717   * @retval None.
718   */
719 #define __HAL_LTDC_DISABLE(__HANDLE__)   ((__HANDLE__)->Instance->GCR &= ~(LTDC_GCR_LTDCEN))
720 
721 /**
722   * @brief  Enable the LTDC Layer.
723   * @param  __HANDLE__  LTDC handle
724   * @param  __LAYER__   Specify the layer to be enabled.
725   *                     This parameter can be LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1).
726   * @retval None.
727   */
728 #define __HAL_LTDC_LAYER_ENABLE(__HANDLE__, __LAYER__)  ((LTDC_LAYER((__HANDLE__), (__LAYER__)))->CR\
729                                                          |= (uint32_t)LTDC_LxCR_LEN)
730 
731 /**
732   * @brief  Disable the LTDC Layer.
733   * @param  __HANDLE__  LTDC handle
734   * @param  __LAYER__   Specify the layer to be disabled.
735   *                     This parameter can be LTDC_LAYER_1 (0) or LTDC_LAYER_2 (1).
736   * @retval None.
737   */
738 #define __HAL_LTDC_LAYER_DISABLE(__HANDLE__, __LAYER__) ((LTDC_LAYER((__HANDLE__), (__LAYER__)))->CR\
739                                                          &= ~(uint32_t)LTDC_LxCR_LEN)
740 
741 /**
742   * @brief  Reload immediately all LTDC Layers.
743   * @param  __HANDLE__  LTDC handle
744   * @retval None.
745   */
746 #define __HAL_LTDC_RELOAD_IMMEDIATE_CONFIG(__HANDLE__)  ((__HANDLE__)->Instance->SRCR |= LTDC_SRCR_IMR)
747 
748 /**
749   * @brief  Reload during vertical blanking period all LTDC Layers.
750   * @param  __HANDLE__  LTDC handle
751   * @retval None.
752   */
753 #define __HAL_LTDC_VERTICAL_BLANKING_RELOAD_CONFIG(__HANDLE__)  ((__HANDLE__)->Instance->SRCR |= LTDC_SRCR_VBR)
754 
755 /* Interrupt & Flag management */
756 /**
757   * @brief  Get the LTDC pending flags.
758   * @param  __HANDLE__  LTDC handle
759   * @param  __FLAG__    Get the specified flag.
760   *          This parameter can be any combination of the following values:
761   *            @arg LTDC_FLAG_LI: Line Interrupt flag
762   *            @arg LTDC_FLAG_FU: FIFO Underrun Interrupt flag
763   *            @arg LTDC_FLAG_TE: Transfer Error interrupt flag
764   *            @arg LTDC_FLAG_RR: Register Reload Interrupt Flag
765   *            @arg LTDC_FLAG_CRC: LTDC CRC error interrupt flag
766   *            @arg LTDC_FLAG_FUW: FIFO Warning Underrun interrupt flag
767   * @retval The state of FLAG (SET or RESET).
768   */
769 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
770 #define __HAL_LTDC_GET_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR2 & (__FLAG__))
771 #else
772 #define __HAL_LTDC_GET_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ISR & (__FLAG__))
773 #endif /* __ARM_FEATURE_CMSE & __ARM_FEATURE_CMSE == 3U */
774 
775 /**
776   * @brief  Clears the LTDC pending flags.
777   * @param  __HANDLE__  LTDC handle
778   * @param  __FLAG__    Specify the flag to clear.
779   *          This parameter can be any combination of the following values:
780   *            @arg LTDC_FLAG_LI: Line Interrupt flag
781   *            @arg LTDC_FLAG_FU: FIFO Underrun Interrupt flag
782   *            @arg LTDC_FLAG_TE: Transfer Error interrupt flag
783   *            @arg LTDC_FLAG_RR: Register Reload Interrupt Flag
784   *            @arg LTDC_FLAG_CRC: LTDC CRC error Interrupt flag
785   *            @arg LTDC_FLAG_FUW: FIFO Warning Underrun Interrupt flag
786   * @retval None
787   */
788 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
789 #define __HAL_LTDC_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR2 = (__FLAG__))
790 #else
791 #define __HAL_LTDC_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
792 #endif /* __ARM_FEATURE_CMSE & __ARM_FEATURE_CMSE == 3U */
793 
794 /**
795   * @brief  Enables the specified LTDC interrupts.
796   * @param  __HANDLE__  LTDC handle
797   * @param __INTERRUPT__ Specify the LTDC interrupt sources to be enabled.
798   *          This parameter can be any combination of the following values:
799   *            @arg LTDC_IT_LI: Line Interrupt flag
800   *            @arg LTDC_IT_FU: FIFO Underrun Interrupt flag
801   *            @arg LTDC_IT_TE: Transfer Error interrupt flag
802   *            @arg LTDC_IT_RR: Register Reload Interrupt Flag
803   *            @arg LTDC_IT_CRC: LTDC CRC error Interrupt
804   *            @arg LTDC_IT_FUW: FIFO Warning Underrun Interrupt
805   * @retval None
806   */
807 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
808 #define __HAL_LTDC_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER2 |= (__INTERRUPT__))
809 #else
810 #define __HAL_LTDC_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER |= (__INTERRUPT__))
811 #endif /* __ARM_FEATURE_CMSE & __ARM_FEATURE_CMSE == 3U */
812 
813 /**
814   * @brief  Disables the specified LTDC interrupts.
815   * @param  __HANDLE__  LTDC handle
816   * @param __INTERRUPT__ Specify the LTDC interrupt sources to be disabled.
817   *          This parameter can be any combination of the following values:
818   *            @arg LTDC_IT_LI: Line Interrupt flag
819   *            @arg LTDC_IT_FU: FIFO Underrun Interrupt flag
820   *            @arg LTDC_IT_TE: Transfer Error interrupt flag
821   *            @arg LTDC_IT_RR: Register Reload Interrupt Flag
822   *            @arg LTDC_IT_CRC: LTDC CRC error Interrupt
823   *            @arg LTDC_IT_FUW: FIFO Underrun Warning Interrupt
824   * @retval None
825   */
826 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
827 #define __HAL_LTDC_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER2 &= ~(__INTERRUPT__))
828 #else
829 #define __HAL_LTDC_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER &= ~(__INTERRUPT__))
830 #endif /* __ARM_FEATURE_CMSE & __ARM_FEATURE_CMSE == 3U */
831 
832 /**
833   * @brief  Check whether the specified LTDC interrupt has occurred or not.
834   * @param  __HANDLE__  LTDC handle
835   * @param __INTERRUPT__ Specify the LTDC interrupt source to check.
836   *          This parameter can be one of the following values:
837   *            @arg LTDC_IT_LI: Line Interrupt flag
838   *            @arg LTDC_IT_FU: FIFO Underrun Interrupt flag
839   *            @arg LTDC_IT_TE: Transfer Error interrupt flag
840   *            @arg LTDC_IT_RR: Register Reload Interrupt Flag
841   *            @arg LTDC_IT_CRC: LTDC CRC error Interrupt
842   *            @arg LTDC_IT_FUW: FIFO Underrun Warning Interrupt
843   * @retval The state of INTERRUPT (SET or RESET).
844   */
845 #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U)
846 #define __HAL_LTDC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER2 & (__INTERRUPT__))
847 #else
848 #define __HAL_LTDC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->IER & (__INTERRUPT__))
849 #endif /* __ARM_FEATURE_CMSE & __ARM_FEATURE_CMSE == 3U */
850 /**
851   * @}
852   */
853 
854 /* Include LTDC HAL Extension module */
855 #include "stm32n6xx_hal_ltdc_ex.h"
856 
857 /* Exported functions --------------------------------------------------------*/
858 /** @addtogroup LTDC_Exported_Functions
859   * @{
860   */
861 /** @addtogroup LTDC_Exported_Functions_Group1
862   * @{
863   */
864 /* Initialization and de-initialization functions *****************************/
865 HAL_StatusTypeDef HAL_LTDC_Init(LTDC_HandleTypeDef *hltdc);
866 HAL_StatusTypeDef HAL_LTDC_DeInit(LTDC_HandleTypeDef *hltdc);
867 void HAL_LTDC_MspInit(LTDC_HandleTypeDef *hltdc);
868 void HAL_LTDC_MspDeInit(LTDC_HandleTypeDef *hltdc);
869 void HAL_LTDC_ErrorCallback(LTDC_HandleTypeDef *hltdc);
870 void HAL_LTDC_LineEventCallback(LTDC_HandleTypeDef *hltdc);
871 void HAL_LTDC_ReloadEventCallback(LTDC_HandleTypeDef *hltdc);
872 void HAL_LTDC_WarningEventCallback(LTDC_HandleTypeDef *hltdc);
873 
874 /* Burst length function *****************************/
875 HAL_StatusTypeDef HAL_LTDC_ConfigBurstLength(LTDC_HandleTypeDef *hltdc, uint32_t BurstLength, uint32_t LayerIdx);
876 
877 /* Underrun threshold function *****************************/
878 HAL_StatusTypeDef HAL_LTDC_ConfigUnderrunThreshold(LTDC_HandleTypeDef *hltdc, uint16_t Threshold);
879 
880 /* Mirroring functions *****************************/
881 HAL_StatusTypeDef HAL_LTDC_ConfigMirror(LTDC_HandleTypeDef *hltdc, uint32_t Mirror, uint32_t LayerIdx);
882 
883 /* Callbacks Register/UnRegister functions  ***********************************/
884 #if (USE_HAL_LTDC_REGISTER_CALLBACKS == 1)
885 HAL_StatusTypeDef HAL_LTDC_RegisterCallback(LTDC_HandleTypeDef *hltdc, HAL_LTDC_CallbackIDTypeDef CallbackID,
886                                             pLTDC_CallbackTypeDef pCallback);
887 HAL_StatusTypeDef HAL_LTDC_UnRegisterCallback(LTDC_HandleTypeDef *hltdc, HAL_LTDC_CallbackIDTypeDef CallbackID);
888 #endif /* USE_HAL_LTDC_REGISTER_CALLBACKS */
889 
890 /**
891   * @}
892   */
893 
894 /** @addtogroup LTDC_Exported_Functions_Group2
895   * @{
896   */
897 /* IO operation functions *****************************************************/
898 void  HAL_LTDC_IRQHandler(LTDC_HandleTypeDef *hltdc);
899 /**
900   * @}
901   */
902 
903 /** @addtogroup LTDC_Exported_Functions_Group3
904   * @{
905   */
906 /* Peripheral Control functions ***********************************************/
907 HAL_StatusTypeDef HAL_LTDC_ConfigLayer(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg, uint32_t LayerIdx);
908 HAL_StatusTypeDef HAL_LTDC_ConfigLayerFlexARGB(LTDC_HandleTypeDef *hltdc,
909                                                const LTDC_LayerFlexARGBTypeDef *pLayerFlexARGB,
910                                                uint32_t LayerIdx);
911 HAL_StatusTypeDef HAL_LTDC_ConfigLayerFlexYUVSemiPlanar(LTDC_HandleTypeDef *hltdc,
912                                                         LTDC_LayerFlexYUVSemiPlanarTypeDef *pLayerFlexYUVSemiPlanar,
913                                                         uint32_t LayerIdx);
914 HAL_StatusTypeDef HAL_LTDC_ConfigLayerFlexYUVFullPlanar(LTDC_HandleTypeDef *hltdc,
915                                                         LTDC_LayerFlexYUVFullPlanarTypeDef *pLayerFlexYUVFullPlanar,
916                                                         uint32_t LayerIdx);
917 HAL_StatusTypeDef HAL_LTDC_ConfigLayerFlexYUVCoPlanar(LTDC_HandleTypeDef *hltdc,
918                                                       const LTDC_LayerFlexYUVCoPlanarTypeDef *pLayerFlexYUVCoPlanar,
919                                                       uint32_t LayerIdx);
920 HAL_StatusTypeDef HAL_LTDC_SetWindowSize(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize, uint32_t LayerIdx);
921 HAL_StatusTypeDef HAL_LTDC_SetWindowPosition(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0, uint32_t LayerIdx);
922 HAL_StatusTypeDef HAL_LTDC_SetPixelFormat(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx);
923 HAL_StatusTypeDef HAL_LTDC_SetAlpha(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx);
924 HAL_StatusTypeDef HAL_LTDC_SetAddress(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx);
925 HAL_StatusTypeDef HAL_LTDC_SetSemiPlanarAddress(LTDC_HandleTypeDef *hltdc,
926                                                 LTDC_LayerFlexYUVSemiPlanarTypeDef *pYUVSemiPlanarAddress,
927                                                 uint32_t LayerIdx);
928 HAL_StatusTypeDef HAL_LTDC_SetFullPlanarAddress(LTDC_HandleTypeDef *hltdc,
929                                                 LTDC_LayerFlexYUVFullPlanarTypeDef *pYUVFullPlanarAddress,
930                                                 uint32_t LayerIdx);
931 HAL_StatusTypeDef HAL_LTDC_SetSemiPlanarAddress_NoReload(LTDC_HandleTypeDef *hltdc,
932                                                          LTDC_LayerFlexYUVSemiPlanarTypeDef *pYUVSemiPlanarAddress,
933                                                          uint32_t LayerIdx);
934 HAL_StatusTypeDef HAL_LTDC_SetFullPlanarAddress_NoReload(LTDC_HandleTypeDef *hltdc,
935                                                          LTDC_LayerFlexYUVFullPlanarTypeDef *pYUVFullPlanarAddress,
936                                                          uint32_t LayerIdx);
937 HAL_StatusTypeDef HAL_LTDC_SetPitch(LTDC_HandleTypeDef *hltdc, uint32_t LinePitchInPixels, uint32_t LayerIdx);
938 HAL_StatusTypeDef HAL_LTDC_ConfigColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t RGBValue, uint32_t LayerIdx);
939 HAL_StatusTypeDef HAL_LTDC_ConfigCLUT(LTDC_HandleTypeDef *hltdc, const uint32_t *pCLUT, uint32_t CLUTSize,
940                                       uint32_t LayerIdx);
941 HAL_StatusTypeDef HAL_LTDC_EnableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
942 HAL_StatusTypeDef HAL_LTDC_DisableColorKeying(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
943 HAL_StatusTypeDef HAL_LTDC_ConfigBlendingOrder(LTDC_HandleTypeDef *hltdc, uint32_t Order, uint32_t LayerIdx);
944 HAL_StatusTypeDef HAL_LTDC_EnableDefaultColor(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
945 HAL_StatusTypeDef HAL_LTDC_DisableDefaultColor(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
946 HAL_StatusTypeDef HAL_LTDC_EnableGammaCorrection(LTDC_HandleTypeDef *hltdc);
947 HAL_StatusTypeDef HAL_LTDC_DisableGammaCorrection(LTDC_HandleTypeDef *hltdc);
948 HAL_StatusTypeDef HAL_LTDC_ConfigGammaCorrection(LTDC_HandleTypeDef *hltdc, uint32_t GammaOnes,
949                                                  uint32_t GammaTenths, uint32_t RGBComponent);
950 HAL_StatusTypeDef HAL_LTDC_EnableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
951 HAL_StatusTypeDef HAL_LTDC_DisableCLUT(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
952 HAL_StatusTypeDef HAL_LTDC_ProgramLineEvent(LTDC_HandleTypeDef *hltdc, uint32_t Line);
953 HAL_StatusTypeDef HAL_LTDC_EnableDither(LTDC_HandleTypeDef *hltdc);
954 HAL_StatusTypeDef HAL_LTDC_DisableDither(LTDC_HandleTypeDef *hltdc);
955 HAL_StatusTypeDef HAL_LTDC_Reload(LTDC_HandleTypeDef *hltdc, uint32_t ReloadType);
956 HAL_StatusTypeDef HAL_LTDC_ReloadLayer(LTDC_HandleTypeDef *hltdc, uint32_t ReloadType, uint32_t LayerIdx);
957 HAL_StatusTypeDef HAL_LTDC_SetOutputDisplay(LTDC_HandleTypeDef *hltdc, uint32_t Display);
958 HAL_StatusTypeDef HAL_LTDC_SetExpectedCRC(LTDC_HandleTypeDef *hltdc, uint16_t ExpectedCRC);
959 HAL_StatusTypeDef HAL_LTDC_EnableCRC(LTDC_HandleTypeDef *hltdc);
960 HAL_StatusTypeDef HAL_LTDC_DisableCRC(LTDC_HandleTypeDef *hltdc);
961 HAL_StatusTypeDef HAL_LTDC_GetComputedCRC(LTDC_HandleTypeDef *hltdc, uint16_t *pComputedCRC);
962 HAL_StatusTypeDef HAL_LTDC_ConfigLayer_NoReload(LTDC_HandleTypeDef *hltdc, LTDC_LayerCfgTypeDef *pLayerCfg,
963                                                 uint32_t LayerIdx);
964 HAL_StatusTypeDef HAL_LTDC_SetWindowSize_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t XSize, uint32_t YSize,
965                                                   uint32_t LayerIdx);
966 HAL_StatusTypeDef HAL_LTDC_SetWindowPosition_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t X0, uint32_t Y0,
967                                                       uint32_t LayerIdx);
968 HAL_StatusTypeDef HAL_LTDC_SetPixelFormat_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Pixelformat, uint32_t LayerIdx);
969 HAL_StatusTypeDef HAL_LTDC_SetAlpha_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Alpha, uint32_t LayerIdx);
970 HAL_StatusTypeDef HAL_LTDC_SetAddress_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t Address, uint32_t LayerIdx);
971 HAL_StatusTypeDef HAL_LTDC_SetPitch_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LinePitchInPixels, uint32_t LayerIdx);
972 HAL_StatusTypeDef HAL_LTDC_EnableColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
973 HAL_StatusTypeDef HAL_LTDC_DisableColorKeying_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
974 HAL_StatusTypeDef HAL_LTDC_EnableCLUT_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
975 HAL_StatusTypeDef HAL_LTDC_DisableCLUT_NoReload(LTDC_HandleTypeDef *hltdc, uint32_t LayerIdx);
976 
977 /**
978   * @}
979   */
980 
981 /** @addtogroup LTDC_Exported_Functions_Group4
982   * @{
983   */
984 /* Peripheral State functions *************************************************/
985 HAL_LTDC_StateTypeDef HAL_LTDC_GetState(const LTDC_HandleTypeDef *hltdc);
986 uint32_t              HAL_LTDC_GetError(const LTDC_HandleTypeDef *hltdc);
987 /**
988   * @}
989   */
990 
991 /**
992   * @}
993   */
994 
995 /* Private types -------------------------------------------------------------*/
996 /* Private variables ---------------------------------------------------------*/
997 /* Private constants ---------------------------------------------------------*/
998 /* Private macros ------------------------------------------------------------*/
999 /** @defgroup LTDC_Private_Macros LTDC Private Macros
1000   * @{
1001   */
1002 #define LTDC_LAYER(__HANDLE__, __LAYER__)              ((LTDC_Layer_TypeDef *)((uint32_t)(\
1003                                                                                ((uint32_t)((__HANDLE__)->Instance))\
1004                                                                                + 0x100U + (0x100U*(__LAYER__)))))
1005 
1006 #define IS_LTDC_LAYER(__LAYER__)                       ((__LAYER__) < MAX_LAYER)
1007 #define IS_LTDC_PLANAR_LAYER(__LAYER__)                ((__LAYER__) == LTDC_LAYER_1)
1008 #define IS_LTDC_HSPOL(__HSPOL__)                       (((__HSPOL__) == LTDC_HSPOLARITY_AL)\
1009                                                         || ((__HSPOL__) == LTDC_HSPOLARITY_AH))
1010 #define IS_LTDC_VSPOL(__VSPOL__)                       (((__VSPOL__) == LTDC_VSPOLARITY_AL)\
1011                                                         || ((__VSPOL__) == LTDC_VSPOLARITY_AH))
1012 #define IS_LTDC_DEPOL(__DEPOL__)                       (((__DEPOL__) == LTDC_DEPOLARITY_AL)\
1013                                                         || ((__DEPOL__) ==  LTDC_DEPOLARITY_AH))
1014 #define IS_LTDC_PCPOL(__PCPOL__)                       (((__PCPOL__) == LTDC_PCPOLARITY_IPC)\
1015                                                         || ((__PCPOL__) ==  LTDC_PCPOLARITY_IIPC))
1016 #define IS_LTDC_HSYNC(__HSYNC__)                       ((__HSYNC__)  <= LTDC_HORIZONTALSYNC)
1017 #define IS_LTDC_VSYNC(__VSYNC__)                       ((__VSYNC__)  <= LTDC_VERTICALSYNC)
1018 #define IS_LTDC_AHBP(__AHBP__)                         ((__AHBP__)   <= LTDC_HORIZONTALSYNC)
1019 #define IS_LTDC_AVBP(__AVBP__)                         ((__AVBP__)   <= LTDC_VERTICALSYNC)
1020 #define IS_LTDC_AAW(__AAW__)                           ((__AAW__)    <= LTDC_HORIZONTALSYNC)
1021 #define IS_LTDC_AAH(__AAH__)                           ((__AAH__)    <= LTDC_VERTICALSYNC)
1022 #define IS_LTDC_TOTALW(__TOTALW__)                     ((__TOTALW__) <= LTDC_HORIZONTALSYNC)
1023 #define IS_LTDC_TOTALH(__TOTALH__)                     ((__TOTALH__) <= LTDC_VERTICALSYNC)
1024 #define IS_LTDC_BLUEVALUE(__BBLUE__)                   ((__BBLUE__)  <= LTDC_COLOR)
1025 #define IS_LTDC_GREENVALUE(__BGREEN__)                 ((__BGREEN__) <= LTDC_COLOR)
1026 #define IS_LTDC_REDVALUE(__BRED__)                     ((__BRED__)   <= LTDC_COLOR)
1027 #define IS_LTDC_BLENDING_FACTOR1(__BLENDING_FACTOR1__) (((__BLENDING_FACTOR1__) == LTDC_BLENDING_FACTOR1_CA) || \
1028                                                         ((__BLENDING_FACTOR1__) == LTDC_BLENDING_FACTOR1_PAxCA))
1029 #define IS_LTDC_BLENDING_FACTOR2(__BLENDING_FACTOR1__) (((__BLENDING_FACTOR1__) == LTDC_BLENDING_FACTOR2_CA) || \
1030                                                         ((__BLENDING_FACTOR1__) == LTDC_BLENDING_FACTOR2_PAxCA))
1031 #define IS_LTDC_PIXEL_FORMAT(__PIXEL_FORMAT__) \
1032   (((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_ARGB8888)  || \
1033    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_ABGR8888)  || \
1034    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_RGBA8888)  || \
1035    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_BGRA8888)  || \
1036    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_RGB565)    || \
1037    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_BGR565)    || \
1038    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_RGB888)    || \
1039    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_ARGB1555)  || \
1040    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_ARGB4444)  || \
1041    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_L8)        || \
1042    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_AL44)      || \
1043    ((__PIXEL_FORMAT__) == LTDC_PIXEL_FORMAT_AL88))
1044 
1045 #define IS_LTDC_ALPHA(__ALPHA__)                       ((__ALPHA__) <= LTDC_ALPHA)
1046 #define IS_LTDC_HCONFIGST(__HCONFIGST__)               ((__HCONFIGST__) <= LTDC_STARTPOSITION)
1047 #define IS_LTDC_HCONFIGSP(__HCONFIGSP__)               ((__HCONFIGSP__) <= LTDC_STOPPOSITION)
1048 #define IS_LTDC_VCONFIGST(__VCONFIGST__)               ((__VCONFIGST__) <= LTDC_STARTPOSITION)
1049 #define IS_LTDC_VCONFIGSP(__VCONFIGSP__)               ((__VCONFIGSP__) <= LTDC_STOPPOSITION)
1050 #define IS_LTDC_CFBP(__CFBP__)                         ((__CFBP__) <= LTDC_COLOR_FRAME_BUFFER)
1051 #define IS_LTDC_CFBLL(__CFBLL__)                       ((__CFBLL__) <= LTDC_COLOR_FRAME_BUFFER)
1052 #define IS_LTDC_CFBLNBR(__CFBLNBR__)                   ((__CFBLNBR__) <= LTDC_LINE_NUMBER)
1053 #define IS_LTDC_LIPOS(__LIPOS__)                       ((__LIPOS__) <= 0x7FFU)
1054 #define IS_LTDC_RELOAD(__RELOADTYPE__)                 (((__RELOADTYPE__) == LTDC_RELOAD_IMMEDIATE) || \
1055                                                         ((__RELOADTYPE__) == LTDC_RELOAD_VERTICAL_BLANKING))
1056 
1057 #define IS_LTDC_MIRROR(__MIRROR__)         (((__MIRROR__) == LTDC_MIRROR_HORIZONTAL)           ||\
1058                                             ((__MIRROR__) == LTDC_MIRROR_VERTICAL)             ||\
1059                                             ((__MIRROR__) == LTDC_MIRROR_HORIZONTAL_VERTICAL) ||\
1060                                             ((__MIRROR__) == LTDC_MIRROR_NONE))
1061 
1062 #define IS_LTDC_ARGB_SIZE(__ARGB_SIZE__)               (((__ARGB_SIZE__) == LTDC_ARGB_PIXEL_SIZE_1_BYTE)         ||\
1063                                                         ((__ARGB_SIZE__) == LTDC_ARGB_PIXEL_SIZE_2_BYTES)        ||\
1064                                                         ((__ARGB_SIZE__) == LTDC_ARGB_PIXEL_SIZE_3_BYTES)        ||\
1065                                                         ((__ARGB_SIZE__) == LTDC_ARGB_PIXEL_SIZE_4_BYTES))
1066 
1067 #define IS_LTDC_ARGB_COMPONENT_POSITION(__ARGB_POS__)         ((__ARGB_POS__) <= 0x1FU)
1068 #define IS_LTDC_ARGB_COMPONENT_WIDTH(__ARGB_WIDTH__)         ((__ARGB_WIDTH__) <= 0xFU)
1069 #define IS_LTDC_YUV_ORDER(__YUV_ORDER__)               (((__YUV_ORDER__) == LTDC_YUV_ORDER_LUMINANCE_FIRST)      ||\
1070                                                         ((__YUV_ORDER__) == LTDC_YUV_ORDER_CHROMINANCE_FIRST))
1071 
1072 #define IS_LTDC_Y_ORDER(__Y_ORDER__)                 (((__Y_ORDER__) == LTDC_YUV_LUMINANCE_ORDER_ODD_FIRST)         ||\
1073                                                       ((__Y_ORDER__) == LTDC_YUV_LUMINANCE_ORDER_EVEN_FIRST))
1074 
1075 #define IS_LTDC_UV_ORDER(__UV_ORDER__)                 (((__UV_ORDER__) == LTDC_YUV_CHROMIANCE_ORDER_U_FIRST)   ||\
1076                                                         ((__UV_ORDER__) == LTDC_YUV_CHROMIANCE_ORDER_V_FIRST))
1077 
1078 #define IS_LTDC_Y_RANHGE(__Y_RANGE__)                 (((__Y_RANGE__) == LTDC_YUV_LUMINANCE_RESCALE_ENABLE)   ||\
1079                                                        ((__Y_RANGE__) == LTDC_YUV_LUMINANCE_RESCALE_DISABLE))
1080 
1081 #define IS_LTDC_BLEND_ORDER(__BLEND_ORDER__)          (((__BLEND_ORDER__) == LTDC_BLENDING_ORDER_FOREGROUND)   ||\
1082                                                        ((__BLEND_ORDER__) == LTDC_BLENDING_ORDER_BACKGROUND))
1083 
1084 #define IS_LTDC_RGB_COMPONENT(__RGB_COMPONENT__)      (((__RGB_COMPONENT__) == LTDC_RGB_COMPONENT_RED)          ||\
1085                                                        ((__RGB_COMPONENT__) == LTDC_RGB_COMPONENT_GREEN)        ||\
1086                                                        ((__RGB_COMPONENT__) == LTDC_RGB_COMPONENT_BLUE )        ||\
1087                                                        ((__RGB_COMPONENT__) == LTDC_RGB_COMPONENT_ALL))
1088 
1089 #define IS_LTDC_DISPLAY(__LTDC_DISPLAY__)             (((__LTDC_DISPLAY__) == LTDC_OUT_RGB)        ||\
1090                                                        ((__LTDC_DISPLAY__) == LTDC_OUT_YUV_HDTV)   ||\
1091                                                        ((__LTDC_DISPLAY__) == LTDC_OUT_YUV_SDTV)   ||\
1092                                                        ((__LTDC_DISPLAY__) == LTDC_OUT_YVU_HDTV)   ||\
1093                                                        ((__LTDC_DISPLAY__) == LTDC_OUT_YVU_SDTV))
1094 
1095 #define IS_LTDC_BURST_LENGTH(__BURST_LENGTH__)                       (((__BURST_LENGTH__) <= 0x10U) &&\
1096                                                                       ((__BURST_LENGTH__) >= 0x1U))
1097 
1098 #define IS_LTDC_GAMMA_VALUE(__ONES__, __TENTHS__)      ((((__TENTHS__) + ((__ONES__) * 10U)) >= 4U)   &&\
1099                                                         (((__TENTHS__) + ((__ONES__) * 10U)) <= 29U))
1100 
1101 #define IS_LTDC_YUV2RGBCONVERTOR(__CONVERTOR__)  (((__CONVERTOR__) == LTDC_YUV2RGBCONVERTOR_BT709_FULL_RANGE)      ||\
1102                                                   ((__CONVERTOR__) == LTDC_YUV2RGBCONVERTOR_BT709_REDUCED_RANGE)   ||\
1103                                                   ((__CONVERTOR__) == LTDC_YUV2RGBCONVERTOR_BT601_FULL_RANGE)      ||\
1104                                                   ((__CONVERTOR__) == LTDC_YUV2RGBCONVERTOR_BT601_REDUCED_RANGE))
1105 
1106 /**
1107   * @}
1108   */
1109 
1110 /* Private functions ---------------------------------------------------------*/
1111 /** @defgroup LTDC_Private_Functions LTDC Private Functions
1112   * @{
1113   */
1114 
1115 /**
1116   * @}
1117   */
1118 
1119 /**
1120   * @}
1121   */
1122 
1123 /**
1124   * @}
1125   */
1126 
1127 #endif /* LTDC */
1128 
1129 #ifdef __cplusplus
1130 }
1131 #endif
1132 
1133 #endif /* STM32N6xx_HAL_LTDC_H */
1134 
1135