本帖最后由 王者之心style 于 2014-10-10 15:58 编辑
1.原理图分析左图是tiny6410实际LCD电路图,右图是S70液晶屏参考电路图。在左图中,VDD5V_1,VDD5V_2是用来调节背光的引脚。VD0-VD23对应右图的R0-B7,分为三组,是R,G,B三原色,每组8个引脚。VDEN-VCLK是LCD控制配置用管脚。下面AIN6-AIN5是触摸屏控制引脚。
根据原理图知Rx和Gx连GPIx,Bx连GPJ0-GPJ7。控制信号连GPG8-GPJ11。
2.芯片手册导读
2.1配置GPIO
首先配置GPIO的引脚为LCD模式。根据截图应全部填入10。因此代码应为,GPICON = 0xAAAAAAAA;
GPJ的前8位也一样。
GPJ8-GPJ11配成LCD控制器的信号模式。
所以代码为GPJCON = 0x00AAAAAA; 2.2配置LCD控制器
根据手册的步骤来配置。
l 配置MIFPCON为普通模式
根据图示,需将MIFPCON的第3位填入0。所以代码为MIFPCON&= ~(1<<3);
l 配置SPCON为RGB模式 根据图示将SPCON的第1和0位填入01,所以代码为SPCON = (SPCON & ~(0x3))| 1;
l 配置VIDCON0,设置接口类型,时钟,极性和使能LCD控制器。 第27和26位填入00,再次配成RGB模式。
第18和17位填入00,配成RGB并行模式。
第16位填入0,配置时钟。
设置时钟源的系数。此处应根据LCD芯片手册填入CLKVAL的值。
根据LCD手册可以看出CLK的标准值是33.3M,根据上图公式,Video Clock Source是HCLK,大小是133M,因此33.3 = 133 / (CLKVAL + 1), 所以CLKVAL约等于3。因此向第16位填入3。
向第5位填入0,配置成普通模式.
向第4位写入1,选择CLKVAL_F。
向第3和第2位写入00,选择时钟源位HCLK。
向第1和第0位写入11,使能LCD控制器。
最终代码为VIDCON0 =(0<<26)|(0<<17)|(0<<16)|(3<<6)|(0<<5)|(1<<4)|(0<<2)|(3<<0); l 配置VIDCON1,设置信号极性。 向第6和第5位填入11,使HSYNC和VSYNC的信号波形的极性为相反。
下方第一幅图是S3C6410提供的时序图,可以看到HSYNC和VSYNC的信号波形开始是高电平。第二幅图是S70手册提供的时序图,可以看到HSYNC和VSYNC的信号波形开始是低电平,所以要把极性设为相反。
代码为VIDCON1 |= 1<<5 | 1<<6; l 配置VIDTCON0,设置VSYNC的三个参数。 根据下图所示,需配置VSPW, VBPD, LINEVAL,VFPD四个参数。去S70手册找。
根据S70给出的时序图可知,VSPW+1 = tvpw, VBPD +1 = tvb, LINEVAL + 1 = tvd, VFPD + 1 = tvfp。
由表知,VSPW可以设成2,VBPD为22,LINEVAL为479,VFPD为22。
根据下图,向第16位写入22,向第8位写入22,向第0位写入2。
最终代码为VIDTCON0 = VBPD<<16 | VFPD<<8 | VSPW<<0; l 配置VIDTCON1,设置HSYNC的三个参数。 根据下图所示,需配置HSPW, HBPD,HOZVAL, HFPD四个参数。去S70手册找。
根据S70给出的时序图可知,HSPW+1 = thpw, HBPD +1 = thb, HOZVAL + 1 = thd, HFPD + 1 = thfp。
由表知,HSPW可以设成30,HBPD为46,HOZVAL为799,HFPD为210。
根据下图,向第16位写入46,向第8位写入210,向第0位写入30。
最终代码为VIDTCON1 = HBPD<<16 | HFPD<<8 | HSPW<<0; l 配置VIDTCON2,设置长宽 根据上一节的计算,LINEVAL为479,HOZVAL为799。向第11位写入479,向第0位写入799。最终代码为VIDTCON2 = (LINEVAL << 11) |(HOZVAL << 0);
l 配置WINCON0,设置颜色格式。 向第5至2位写入1011,配置成24位格式。代码为WINCON0 |= 0xB<<2;
l 配置VIDOSD0A,VIDOSD0B,VIDOSD0C,设置边界。 A是左上角,B是右下角,C是整体大小。
最终代码为 #define LeftTopX 0 #define LeftTopY 0 #define RightBotX 799 #define RightBotY 479 VIDOSD0A = (LeftTopX<<11) | (LeftTopY << 0); VIDOSD0B = (RightBotX<<11) | (RightBotY << 0);
VIDOSD0C = (LINEVAL + 1) * (HOZVAL + 1); l 配置VIDW00ADD0B0,将framebuffer地址赋给LCD控制器。 代码为VIDW00ADD0B0 = FRAME_BUFFER;
代码为VIDW00ADD1B0 =(((HOZVAL + 1)*4 + 0) * (LINEVAL + 1)) & (0xffffff);
3.LCD代码设计 最终代码在下一附件。
如果各位网友觉得讲的还行,请在下面留言点赞。如果赞的多,我将在后续继续推出嵌入式linux的教学贴。
|