Mercurial > public > ostc4
comparison Discovery/Src/gfx_engine.c @ 873:e373e90a48db Evo_2_23
merge new screen stuff
| author | heinrichsweikamp |
|---|---|
| date | Wed, 14 Aug 2024 16:44:46 +0200 |
| parents | bc6c90e20d9e f7318457df4d |
| children | fbb6f8f41e0a |
comparison
equal
deleted
inserted
replaced
| 872:5e027b0f7475 | 873:e373e90a48db |
|---|---|
| 182 static void GFX_Dma2d_TransferError(DMA2D_HandleTypeDef* Dma2dHandle); | 182 static void GFX_Dma2d_TransferError(DMA2D_HandleTypeDef* Dma2dHandle); |
| 183 static void GFX_clear_frame_dma2d(uint8_t frameId); | 183 static void GFX_clear_frame_dma2d(uint8_t frameId); |
| 184 | 184 |
| 185 static uint32_t GFX_doubleBufferOne(void); | 185 static uint32_t GFX_doubleBufferOne(void); |
| 186 static uint32_t GFX_doubleBufferTwo(void); | 186 static uint32_t GFX_doubleBufferTwo(void); |
| 187 | |
| 188 static void GFX_LTDC_Init_display0(void); | |
| 189 static void GFX_LTDC_Init_display1(void); | |
| 187 | 190 |
| 188 | 191 |
| 189 /* Exported functions --------------------------------------------------------*/ | 192 /* Exported functions --------------------------------------------------------*/ |
| 190 | 193 |
| 191 uint8_t GFX_logoStatus(void) | 194 uint8_t GFX_logoStatus(void) |
| 2149 { | 2152 { |
| 2150 settings.dualFont = 0; | 2153 settings.dualFont = 0; |
| 2151 settings.actualFont = (tFont *)settings.font; | 2154 settings.actualFont = (tFont *)settings.font; |
| 2152 } | 2155 } |
| 2153 else | 2156 else |
| 2154 #ifndef BOOTLOADER_STANDALONE | 2157 //#ifndef BOOTLOADER_STANDALONE |
| 2155 if((*pText == '\005') && !minimal) | 2158 if((*pText == '\005') && !minimal) |
| 2156 { | 2159 { |
| 2157 newXdelta = GFX_write_char(hgfx, &settings, 'a', (tFont *)&Awe48); | 2160 newXdelta = GFX_write_char(hgfx, &settings, 'a', (tFont *)&Awe48); |
| 2158 settings.Xdelta = newXdelta; | 2161 settings.Xdelta = newXdelta; |
| 2159 } | 2162 } |
| 2162 { | 2165 { |
| 2163 newXdelta = GFX_write_char(hgfx, &settings, 'b', (tFont *)&Awe48); | 2166 newXdelta = GFX_write_char(hgfx, &settings, 'b', (tFont *)&Awe48); |
| 2164 settings.Xdelta = newXdelta; | 2167 settings.Xdelta = newXdelta; |
| 2165 } | 2168 } |
| 2166 else | 2169 else |
| 2167 #endif | 2170 //#endif |
| 2168 if((*pText >= '\020') && (*pText <= '\032') && !minimal) | 2171 if((*pText >= '\020') && (*pText <= '\032') && !minimal) |
| 2169 settings.color = *pText - '\020'; | 2172 settings.color = *pText - '\020'; |
| 2170 else | 2173 else |
| 2171 if((*pText == '\034') && !minimal) | 2174 if((*pText == '\034') && !minimal) |
| 2172 settings.spaceMode = 1; | 2175 settings.spaceMode = 1; |
| 3384 return result; | 3387 return result; |
| 3385 } | 3388 } |
| 3386 | 3389 |
| 3387 void GFX_LTDC_Init(void) | 3390 void GFX_LTDC_Init(void) |
| 3388 { | 3391 { |
| 3389 /* | 3392 if (hardwareDisplay == 1) |
| 3390 HSYNC=10 (9+1) | 3393 { |
| 3391 HBP=10 (19-10+1) | 3394 GFX_LTDC_Init_display1(); |
| 3392 ActiveW=480 (499-10-10+1) | 3395 } |
| 3393 HFP=8 (507-480-10-10+1) | 3396 else |
| 3394 | 3397 { |
| 3395 VSYNC=2 (1+1) | 3398 GFX_LTDC_Init_display0(); |
| 3396 VBP=2 (3-2+1) | 3399 } |
| 3397 ActiveH=800 (803-2-2+1) | 3400 } |
| 3398 VFP=2 (805-800-2-2+1) | 3401 |
| 3399 */ | 3402 void GFX_LTDC_Init_display0(void) |
| 3400 | 3403 { |
| 3401 /* Timing configuration */ | 3404 /* Timing configuration */ |
| 3405 | |
| 3406 #define ActiveH_d0 800 | |
| 3407 #define ActiveW_d0 480 | |
| 3408 | |
| 3409 #define Hsync_d0 10 | |
| 3410 #define HFP_d0 8 | |
| 3411 #define HBP_d0 10 | |
| 3412 | |
| 3413 #define Vsync_d0 2 | |
| 3414 #define VFP_d0 2 | |
| 3415 #define VBP_d0 2 | |
| 3416 | |
| 3417 | |
| 3402 /* Horizontal synchronization width = Hsync - 1 */ | 3418 /* Horizontal synchronization width = Hsync - 1 */ |
| 3403 LtdcHandle.Init.HorizontalSync = 9; | 3419 LtdcHandle.Init.HorizontalSync = Hsync_d0 - 1; |
| 3404 /* Vertical synchronization height = Vsync - 1 */ | 3420 /* Vertical synchronization height = Vsync - 1 */ |
| 3405 LtdcHandle.Init.VerticalSync = 1; | 3421 LtdcHandle.Init.VerticalSync = Vsync_d0 - 1; |
| 3406 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ | 3422 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ |
| 3407 LtdcHandle.Init.AccumulatedHBP = 19; | 3423 LtdcHandle.Init.AccumulatedHBP = Hsync_d0 + HBP_d0 - 1; |
| 3408 /* Accumulated vertical back porch = Vsync + VBP - 1 */ | 3424 /* Accumulated vertical back porch = Vsync + VBP - 1 */ |
| 3409 LtdcHandle.Init.AccumulatedVBP = 3; | 3425 LtdcHandle.Init.AccumulatedVBP = Vsync_d0 + VBP_d0 - 1; |
| 3410 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ | 3426 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ |
| 3411 LtdcHandle.Init.AccumulatedActiveW = 499;//500;//499; | 3427 LtdcHandle.Init.AccumulatedActiveW = Hsync_d0 + HBP_d0 + ActiveW_d0 - 1; |
| 3412 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ | 3428 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ |
| 3413 LtdcHandle.Init.AccumulatedActiveH = 803; | 3429 LtdcHandle.Init.AccumulatedActiveH = Vsync_d0 + VBP_d0 + ActiveH_d0 - 1; |
| 3414 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ | 3430 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ |
| 3415 LtdcHandle.Init.TotalWidth = 507;//508;//507; | 3431 LtdcHandle.Init.TotalWidth = Hsync_d0 + HBP_d0 + ActiveW_d0 + HFP_d0 - 1; |
| 3416 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ | 3432 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ |
| 3417 LtdcHandle.Init.TotalHeigh = 805; | 3433 LtdcHandle.Init.TotalHeigh = Vsync_d0 + VBP_d0 + ActiveH_d0 + VFP_d0 - 1; |
| 3418 | 3434 |
| 3419 /* Configure R,G,B component values for LCD background color */ | 3435 /* Configure R,G,B component values for LCD background color */ |
| 3420 LtdcHandle.Init.Backcolor.Red= 0; | 3436 LtdcHandle.Init.Backcolor.Red= 0; |
| 3421 LtdcHandle.Init.Backcolor.Blue= 0; | 3437 LtdcHandle.Init.Backcolor.Blue= 0; |
| 3422 LtdcHandle.Init.Backcolor.Green= 0; | 3438 LtdcHandle.Init.Backcolor.Green= 0; |
| 3425 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ | 3441 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ |
| 3426 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ | 3442 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ |
| 3427 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ | 3443 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ |
| 3428 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ | 3444 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ |
| 3429 | 3445 |
| 3430 /* done in main.c SystemClockConfig | 3446 /* done in base.c SystemClockConfig |
| 3431 | 3447 |
| 3432 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; | 3448 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; |
| 3433 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; | 3449 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; |
| 3434 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; | 3450 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; |
| 3435 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; | 3451 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; |
| 3442 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;//LTDC_PCPOLARITY_IPC; | 3458 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;//LTDC_PCPOLARITY_IPC; |
| 3443 | 3459 |
| 3444 LtdcHandle.Instance = LTDC; | 3460 LtdcHandle.Instance = LTDC; |
| 3445 | 3461 |
| 3446 /* Configure the LTDC */ | 3462 /* Configure the LTDC */ |
| 3447 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // auch init der GPIO Pins | 3463 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // initialize GPIO Pins, too |
| 3464 { | |
| 3465 /* Initialization Error */ | |
| 3466 GFX_Error_Handler(); | |
| 3467 } | |
| 3468 } | |
| 3469 | |
| 3470 | |
| 3471 void GFX_LTDC_Init_display1(void) | |
| 3472 { | |
| 3473 /* Timing configuration */ | |
| 3474 #define ActiveH_d1 800 | |
| 3475 #define ActiveW_d1 480 | |
| 3476 | |
| 3477 #define Hsync_d1 2 | |
| 3478 #define HFP_d1 8 | |
| 3479 #define HBP_d1 8 | |
| 3480 | |
| 3481 #define Vsync_d1 2 | |
| 3482 #define VFP_d1 4 // make sure this value * VSYNC is also set in display.c for OLED_VFP_SET | |
| 3483 #define VBP_d1 4 // make sure this value * VSYNC is also set in display.c for OLED_VBP_SET | |
| 3484 | |
| 3485 /* Horizontal synchronization width = Hsync - 1 */ | |
| 3486 LtdcHandle.Init.HorizontalSync = Hsync_d1 - 1; | |
| 3487 /* Vertical synchronization height = Vsync - 1 */ | |
| 3488 LtdcHandle.Init.VerticalSync = Vsync_d1 -1; | |
| 3489 /* Accumulated horizontal back porch = Hsync + HBP - 1 */ | |
| 3490 LtdcHandle.Init.AccumulatedHBP = Hsync_d1 + HBP_d1 - 1; | |
| 3491 /* Accumulated vertical back porch = Vsync + VBP - 1 */ | |
| 3492 LtdcHandle.Init.AccumulatedVBP = Vsync_d1 + VBP_d1 - 1; | |
| 3493 /* Accumulated active width = Hsync + HBP + Active Width - 1 */ | |
| 3494 LtdcHandle.Init.AccumulatedActiveW = Hsync_d1 + HBP_d1 + ActiveW_d1 - 1; | |
| 3495 /* Accumulated active height = Vsync + VBP + Active Heigh - 1 */ | |
| 3496 LtdcHandle.Init.AccumulatedActiveH = Vsync_d1 + VBP_d1 + ActiveH_d1 - 1; | |
| 3497 /* Total width = Hsync + HBP + Active Width + HFP - 1 */ | |
| 3498 LtdcHandle.Init.TotalWidth = Hsync_d1 + HBP_d1 + ActiveW_d1 + HFP_d1 - 1; | |
| 3499 /* Total height = Vsync + VBP + Active Heigh + VFP - 1 */ | |
| 3500 LtdcHandle.Init.TotalHeigh = Vsync_d1 + VBP_d1 + ActiveH_d1 + VFP_d1 - 1; | |
| 3501 | |
| 3502 /* Configure R,G,B component values for LCD background color */ | |
| 3503 LtdcHandle.Init.Backcolor.Red= 0; | |
| 3504 LtdcHandle.Init.Backcolor.Blue= 0; | |
| 3505 LtdcHandle.Init.Backcolor.Green= 0; | |
| 3506 | |
| 3507 /* LCD clock configuration */ | |
| 3508 /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 Mhz */ | |
| 3509 /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 Mhz */ | |
| 3510 /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 Mhz */ | |
| 3511 /* LTDC clock frequency = PLLLCDCLK / LTDC_PLLSAI_DIVR_8 = 48/4 = 6Mhz */ | |
| 3512 | |
| 3513 /* done in base.c SystemClockConfig | |
| 3514 | |
| 3515 PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; | |
| 3516 PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; | |
| 3517 PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; | |
| 3518 PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; | |
| 3519 HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); | |
| 3520 */ | |
| 3521 /* Polarity */ | |
| 3522 LtdcHandle.Init.HSPolarity = LTDC_HSPOLARITY_AL; | |
| 3523 LtdcHandle.Init.VSPolarity = LTDC_VSPOLARITY_AL; | |
| 3524 LtdcHandle.Init.DEPolarity = LTDC_DEPOLARITY_AL; | |
| 3525 LtdcHandle.Init.PCPolarity = LTDC_PCPOLARITY_IIPC;//LTDC_PCPOLARITY_IPC; | |
| 3526 | |
| 3527 LtdcHandle.Instance = LTDC; | |
| 3528 | |
| 3529 /* Configure the LTDC */ | |
| 3530 if(HAL_LTDC_Init(&LtdcHandle) != HAL_OK) // initialize GPIO Pins, too | |
| 3448 { | 3531 { |
| 3449 /* Initialization Error */ | 3532 /* Initialization Error */ |
| 3450 GFX_Error_Handler(); | 3533 GFX_Error_Handler(); |
| 3451 } | 3534 } |
| 3452 } | 3535 } |
