买了一个Tiny6410,配套的LCD是H43,现在在写触摸屏驱动,遇到了几个问题,首先是LCD的初始化代码:
复制代码- volatile unsigned int LCD_BUFFER[272][480];
- unsigned int addr = (unsigned int)LCD_BUFFER;
- void lcd_init(){
- GPECON = 0x00011111; //GPE0: for LCD Backlight ON-OFF. GPE1~4 is GPIO.
- GPEDAT = 0x00000001; //Backlight ON (some LCD(3.5) need it ,but NEC 4.3 not)
- GPEPUD = 0x00000000;
- //GPFCON = 0x96AAAAAA; //PWM1: for Backlight Dimming. GPF13 is USB_PWR. GPF0~12 is CAM I/F.
- // PWM0 Control Buzzer,but now we config it as OUTPUT!!!
- //GPFDAT = 0x00002000; //USB_PWR ON . Buzzer OFF .
- //GPFPUD = 0x00000000;
- GPFCON &= ~(0x3<<30);
- GPFCON |= 0x2<<30;
- GPFPUD = 0;
- GPICON = 0xAAAAAAAA;
- GPIPUD = 0x00000000;
- GPJCON = 0x00AAAAAA;
- GPJPUD = 0x00000000;
-
- SPCON &= ~(0x3);
- SPCON |= 1;
- MIFPCON &= ~(1<<3);
-
- VIDCON0 = (0<<29)|(0<<26)|(0<<17)|(0<<16)|(9<<6)|(0<<5)|(1<<4)|(0<<2);
- //(0<<29)|(0<<26)|(0<<17)|(1<<16)|(5<<6)|(0<<5)|(1<<4)|(0<<2);
- VIDCON1 = 1<<7;//1=RGB 类型LCD 设备在VCLK 上升沿得到视频数据
- //VIDCON1 = (1<<7);
- //+设置屏的时序
- VIDTCON0 = (20<<16)|(30<<8)|(20<<0);//这两个寄存器的怎么设都没变化
- VIDTCON1 = (20<<16)|(40<<8)|(60<<0);//
- VIDTCON2 = (271<<11)|(479);
- //-
- //WINCON0 = 8<<2;//(1<<17)|(3<<2);//窗口格式控制 0011=8BPP(palletized)
- WINCON0 = 0xb<<2;
- //+VIDOSDxA ,VIDOSDxB:窗口位置控制
- VIDOSD0A = (0<<11)|(0);
- VIDOSD0B = (479<<11)|(271<<0);
- VIDOSD0C = (((480*272*4)&0xFFFFFF)<<0);
- //-
- VIDW00ADD0B0 = ((addr>>24)<<24)|(addr&0xffffff);
- VIDW00ADD1B0 = (addr&0xffffff) + 480*272*4;
- //VIDW00ADD2 = (0<<13)|(480);
- //DITHMODE=(1<<5)|(1<<3)|(1<<1);
- //+开显示
- VIDCON0 |= 3;
- WINCON0 |= 1;
- //-
- }
|
这是参照一个参考例子做的,刚运行时以为正常了,但是仔细看时发现触摸屏少了一列
就是水平方向上地址为0的一列不见了,另外,VIDTCON0/VIDTCON1的值胡乱设置,屏幕都没有反应,图像位置根本没有变化