|
我的问题是:我用2410点亮LCD屏的时候出现了图形倒置和错位(就是正常的WINCE界面照镜子,从镜子里看到的那样;还有一点错位,下面的工具条跑到上面了,图像向右偏,偏的那部分跑到左边来。)
我用的LCD屏型号是PT035TN01(INNOLUX的),这个屏要求初始化的时候配置LCD屏中的寄存器,配置时序类似SPI总线。
我用GPE8,9,10来模拟配置时序,把配置函数作为S3C2410DISP中的成员函数,在HardWareInitial里调用。代码如下:
void S3C2410DISP::PT035_Write(unsigned char RegAddr, unsigned char RegData)
{
unsigned char no;
unsigned short value;
v_pIOPRegs->rGPECON &= ~( 0x3<<16 | 0x3<<18 | 0x3<<20 ); //Clear GPE8,GPE9,GPE10
v_pIOPRegs->rGPECON |= ( 0x1<<16 | 0x1<<18 | 0x1<<20 ); //SET GPE8,GPE9,GPE10 as OUTPUT
v_pIOPRegs->rGPEUP |= (0x1<<10 | 0x1<<9 | 0x1<<8); //Disable GPE8,GPE9,GPE10 PULL_UP
v_pIOPRegs->rGPEDAT |= ( 0x1<<8 | 0x1<<9 ); //SET GPE8(SPENA),GPE9(SPCK)=1
v_pIOPRegs->rGPEDAT &= ~( 0x1<<10 ); //SET GPE10(SPDA)=0
v_pIOPRegs->rGPEDAT &= ~( 0x1<<8 ); //SET GPE8(SPENA)=0 START
PT035_Delay();
value = (RegAddr<<8) | (RegData & 0xFF);
for (no=0; no<16; no++)
{
v_pIOPRegs->rGPEDAT &= ~( 0x1<<9 ); //SET GPE9(SPCK)=0
if ((value & 0x8000) == 0x8000)
{
v_pIOPRegs->rGPEDAT |= ( 0x1<<10 ); //SET GPE10(SPDA)=1;
}
else
{
v_pIOPRegs->rGPEDAT &= ~( 0x1<<10 ); //SET GPE10(SPDA)=0;
}
PT035_Delay();
v_pIOPRegs->rGPEDAT |= ( 0x1<<9 ); //SET GPE9(SPCK)=1
value = ( value<<1 );
PT035_Delay();
}
void S3C2410DISP::PT035_Delay()
{
int i;
for(i=0;i<5000;i++);
RETAILMSG(0,(TEXT("PT035_Delay is called.\r\n")));
}
void S3C2410DISP::PT035_INIT()
{
PT035_Write(0x02,0x07); //R00 SPI_write(Address+"write"+0,Data)
//可以通过该寄存器设置测试模式
PT035_Write(0x06,0x40); //R01
PT035_Write(0x0a,0x13); //R02
PT035_Write(0x0e,0xCC); //R03 控制输入数据的格式初始话阶段设置为24bit RGB HV模式
PT035_Write(0x12,0x45); //R04
PT035_Write(0x16,0x0C); //R05
PT035_Write(0x1e,0x02); //R07
PT035_Write(0x22,0x08); //R08
PT035_Write(0x26,0x40); //R09 控制显示的亮度
PT035_Write(0x2a,0x88); //R0A
PT035_Write(0x2e,0x88); //R0B
PT035_Write(0x32,0x20); //R0C
PT035_Write(0x36,0x20); //R0D
RETAILMSG(1,(TEXT("PT035_INIT is excuted.\r\n")));
}
当内核启动以后,所有的打印信息都可以在串口上读到,但是当我变化寄存器配置内容的时候(上面红色的),发现LCD显示没有任何变化,而后我就将这部分配置代码全部注释,发现LCD显示依然没有任何变化,我想这一定是GPIO没有成功把配置数据写到LCD屏的相应的寄存器中。
请问为什么会写不进去呢?以上这些地址(0x02,0x06,0x0a,0x0e...)是LCD的Datasheet中给出的,是不是系统不承认,需要在.bib或者什么文件里添加LCD地址信息?还是硬件电路有问题?还是GPIO配置的不对?
由于我用GPIO模拟的类似SPI总线只在初始化的时候使用,用示波器很难捕获,请问怎样才能检测呢?
谢谢能读完贴的,如果能帮我解决,就烦请举手之劳。![]()
还有一个问题是,GPIO的PULLUP什么时候该ENable和Disable?
|
|