Updates to STM32F439i-Eval board files to fix display flashing

This commit is contained in:
inmarket 2016-08-13 15:12:00 +10:00
parent 02dbca0454
commit 9356534ad5
3 changed files with 32 additions and 48 deletions

View File

@ -18,16 +18,7 @@
#include "stm324x9i_eval_sdram.h" #include "stm324x9i_eval_sdram.h"
// Panel parameters // Panel parameters
#define AMPIRE640480_WIDTH ((uint16_t)640) /* LCD PIXEL WIDTH */ // This panel is a AMPIRE640480 panel.
#define AMPIRE640480_HEIGHT ((uint16_t)480) /* LCD PIXEL HEIGHT */
#define AMPIRE640480_HSYNC ((uint16_t)30) /* Horizontal synchronization */
#define AMPIRE640480_HBP ((uint16_t)114) /* Horizontal back porch */
#define AMPIRE640480_HFP ((uint16_t)16) /* Horizontal front porch */
#define AMPIRE640480_VSYNC ((uint16_t)3) /* Vertical synchronization */
#define AMPIRE640480_VBP ((uint16_t)32) /* Vertical back porch */
#define AMPIRE640480_VFP ((uint16_t)10) /* Vertical front porch */
#define AMPIRE640480_FREQUENCY_DIVIDER 3 /* LCD Frequency divider */
static const ltdcConfig driverCfg = { static const ltdcConfig driverCfg = {
640, 480, // Width, Height (pixels) 640, 480, // Width, Height (pixels)
@ -56,48 +47,36 @@ static const ltdcConfig driverCfg = {
LTDC_UNUSED_LAYER_CONFIG // Foreground layer config LTDC_UNUSED_LAYER_CONFIG // Foreground layer config
}; };
#define LCD_MAX_PCLK ((uint8_t)0x00) // LCD Clock values
static LTDC_HandleTypeDef hltdc_eval; #define LCD_PLLSAIN_VALUE 192 // 151
static uint32_t PCLK_profile = LCD_MAX_PCLK; #define LCD_PLLSAIR_VALUE 2 // 3
#define LCD_PLLSAIDIVR_VALUE RCC_PLLSAIDIVR_4 // RCC_PLLSAIDIVR_2
static void configureLcdClock(void)
{
#if 1
RCC_PeriphCLKInitTypeDef periph_clk_init_struct;
periph_clk_init_struct.PLLSAI.PLLSAIN = LCD_PLLSAIN_VALUE;
periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
periph_clk_init_struct.PLLSAI.PLLSAIR = LCD_PLLSAIR_VALUE;
periph_clk_init_struct.PLLSAIDivR = LCD_PLLSAIDIVR_VALUE;
HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct);
#else
#define LCD_PLLSAIQ_VALUE 7
/* PLLSAI activation.*/
RCC->PLLSAICFGR = (LCD_PLLSAIN_VALUE << 6) | (LCD_PLLSAIR_VALUE << 28) | (LCD_PLLSAIQ_VALUE << 24);
RCC->DCKCFGR = (RCC->DCKCFGR & ~RCC_DCKCFGR_PLLSAIDIVR) | LCD_PLLSAIDIVR_VALUE;
RCC->CR |= RCC_CR_PLLSAION;
#endif
}
static void configureLcdPins(void) static void configureLcdPins(void)
{ {
GPIO_InitTypeDef GPIO_Init_Structure; GPIO_InitTypeDef GPIO_Init_Structure;
PCLK_profile = LCD_MAX_PCLK;
// LTDC configuration
hltdc_eval.Init.HorizontalSync = (AMPIRE640480_HSYNC - 1);
hltdc_eval.Init.VerticalSync = (AMPIRE640480_VSYNC - 1);
hltdc_eval.Init.AccumulatedHBP = (AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1);
hltdc_eval.Init.AccumulatedVBP = (AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1);
hltdc_eval.Init.AccumulatedActiveH = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP - 1);
hltdc_eval.Init.AccumulatedActiveW = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP - 1);
hltdc_eval.Init.TotalHeigh = (AMPIRE640480_HEIGHT + AMPIRE640480_VSYNC + AMPIRE640480_VBP + AMPIRE640480_VFP - 1);
hltdc_eval.Init.TotalWidth = (AMPIRE640480_WIDTH + AMPIRE640480_HSYNC + AMPIRE640480_HBP + AMPIRE640480_HFP - 1);
hltdc_eval.LayerCfg->ImageWidth = AMPIRE640480_WIDTH;
hltdc_eval.LayerCfg->ImageHeight = AMPIRE640480_HEIGHT;
hltdc_eval.Init.Backcolor.Blue = 0;
hltdc_eval.Init.Backcolor.Green = 0;
hltdc_eval.Init.Backcolor.Red = 0;
hltdc_eval.Init.HSPolarity = LTDC_HSPOLARITY_AL;
hltdc_eval.Init.VSPolarity = LTDC_VSPOLARITY_AL;
hltdc_eval.Init.DEPolarity = LTDC_DEPOLARITY_AL;
hltdc_eval.Init.PCPolarity = LTDC_PCPOLARITY_IPC;
hltdc_eval.Instance = LTDC;
HAL_LTDC_Init(&hltdc_eval);
// LCD clock configuration
static RCC_PeriphCLKInitTypeDef periph_clk_init_struct;
periph_clk_init_struct.PLLSAI.PLLSAIN = 151;
periph_clk_init_struct.PeriphClockSelection = RCC_PERIPHCLK_LTDC;
periph_clk_init_struct.PLLSAI.PLLSAIR = 3;
periph_clk_init_struct.PLLSAIDivR = RCC_PLLSAIDIVR_2;
HAL_RCCEx_PeriphCLKConfig(&periph_clk_init_struct);
// Enable peripheral clocks // Enable peripheral clocks
__LTDC_CLK_ENABLE();
__DMA2D_CLK_ENABLE();
__GPIOI_CLK_ENABLE(); __GPIOI_CLK_ENABLE();
__GPIOJ_CLK_ENABLE(); __GPIOJ_CLK_ENABLE();
__GPIOK_CLK_ENABLE(); __GPIOK_CLK_ENABLE();
@ -140,6 +119,9 @@ static GFXINLINE void init_board(GDisplay* g)
switch(g->controllerdisplay) { switch(g->controllerdisplay) {
case 0: case 0:
// Set LCD pixel clock rate
configureLcdClock();
// Set pin directions // Set pin directions
configureLcdPins(); configureLcdPins();
@ -158,6 +140,7 @@ static GFXINLINE void post_init_board(GDisplay* g)
static GFXINLINE void set_backlight(GDisplay* g, uint8_t percent) static GFXINLINE void set_backlight(GDisplay* g, uint8_t percent)
{ {
(void) g; (void) g;
(void) percent;
} }
#endif /* _GDISP_LLD_BOARD_H */ #endif /* _GDISP_LLD_BOARD_H */

View File

@ -43,6 +43,7 @@ static bool_t init_board(GMouse* m, unsigned driverinstance)
GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitTypeDef GPIO_InitStruct;
(void)m; (void)m;
(void)driverinstance;
// Enable peripheral clocks // Enable peripheral clocks
__HAL_RCC_I2C1_CLK_ENABLE(); __HAL_RCC_I2C1_CLK_ENABLE();

View File

@ -7,7 +7,7 @@
#include "stm32f4xx_hal.h" #include "stm32f4xx_hal.h"
#if GFX_USE_OS_RAW32 #if GFX_USE_OS_RAW32
void _init() void _init(void)
{ {
} }