Mercurial > public > ostc4
comparison Discovery/Src/gfx_engine.c @ 871:f7318457df4d
support for new screen
ToDo: Brightness settings
| author | heinrichsweikamp |
|---|---|
| date | Tue, 13 Aug 2024 13:24:54 +0200 |
| parents | b7e43b28bee1 |
| children | e373e90a48db |
comparison
equal
deleted
inserted
replaced
| 866:3a1c533f3840 | 871:f7318457df4d |
|---|---|
| 181 static void GFX_Dma2d_TransferError(DMA2D_HandleTypeDef* Dma2dHandle); | 181 static void GFX_Dma2d_TransferError(DMA2D_HandleTypeDef* Dma2dHandle); |
| 182 static void GFX_clear_frame_dma2d(uint8_t frameId); | 182 static void GFX_clear_frame_dma2d(uint8_t frameId); |
| 183 | 183 |
| 184 static uint32_t GFX_doubleBufferOne(void); | 184 static uint32_t GFX_doubleBufferOne(void); |
| 185 static uint32_t GFX_doubleBufferTwo(void); | 185 static uint32_t GFX_doubleBufferTwo(void); |
| 186 | |
| 187 static void GFX_LTDC_Init_display0(void); | |
| 188 static void GFX_LTDC_Init_display1(void); | |
| 186 | 189 |
| 187 | 190 |
| 188 /* Exported functions --------------------------------------------------------*/ | 191 /* Exported functions --------------------------------------------------------*/ |
| 189 | 192 |
| 190 uint8_t GFX_logoStatus(void) | 193 uint8_t GFX_logoStatus(void) |
| 3321 return result; | 3324 return result; |
| 3322 } | 3325 } |
| 3323 | 3326 |
| 3324 void GFX_LTDC_Init(void) | 3327 void GFX_LTDC_Init(void) |
| 3325 { | 3328 { |
| 3326 /* | 3329 if (hardwareDisplay == 1) |
| 3327 HSYNC=10 (9+1) | 3330 { |
| 3328 HBP=10 (19-10+1) | 3331 GFX_LTDC_Init_display1(); |
| 3329 ActiveW=480 (499-10-10+1) | 3332 } |
| 3330 HFP=8 (507-480-10-10+1) | 3333 else |
| 3331 | 3334 { |
| 3332 VSYNC=2 (1+1) | 3335 GFX_LTDC_Init_display0(); |
| 3333 VBP=2 (3-2+1) | 3336 } |
| 3334 ActiveH=800 (803-2-2+1) | 3337 } |
| 3335 VFP=2 (805-800-2-2+1) | 3338 |
| 3336 */ | 3339 void GFX_LTDC_Init_display0(void) |
| 3337 | 3340 { |
| 3338 /* Timing configuration */ | 3341 /* Timing configuration */ |
| 3342 | |
| 3343 #define ActiveH 800 | |
| 3344 #define ActiveW 480 | |
| 3345 | |
| 3346 #define Hsync 10 | |
| 3347 #define HFP 8 | |
| 3348 #define HBP 10 | |
| 3349 | |
| 3350 #define Vsync 2 | |
| 3351 #define VFP 2 | |
| 3352 #define VBP 2 | |
| 3353 | |
| 3354 | |
| 3339 /* Horizontal synchronization width = Hsync - 1 */ | 3355 /* Horizontal synchronization width = Hsync - 1 */ |
| 3340 LtdcHandle.Init.HorizontalSync = 9; | 3356 LtdcHandle.Init.HorizontalSync = Hsync - 1; |
| 3341 /* Vertical synchronization height = Vsync - 1 */ | 3357 /* Vertical synchronization height = Vsync - 1 */ |
| 3342 LtdcHandle.Init.VerticalSync = 1; | 3358 LtdcHandle.Init.VerticalSync = Vsync -1; |
| 3343 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ | 3359 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ |
| 3344 LtdcHandle.Init.AccumulatedHBP = 19; | 3360 LtdcHandle.Init.AccumulatedHBP = Hsync + HBP - 1; |
| 3345 /* Accumulated vertical back porch = Vsync + VBP - 1 */ | 3361 /* Accumulated vertical back porch = Vsync + VBP - 1 */ |
| 3346 LtdcHandle.Init.AccumulatedVBP = 3; | 3362 LtdcHandle.Init.AccumulatedVBP = Vsync + VBP - 1; |
| 3347 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ | 3363 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ |
| 3348 LtdcHandle.Init.AccumulatedActiveW = 499;//500;//499; | 3364 LtdcHandle.Init.AccumulatedActiveW = Hsync + HBP + ActiveW- 1; |
| 3349 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ | 3365 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ |
| 3350 LtdcHandle.Init.AccumulatedActiveH = 803; | 3366 LtdcHandle.Init.AccumulatedActiveH = Vsync + VBP + ActiveH - 1; |
| 3351 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ | 3367 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ |
| 3352 LtdcHandle.Init.TotalWidth = 507;//508;//507; | 3368 LtdcHandle.Init.TotalWidth = Hsync + HBP + ActiveW + HFP - 1; |
| 3353 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ | 3369 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ |
| 3354 LtdcHandle.Init.TotalHeigh = 805; | 3370 LtdcHandle.Init.TotalHeigh = Vsync + VBP + ActiveH + VFP - 1; |
| 3355 | 3371 |
| 3356 /* Configure R,G,B component values for LCD background color */ | 3372 /* Configure R,G,B component values for LCD background color */ |
| 3357 LtdcHandle.Init.Backcolor.Red= 0; | 3373 LtdcHandle.Init.Backcolor.Red= 0; |
| 3358 LtdcHandle.Init.Backcolor.Blue= 0; | 3374 LtdcHandle.Init.Backcolor.Blue= 0; |
| 3359 LtdcHandle.Init.Backcolor.Green= 0; | 3375 LtdcHandle.Init.Backcolor.Green= 0; |
| 3362 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ | 3378 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ |
| 3363 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ | 3379 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ |
| 3364 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ | 3380 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ |
| 3365 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ | 3381 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ |
| 3366 | 3382 |
| 3367 /* done in main.c SystemClockConfig | 3383 /* done in base.c SystemClockConfig |
| 3368 | 3384 |
| 3369 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; | 3385 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; |
| 3370 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; | 3386 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; |
| 3371 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; | 3387 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; |
| 3372 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; | 3388 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; |
| 3379 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;//LTDC_PCPOLARITY_IPC; | 3395 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;//LTDC_PCPOLARITY_IPC; |
| 3380 | 3396 |
| 3381 LtdcHandle.Instance = LTDC; | 3397 LtdcHandle.Instance = LTDC; |
| 3382 | 3398 |
| 3383 /* Configure the LTDC */ | 3399 /* Configure the LTDC */ |
| 3384 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // auch init der GPIO Pins | 3400 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // initialize GPIO Pins, too |
| 3401 { | |
| 3402 /* Initialization Error */ | |
| 3403 GFX_Error_Handler(); | |
| 3404 } | |
| 3405 } | |
| 3406 | |
| 3407 | |
| 3408 void GFX_LTDC_Init_display1(void) | |
| 3409 { | |
| 3410 /* Timing configuration */ | |
| 3411 #define ActiveH_d1 800 | |
| 3412 #define ActiveW_d1 480 | |
| 3413 | |
| 3414 #define Hsync_d1 2 | |
| 3415 #define HFP_d1 8 | |
| 3416 #define HBP_d1 8 | |
| 3417 | |
| 3418 #define Vsync_d1 2 | |
| 3419 #define VFP_d1 4 // make sure this value * VSYNC is also set in display.c for OLED_VFP_SET | |
| 3420 #define VBP_d1 4 // make sure this value * VSYNC is also set in display.c for OLED_VBP_SET | |
| 3421 | |
| 3422 /* Horizontal synchronization width = Hsync - 1 */ | |
| 3423 LtdcHandle.Init.HorizontalSync = Hsync_d1 - 1; | |
| 3424 /* Vertical synchronization height = Vsync - 1 */ | |
| 3425 LtdcHandle.Init.VerticalSync = Vsync_d1 -1; | |
| 3426 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ | |
| 3427 LtdcHandle.Init.AccumulatedHBP = Hsync_d1 + HBP_d1 - 1; | |
| 3428 /* Accumulated vertical back porch = Vsync + VBP - 1 */ | |
| 3429 LtdcHandle.Init.AccumulatedVBP = Vsync_d1 + VBP_d1 - 1; | |
| 3430 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ | |
| 3431 LtdcHandle.Init.AccumulatedActiveW = Hsync_d1 + HBP_d1 + ActiveW_d1 - 1; | |
| 3432 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ | |
| 3433 LtdcHandle.Init.AccumulatedActiveH = Vsync_d1 + VBP_d1 + ActiveH_d1 - 1; | |
| 3434 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ | |
| 3435 LtdcHandle.Init.TotalWidth = Hsync_d1 + HBP_d1 + ActiveW_d1 + HFP_d1 - 1; | |
| 3436 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ | |
| 3437 LtdcHandle.Init.TotalHeigh = Vsync_d1 + VBP_d1 + ActiveH_d1 + VFP_d1 - 1; | |
| 3438 | |
| 3439 /* Configure R,G,B component values for LCD background color */ | |
| 3440 LtdcHandle.Init.Backcolor.Red= 0; | |
| 3441 LtdcHandle.Init.Backcolor.Blue= 0; | |
| 3442 LtdcHandle.Init.Backcolor.Green= 0; | |
| 3443 | |
| 3444 /* LCD clock configuration */ | |
| 3445 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ | |
| 3446 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ | |
| 3447 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ | |
| 3448 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ | |
| 3449 | |
| 3450 /* done in base.c SystemClockConfig | |
| 3451 | |
| 3452 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; | |
| 3453 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; | |
| 3454 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; | |
| 3455 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; | |
| 3456 HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); | |
| 3457 */ | |
| 3458 /* Polarity */ | |
| 3459 LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; | |
| 3460 LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; | |
| 3461 LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; | |
| 3462 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;//LTDC_PCPOLARITY_IPC; | |
| 3463 | |
| 3464 LtdcHandle.Instance = LTDC; | |
| 3465 | |
| 3466 /* Configure the LTDC */ | |
| 3467 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // initialize GPIO Pins, too | |
| 3385 { | 3468 { |
| 3386 /* Initialization Error */ | 3469 /* Initialization Error */ |
| 3387 GFX_Error_Handler(); | 3470 GFX_Error_Handler(); |
| 3388 } | 3471 } |
| 3389 } | 3472 } |
