aboutsummaryrefslogtreecommitdiffstats
path: root/boards/base/STM32F469i-Discovery/board_STM32LTDC.h
diff options
context:
space:
mode:
Diffstat (limited to 'boards/base/STM32F469i-Discovery/board_STM32LTDC.h')
-rw-r--r--boards/base/STM32F469i-Discovery/board_STM32LTDC.h92
1 files changed, 53 insertions, 39 deletions
diff --git a/boards/base/STM32F469i-Discovery/board_STM32LTDC.h b/boards/base/STM32F469i-Discovery/board_STM32LTDC.h
index e58f566a..cd87d89e 100644
--- a/boards/base/STM32F469i-Discovery/board_STM32LTDC.h
+++ b/boards/base/STM32F469i-Discovery/board_STM32LTDC.h
@@ -27,6 +27,8 @@
static DSI_VidCfgTypeDef hdsivideo_handle;
DSI_HandleTypeDef hdsi_eval;
+#define ALLOW_2ND_LAYER FALSE // Do we really have the RAM bandwidth for this?
+
// Panel parameters
// This panel is a KoD KM-040TMP-02-0621 DSI LCD Display.
@@ -45,8 +47,8 @@ static const ltdcConfig driverCfg = {
LTDC_PIXELFORMAT, // Pixel format
0, 0, // Start pixel position (x, y)
800, 480, // Size of virtual layer (cx, cy)
- LTDC_COLOR_FUCHSIA, // Default color (ARGB8888)
- 0x980088, // Color key (RGB888)
+ 0x00000000, // Default color (ARGB8888)
+ 0x000000, // Color key (RGB888)
LTDC_BLEND_FIX1_FIX2, // Blending factors
0, // Palette (RGB888, can be NULL)
0, // Palette length
@@ -54,18 +56,34 @@ static const ltdcConfig driverCfg = {
LTDC_LEF_ENABLE // Layer configuration flags
},
- LTDC_UNUSED_LAYER_CONFIG // Foreground layer config
+#if ALLOW_2ND_LAYER
+ { // Foreground layer config (if turned on)
+ (LLDCOLOR_TYPE *)(SDRAM_DEVICE_ADDR+(800 * 480 * LTDC_PIXELBYTES)), // Frame buffer address
+ 800, 480, // Width, Height (pixels)
+ 800 * LTDC_PIXELBYTES, // Line pitch (bytes)
+ LTDC_PIXELFORMAT, // Pixel format
+ 0, 0, // Start pixel position (x, y)
+ 800, 480, // Size of virtual layer (cx, cy)
+ 0x00000000, // Default color (ARGB8888)
+ 0x000000, // Color key (RGB888)
+ LTDC_BLEND_MOD1_MOD2, // Blending factors
+ 0, // Palette (RGB888, can be NULL)
+ 0, // Palette length
+ 0xFF, // Constant alpha factor
+ LTDC_LEF_ENABLE // Layer configuration flags
+ }
+#else
+ LTDC_UNUSED_LAYER_CONFIG
+#endif
};
/* Display timing */
#define KoD_FREQUENCY_DIVIDER 7
static GFXINLINE void init_board(GDisplay *g) {
+ (void) g;
- // As we are not using multiple displays we set g->board to NULL as we don't use it
- g->board = 0;
-
- DSI_PLLInitTypeDef dsiPllInit;
+ DSI_PLLInitTypeDef dsiPllInit;
DSI_PHY_TimerTypeDef PhyTimings;
// static RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
uint32_t LcdClock = 30000;//27429; /*!< LcdClk = 27429 kHz */
@@ -89,8 +107,8 @@ static GFXINLINE void init_board(GDisplay *g) {
uint32_t HBP; /*!< Horizontal Back Porch time in units of lcdClk */
uint32_t HFP; /*!< Horizontal Front Porch time in units of lcdClk */
uint32_t HACT; /*!< Horizontal Active time in units of lcdClk = imageSize X in pixels to display */
-
-
+
+
/* Toggle Hardware Reset of the DSI LCD using
* its XRES signal (active low) */
BSP_LCD_Reset();
@@ -102,19 +120,19 @@ static GFXINLINE void init_board(GDisplay *g) {
* - NVIC IRQ related to IP blocks enabled
*/
BSP_LCD_MspInit();
-
- /*************************DSI Initialization***********************************/
-
+
+ /*************************DSI Initialization***********************************/
+
/* Base address of DSI Host/Wrapper registers to be set before calling De-Init */
hdsi_eval.Instance = DSI;
-
+
HAL_DSI_DeInit(&(hdsi_eval));
-
+
#if !defined(USE_STM32469I_DISCO_REVA)
dsiPllInit.PLLNDIV = 125;
dsiPllInit.PLLIDF = DSI_PLL_IN_DIV2;
dsiPllInit.PLLODF = DSI_PLL_OUT_DIV1;
- #else
+ #else
dsiPllInit.PLLNDIV = 100;
dsiPllInit.PLLIDF = DSI_PLL_IN_DIV5;
dsiPllInit.PLLODF = DSI_PLL_OUT_DIV1;
@@ -123,10 +141,10 @@ static GFXINLINE void init_board(GDisplay *g) {
/* Set number of Lanes */
hdsi_eval.Init.NumberOfLanes = DSI_TWO_DATA_LANES;
-
+
/* TXEscapeCkdiv = f(LaneByteClk)/15.62 = 4 */
- hdsi_eval.Init.TXEscapeCkdiv = laneByteClk_kHz/15620;
-
+ hdsi_eval.Init.TXEscapeCkdiv = laneByteClk_kHz/15620;
+
HAL_DSI_Init(&(hdsi_eval), &(dsiPllInit));
/* Timing parameters for all Video modes
@@ -139,7 +157,7 @@ static GFXINLINE void init_board(GDisplay *g) {
HACT = lcd_x_size;
VACT = lcd_y_size;
-
+
/* The following values are same for portrait and landscape orientations */
VSA = 12;//OTM8009A_480X800_VSYNC; /* 12 */
VBP = 12;//OTM8009A_480X800_VBP; /* 12 */
@@ -152,11 +170,11 @@ static GFXINLINE void init_board(GDisplay *g) {
hdsivideo_handle.ColorCoding = LCD_DSI_PIXEL_DATA_FMT_RBG888;
hdsivideo_handle.VSPolarity = DSI_VSYNC_ACTIVE_HIGH;
hdsivideo_handle.HSPolarity = DSI_HSYNC_ACTIVE_HIGH;
- hdsivideo_handle.DEPolarity = DSI_DATA_ENABLE_ACTIVE_HIGH;
+ hdsivideo_handle.DEPolarity = DSI_DATA_ENABLE_ACTIVE_HIGH;
hdsivideo_handle.Mode = DSI_VID_MODE_BURST; /* Mode Video burst ie : one LgP per line */
hdsivideo_handle.NullPacketSize = 0xFFF;
hdsivideo_handle.NumberOfChunks = 0;
- hdsivideo_handle.PacketSize = HACT; /* Value depending on display orientation choice portrait/landscape */
+ hdsivideo_handle.PacketSize = HACT; /* Value depending on display orientation choice portrait/landscape */
hdsivideo_handle.HorizontalSyncActive = (HSA * laneByteClk_kHz) / LcdClock;
hdsivideo_handle.HorizontalBackPorch = (HBP * laneByteClk_kHz) / LcdClock;
hdsivideo_handle.HorizontalLine = ((HACT + HSA + HBP + HFP) * laneByteClk_kHz) / LcdClock; /* Value depending on display orientation choice portrait/landscape */
@@ -164,10 +182,10 @@ static GFXINLINE void init_board(GDisplay *g) {
hdsivideo_handle.VerticalBackPorch = VBP;
hdsivideo_handle.VerticalFrontPorch = VFP;
hdsivideo_handle.VerticalActive = VACT; /* Value depending on display orientation choice portrait/landscape */
-
+
/* Enable or disable sending LP command while streaming is active in video mode */
hdsivideo_handle.LPCommandEnable = DSI_LP_COMMAND_ENABLE; /* Enable sending commands in mode LP (Low Power) */
-
+
/* Largest packet size possible to transmit in LP mode in VSA, VBP, VFP regions */
/* Only useful when sending LP packets is allowed while streaming is active in video mode */
hdsivideo_handle.LPLargestPacketSize = 16;
@@ -184,7 +202,7 @@ static GFXINLINE void init_board(GDisplay *g) {
hdsivideo_handle.LPVerticalFrontPorchEnable = DSI_LP_VFP_ENABLE; /* Allow sending LP commands during VFP period */
hdsivideo_handle.LPVerticalBackPorchEnable = DSI_LP_VBP_ENABLE; /* Allow sending LP commands during VBP period */
hdsivideo_handle.LPVerticalSyncActiveEnable = DSI_LP_VSYNC_ENABLE; /* Allow sending LP commands during VSync = VSA period */
-
+
/* Configure DSI Video mode timings with settings set above */
HAL_DSI_ConfigVideoMode(&(hdsi_eval), &(hdsivideo_handle));
@@ -197,7 +215,7 @@ static GFXINLINE void init_board(GDisplay *g) {
PhyTimings.StopWaitTime = 10;
HAL_DSI_ConfigPhyTimer(&hdsi_eval, &PhyTimings);
- /*************************End DSI Initialization*******************************/
+ /*************************End DSI Initialization*******************************/
/************************LTDC Initialization***********************************/
@@ -241,32 +259,28 @@ static GFXINLINE void init_board(GDisplay *g) {
/* Initialize the SDRAM */
BSP_SDRAM_Init();
#endif /* DATA_IN_ExtSDRAM */
+
}
static GFXINLINE void post_init_board(GDisplay* g)
{
(void)g;
-
+
+ if (g->controllerdisplay)
+ return;
+
/* Initialize the font */
BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
-
+
/************************End LTDC Initialization*******************************/
-
-
- /***********************OTM8009A Initialization********************************/
-
+
+
+ /***********************OTM8009A Initialization********************************/
+
/* Initialize the OTM8009A LCD Display IC Driver (KoD LCD IC Driver)
* depending on configuration set in 'hdsivideo_handle'.
*/
OTM8009A_Init(OTM8009A_FORMAT_RGB888, OTM8009A_ORIENTATION_LANDSCAPE);
-
- /***********************End OTM8009A Initialization****************************/
-
- // ------------------------------------------------------------------------
-
- //BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER_BACKGROUND, LCD_FB_START_ADDRESS);
- //BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER_BACKGROUND);
- //BSP_LCD_SetLayerVisible(LTDC_ACTIVE_LAYER_FOREGROUND, DISABLE);
}
static GFXINLINE void set_backlight(GDisplay* g, uint8_t percent)