| 发表于:2007-09-27 14:36:35 楼主 |
大家知道,16位的制式为r 5 g 6 b 5,最多能显示2的5次方(即32级灰度),现在16位,640*480的,framebuffer已经可以在我自己的tft屏上正常运行,但是为了达到256级灰度必须改为24位的framebuffer, arm是s3c2440,tft屏是lg.philips lcd ,为了运行24位的framebuffer,我做了如下修改 1。我把16位驱动中的16位相关都改为24位的了,例如: if ( var-> bits_per_pixel == 24 ) {//change add var-> red.offset = 16; var-> red.length = 8; var-> green.offset = 8; var-> green.length = 8; var-> blue.offset = 0; var-> blue.length = 8; var-> transp.offset = var-> transp.length = 0; }else if ( var-> bits_per_pixel == 16 ) { var-> red.offset = 11; var-> red.length = 5; var-> green.offset = 5; var-> green.length = 6; var-> blue.offset = 0; var-> blue.length = 5; var-> transp.offset = var-> transp.length = 0; } 2。因为16位的framebuffer可以运行,我修改控制寄存器1,如下: 我修改了地址寄存器2,3,如下 .reg = { /*111111000 这里把寄存器改为13*/ .lcdcon1 = (1 < <8) ¦(1 < <7) ¦(3 < <5) ¦(13 < <1), /* 16bpp 24bpp*/ new_regs.lcdsaddr2 = lcdaddr_basel( ((unsigned long)videophysicaltemp + (var-> xres * 3 * (var-> yres/*-1*/))) > > 1);//change 2 to 3 new_regs.lcdsaddr3 = lcdaddr_offset(0) ¦ (lcdaddr_page(var-> xres*3/2) /*> > 1*/); 编译后运行,在屏幕上出现了(横4竖4)共16个小图象,都是24位的(用示波器检测过了), 这是怎么回事呢?是寄存器没有设置正确,还是在修改驱动时出现了问题呢? 本人新手,请大家指教,谢谢!! |
|
|
|
|