在线时间2 小时
UID3290028
注册时间2016-6-16
NXP金币0
该用户从未签到
新手上路

- 积分
- 18
- 最后登录
- 2018-6-12
|
官方提供的LCD demo中,主函数里只看到了触摸和光标,那么LCD的显示是在哪里实现的?
程序片段:
int c_entry (void) /* Main Program */
{
uint32_t i,j;
int cursor_x = 380, cursor_y = 200;
Bool Sts = FALSE;
SystemInit();
CGU_Init();
CGU_SetDIV(CGU_CLKSRC_IDIVE, 1);
CGU_EntityConnect(CGU_CLKSRC_PLL1, CGU_CLKSRC_IDIVE);
CGU_EntityConnect(CGU_CLKSRC_IDIVE,CGU_BASE_LCD);
SDRAM_Init();
/*pin set up for LCD */
scu_pinmux(0x07, 7, MD_PUP, FUNC3); /* LCD_PWR @ P7.7 */
scu_pinmux(0x04, 7, MD_PUP, FUNC0); /* LCD_DCLK @ P4.7 */
scu_pinmux(0x04, 5, MD_PUP, FUNC2); /* LCD_FP @ P4.5 */
scu_pinmux(0x04, 6, MD_PUP, FUNC2); /* LCD_ENAB_M @ P4.6 */
scu_pinmux(0x07, 6, MD_PUP, FUNC3); /* LCD_LP @ P7.6 */
scu_pinmux(0x04, 1, MD_PUP, FUNC2); /* LCD_VD_0 @ P4.1 */
scu_pinmux(0x04, 4, MD_PUP, FUNC2); /* LCD_VD_1 @ P4.4 */
scu_pinmux(0x04, 3, MD_PUP, FUNC2); /* LCD_VD_2 @ P4.3 */ //Uncommented by Kevin
scu_pinmux(0x04, 2, MD_PUP, FUNC2); /* LCD_VD_3 @ P4.2 */
scu_pinmux(0x08, 7, MD_PUP, FUNC3); /* LCD_VD_4 @ P8.7 */
scu_pinmux(0x08, 6, MD_PUP, FUNC3); /* LCD_VD_5 @ P8.6 */
scu_pinmux(0x08, 5, MD_PUP, FUNC3); /* LCD_VD_6 @ P8.5 */
scu_pinmux(0x08, 4, MD_PUP, FUNC3); /* LCD_VD_7 @ P8.4 */
scu_pinmux(0x07, 5, MD_PUP, FUNC3); /* LCD_VD_8 @ P7.5 */
scu_pinmux(0x04, 8, MD_PUP, FUNC2); /* LCD_VD_9 @ P4.8 */
scu_pinmux(0x04, 10, MD_PUP, FUNC2); /* LCD_VD_10 @ P4.10 */
scu_pinmux(0x04, 9, MD_PUP, FUNC2); /* LCD_VD_11 @ P4.9 */
scu_pinmux(0x08, 3, MD_PUP, FUNC3); /* LCD_VD_12 @ P8.3 */
scu_pinmux(0x0B, 6, MD_PUP, FUNC2); /* LCD_VD_13 @ PB.6 */
scu_pinmux(0x0B, 5, MD_PUP, FUNC2); /* LCD_VD_14 @ PB.5 */
scu_pinmux(0x0B, 4, MD_PUP, FUNC2); /* LCD_VD_15 @ PB.4 */
scu_pinmux(0x07, 4, MD_PUP, FUNC3); /* LCD_VD_16 @ P7.4 */
scu_pinmux(0x07, 3, MD_PUP, FUNC3); /* LCD_VD_17 @ P7.3 */ //Added by Kevin
scu_pinmux(0x07, 2, MD_PUP, FUNC3); /* LCD_VD_18 @ P7.2 */
scu_pinmux(0x07, 1, MD_PUP, FUNC3); /* LCD_VD_19 @ P7.1 */
scu_pinmux(0x0B, 3, MD_PUP, FUNC2); /* LCD_VD_20 @ PB.3 */
scu_pinmux(0x0B, 2, MD_PUP, FUNC2); /* LCD_VD_21 @ PB.2 */
scu_pinmux(0x0B, 1, MD_PUP, FUNC2); /* LCD_VD_22 @ PB.1 */
scu_pinmux(0x0B, 0, MD_PUP, FUNC2); /* LCD_VD_23 @ PB.0 */
// scu_pinmux(0x07, 0, MD_PUP, FUNC3); /* LCD_LE @ P7.0 */ //Commented by Kevin
// scu_pinmux(0x04, 4, MD_PUP, FUNC0); /* LCD_VD_2 @ P4.3 */ //Commented by Kevin
// scu_pinmux(0x04, 1, MD_PUP, FUNC0); /* LCDVDEN */ //Commented by Kevin
// Added by Kevin, for backlight control
scu_pinmux(0x08, 1, MD_PUP, FUNC0); /* P8.1 */
GPIO_SetDir(4,1<<1, 1); /* GPIO4[1] */
GPIO_SetDir(2,1<<4, 1);
GPIO_SetDir(2,1<<1, 1);
GPIO_SetDir(3,1<<8, 1); /*LCDLE*/
GPIO_SetDir(3,1<<11, 1);
/* LCDVDEN */
GPIO_ClearValue(2, 1<<1);
// Added by Kevin, Disable Backlight
GPIO_ClearValue(4,1<<1);
// M3Frequency is automatically set when SetClock(BASE_M3_CLK... was called.
SysTick_Config(CGU_GetPCLKFrequency(CGU_PERIPHERAL_M3CORE)/1000); // Generate interrupt @ 1000 Hz
msec=5;while(msec);
LPC_RGU->RESET_CTRL0 = (1UL << 16);
msec=5;while(msec);
/*Fill Colorbar only*/
for(i=0;i<LCD_WIDTH*LCD_HEIGHT/4;i++)
{
framebuffer[i] = 0x1F;
}
for(i=LCD_WIDTH*LCD_HEIGHT/4;i<LCD_WIDTH*LCD_HEIGHT*2/4;i++)
{
framebuffer[i] = 0x3F<<5;
}
for(i=LCD_WIDTH*LCD_HEIGHT*2/4;i<LCD_WIDTH*LCD_HEIGHT*3/4;i++)
{
framebuffer[i] = 0x1F<<11;
}
for (i=LCD_WIDTH*LCD_HEIGHT*3/4; i < LCD_WIDTH*LCD_HEIGHT; i++)
{
framebuffer[i] = 0xFFFF;
}
/* Fill NXP logo */
#if 1
for(j=0;j<LOGO_HEIGHT;j++)
{
for(i=0;i<LOGO_WIDTH;i++)
{
putpixel(i,j, image[(i+j*LOGO_WIDTH)]);
}
}
#endif
GPIO_SetValue(3, 1<<11);
LCD_Init(LPC_LCD, (LCD_CFG_Type*)&EA800x480);
// InitLcdController();
TSC2046_Init((TSC2046_Init_Type *)&TSC2046_800480_12bit);
LCD_SetFrameBuffer(LPC_LCD, (void*)framebuffer);
LCD_Power(LPC_LCD, ENABLE);
msec=100;while(msec);
LCD_Cursor_Enable(LPC_LCD, 0, DISABLE);
LCD_Cursor_Config(LPC_LCD, LCD_CURSOR_32x32, TRUE);
LCD_Cursor_WriteImage(LPC_LCD, 0, (void *)Cursor);
LCD_Cursor_SetPos(LPC_LCD,cursor_x,cursor_y);
LCD_Cursor_Enable(LPC_LCD, 0, ENABLE);
msec=20;while(msec);
// Added by Kevin, Enable Backlight
GPIO_SetValue(4,1<<1);
while (1)
{
Sts = GetTouchPos((int16_t*)&cursor_x, (int16_t*)&cursor_y);
if (Sts)
LCD_Cursor_SetPos(LPC_LCD, cursor_x, cursor_y);
}
}
最佳答案
这段只是把图像数据复制到SDRAM区。LCD_Init会完成LCD控制器的初始化,最后把SDRAM的区域作为LCD的Buffer指到LCD控制器中,这样LCD在刷屏的时候就自动通过DMA把SDRAM中的数据刷到LCD上 ...
|
|