|
|
@ -19,10 +19,8 @@ |
|
|
LTDC_HandleTypeDef g_ltdc_handle; /* LTDC句柄 */ |
|
|
LTDC_HandleTypeDef g_ltdc_handle; /* LTDC句柄 */ |
|
|
DMA2D_HandleTypeDef g_dma2d_handle; /* DMA2D句柄 */ |
|
|
DMA2D_HandleTypeDef g_dma2d_handle; /* DMA2D句柄 */ |
|
|
|
|
|
|
|
|
/* 移除原始静态帧缓存数组定义 */ |
|
|
#define MAX_FRAME_WIDTH 1024 |
|
|
|
|
|
#define MAX_FRAME_HEIGHT 600 |
|
|
#define MAX_FRAME_WIDTH 1280 |
|
|
|
|
|
#define MAX_FRAME_HEIGHT 800 |
|
|
|
|
|
|
|
|
|
|
|
#if LTDC_PIXFORMAT == LTDC_PIXFORMAT_ARGB8888 || LTDC_PIXFORMAT == LTDC_PIXFORMAT_RGB888 |
|
|
#if LTDC_PIXFORMAT == LTDC_PIXFORMAT_ARGB8888 || LTDC_PIXFORMAT == LTDC_PIXFORMAT_RGB888 |
|
|
#define BYTES_PER_PIXEL 4 |
|
|
#define BYTES_PER_PIXEL 4 |
|
|
@ -234,8 +232,16 @@ void ltdc_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t colo |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
if (ex >= lcdltdc.pheight) ex = lcdltdc.pheight - 1; |
|
|
if (ex >= lcdltdc.pheight) |
|
|
if (sx >= lcdltdc.pheight) sx = lcdltdc.pheight - 1; |
|
|
{ |
|
|
|
|
|
ex = lcdltdc.pheight - 1; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (sx >= lcdltdc.pheight) |
|
|
|
|
|
{ |
|
|
|
|
|
sx = lcdltdc.pheight - 1; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
psx = sy; |
|
|
psx = sy; |
|
|
psy = lcdltdc.pheight - ex - 1; |
|
|
psy = lcdltdc.pheight - ex - 1; |
|
|
pex = ey; |
|
|
pex = ey; |
|
|
@ -246,10 +252,12 @@ void ltdc_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint32_t colo |
|
|
addr = ((uint32_t)g_ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize * (lcdltdc.pwidth * psy + psx)); |
|
|
addr = ((uint32_t)g_ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize * (lcdltdc.pwidth * psy + psx)); |
|
|
|
|
|
|
|
|
__HAL_RCC_DMA2D_CLK_ENABLE(); |
|
|
__HAL_RCC_DMA2D_CLK_ENABLE(); |
|
|
|
|
|
|
|
|
DMA2D->CR &= ~(DMA2D_CR_START); |
|
|
DMA2D->CR &= ~(DMA2D_CR_START); |
|
|
DMA2D->CR = DMA2D_R2M; |
|
|
DMA2D->CR = DMA2D_R2M; |
|
|
DMA2D->OPFCCR = LTDC_PIXFORMAT; |
|
|
DMA2D->OPFCCR = LTDC_PIXFORMAT; |
|
|
DMA2D->OOR = offline; |
|
|
DMA2D->OOR = offline; |
|
|
|
|
|
|
|
|
DMA2D->OMAR = addr; |
|
|
DMA2D->OMAR = addr; |
|
|
DMA2D->NLR = (pey - psy + 1) | ((pex - psx + 1) << 16); |
|
|
DMA2D->NLR = (pey - psy + 1) | ((pex - psx + 1) << 16); |
|
|
DMA2D->OCOLR = color; |
|
|
DMA2D->OCOLR = color; |
|
|
@ -292,11 +300,13 @@ void ltdc_color_fill(uint16_t sx, uint16_t sy, uint16_t ex, uint16_t ey, uint16_ |
|
|
addr = ((uint32_t)g_ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize * (lcdltdc.pwidth * psy + psx)); |
|
|
addr = ((uint32_t)g_ltdc_framebuf[lcdltdc.activelayer] + lcdltdc.pixsize * (lcdltdc.pwidth * psy + psx)); |
|
|
|
|
|
|
|
|
__HAL_RCC_DMA2D_CLK_ENABLE(); |
|
|
__HAL_RCC_DMA2D_CLK_ENABLE(); |
|
|
|
|
|
|
|
|
DMA2D->CR &= ~(DMA2D_CR_START); |
|
|
DMA2D->CR &= ~(DMA2D_CR_START); |
|
|
DMA2D->CR = DMA2D_M2M; |
|
|
DMA2D->CR = DMA2D_M2M; |
|
|
DMA2D->FGPFCCR = LTDC_PIXFORMAT; |
|
|
DMA2D->FGPFCCR = LTDC_PIXFORMAT; |
|
|
DMA2D->FGOR = 0; |
|
|
DMA2D->FGOR = 0; |
|
|
DMA2D->OOR = offline; |
|
|
DMA2D->OOR = offline; |
|
|
|
|
|
|
|
|
DMA2D->FGMAR = (uint32_t)color; |
|
|
DMA2D->FGMAR = (uint32_t)color; |
|
|
DMA2D->OMAR = addr; |
|
|
DMA2D->OMAR = addr; |
|
|
DMA2D->NLR = (pey - psy + 1) | ((pex - psx + 1) << 16); |
|
|
DMA2D->NLR = (pey - psy + 1) | ((pex - psx + 1) << 16); |
|
|
@ -448,7 +458,7 @@ int ltdc_init(void) |
|
|
lcdltdc.pwidth = 1024; lcdltdc.pheight = 600; |
|
|
lcdltdc.pwidth = 1024; lcdltdc.pheight = 600; |
|
|
lcdltdc.hsw = 20; lcdltdc.hbp = 140; lcdltdc.hfp = 160; |
|
|
lcdltdc.hsw = 20; lcdltdc.hbp = 140; lcdltdc.hfp = 160; |
|
|
lcdltdc.vsw = 3; lcdltdc.vbp = 20; lcdltdc.vfp = 12; |
|
|
lcdltdc.vsw = 3; lcdltdc.vbp = 20; lcdltdc.vfp = 12; |
|
|
ltdc_clk_set(300, 25, 6); |
|
|
ltdc_clk_set(129, 32, 5); |
|
|
} |
|
|
} |
|
|
else if (lcdid == 0X7018) |
|
|
else if (lcdid == 0X7018) |
|
|
{ |
|
|
{ |
|
|
|