void LcdInit(void) { unsigned int i; static const unsigned char message1[] = "\r\nEntering InitLCD()"; static const unsigned char message2[] = "\r\nEntering GenerateTestPattern()"; static const unsigned char message3[] = "\r\nEntering EnableLCD()"; static const unsigned char message4[] = "\r\nExiting LcdInit()\r\n"; unsigned char *pMsg = (unsigned char *)message1 - (unsigned char *)TEXT_BASE; LCD_INIT_STRUCTURE mylcd; #if 0 mylcd.xsize = 320; mylcd.horiz_front_porch = 20; mylcd.horiz_back_porch = 38; mylcd.horiz_sync_pulse = 30; mylcd.ysize = 240; mylcd.vert_front_porch = 5; mylcd.vert_back_porch = 15; mylcd.vert_sync_pulse = 3; mylcd.color_mode = COLOR_MODE_24BPP; mylcd.hclk_divider = 14; #else mylcd.xsize = 320; mylcd.horiz_front_porch = 20; mylcd.horiz_back_porch = 38; mylcd.horiz_sync_pulse = 30; mylcd.ysize = 240; mylcd.vert_front_porch = 5; mylcd.vert_back_porch = 15; mylcd.vert_sync_pulse = 3; mylcd.color_mode = COLOR_MODE_4BPP; mylcd.hclk_divider = 8; /* XXX - Ivan */ #endif for(i=0; i<(sizeof(message1)-1); i++) { while((U0LSR & (1<<5)) == 0); U0THR = *pMsg++; } lpc24xx_InitLCD(mylcd); pMsg = (unsigned char *)message2 - (unsigned char *)TEXT_BASE; for(i=0; i<(sizeof(message2)-1); i++) { while((U0LSR & (1<<5)) == 0); U0THR = *pMsg++; } //lpc24xx_show**bmp(); lpc24xx_GenerateTestPattern(); pMsg = (unsigned char *)message3 - (unsigned char *)TEXT_BASE; for(i=0; i<(sizeof(message3)-1); i++) { while((U0LSR & (1<<5)) == 0); U0THR = *pMsg++; } lpc24xx_EnableLCD(); pMsg = (unsigned char *)message4 - (unsigned char *)TEXT_BASE; for(i=0; i<(sizeof(message4)-1); i++) { while((U0LSR & (1<<5)) == 0); U0THR = *pMsg++; } } void lpc24xx_InitLCD(LCD_INIT_STRUCTURE lcd) { /* this needs to run from the ROM so skip that section for now */ #ifdef LCD_USE_MALLOC framebuffer = malloc(framebuffer_size); #else framebuffer = (void *)LCD_FRAMEBUFFER_START; //显示buf地址,0xa0f00000 #endif PINSEL4 = PINSEL4 & (~(0xfffff << 0)) | 0xfffff; //只使用lcd0~lcd3 PINSEL11 = PINSEL11 & (~0xf << 0) \ | (1 << 0); PCONP |= 1<<20; /* Turn On LCD PCLK */ delay_Ns(200); LCD_CTRL = (1 << LCD_CTRL_LCDEN); delay_Ns(20); LCD_UPBASE = ((uint32_t)framebuffer&0xfffffff8); /* make sure the framebuffer is DWORD aligned - fixme */ //LCD_LPBASE = ((uint32_t)framebuffer&0xfffffff8); //LCD_CTRL = 0; LCD_CFG = (uint32_t)lcd.hclk_divider << LCD_CFG_CLKDIV; LCD_TIMH = ((((uint32_t)lcd.horiz_back_porch-1) << LCD_TIMH_HBP ) | \ (((uint32_t)lcd.horiz_front_porch-1) << LCD_TIMH_HFP) | \ (((uint32_t)lcd.horiz_sync_pulse-1) << LCD_TIMH_HSW ) | \ (((lcd.xsize / 16) - 1) << LCD_TIMH_PPL ) ); LCD_TIMV = ( (((uint32_t)lcd.vert_back_porch) << LCD_TIMV_VBP ) | \ (((uint32_t)lcd.vert_front_porch) << LCD_TIMV_VFP) | \ (((uint32_t)lcd.vert_sync_pulse) << LCD_TIMV_VSW ) | \ (( lcd.ysize-1) << LCD_TIMV_LPP ) ); LCD_POL = ( (((uint32_t)0 ) << LCD_POL_PCD_HI ) | \ (((uint32_t)0 ) << LCD_POL_BCD ) | \ (((uint32_t)lcd.xsize-1 ) << LCD_POL_CPL ) | \ (((uint32_t)0 ) << LCD_POL_IOE ) | \ (((uint32_t)0 ) << LCD_POL_IPC ) | \ (((uint32_t)1 ) << LCD_POL_IHS ) | \ (((uint32_t)0 ) << LCD_POL_IVS ) | \ (((uint32_t)6 ) << LCD_POL_ACB ) | \ (((uint32_t)0 ) << LCD_POL_CLKSEL ) | \ (((uint32_t)4 ) << LCD_POL_PCD_LO ) ); LCD_LE = (10 << 0) | (1 << 16); LCD_INTMSK = 0; /* disable LCD interrupt */ //LCD_UPBASE = ((uint32_t)framebuffer&0xfffffff8); /* make sure the framebuffer is DWORD aligned - fixme */ //LCD_LPBASE = ((uint32_t)framebuffer&0xfffffff8); LCD_CTRL = ( /*(((uint32_t) 1 ) << LCD_CTRL_BGR ) | \*/ /* (((uint32_t) 1 ) << LCD_CTRL_LCDTFT ) | \*/ (((uint32_t) 0 ) << LCD_CTRL_LCDMONO8) | \ (((uint32_t) 1 ) << LCD_CTRL_LCDBW) | \ (((uint32_t)lcd.color_mode ) << LCD_CTRL_LCDBPP ) ); delay_Ns(20); LCD_CTRL |= (((uint32_t) 1 ) << LCD_CTRL_LCDPWR); delay_Ns(20); } void lpc24xx_GenerateTestPattern(uint8_t pattern) { uint32_t cntr; uint32_t * ptr; // if ( (framebuffer == 0) || (framebuffer_size == 0)) // return; #ifdef LCD_USE_MALLOC ptr = framebuffer; #else ptr = (void *)LCD_FRAMEBUFFER_START; #endif { int x, y; unsigned char *posy; unsigned char *posy1; int LCDx_bpp_res; LCDx_bpp_res = ((320) * (16))/8; for(y=0 ; y <( 240); y++) { posy = (unsigned char *)(LCD_FRAMEBUFFER_START+ y*LCDx_bpp_res); for(x=0;x < LCDx_bpp_res ; x++) { posy1=(unsigned char *)((unsigned int)(posy+x)^1); *(posy1)= boot_screenMap[y*LCDx_bpp_res+x];// 这一个图片数组38400,水平扫描,16位灰色 320x240 } } } 在uboot的命令行中,使用md a0f0000查看SDRAM的内容,已经是boot_screenMap数组的内容了但是屏幕上无显示 }
举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
79
331
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号