关于S3C2440的LCD控制

来源:互联网 发布:vscode 字体大小 编辑:程序博客网 时间:2024/06/06 08:53
关于S3C2440的LCD控制
2010-11-15 15:09
搞了好久,终于把那个LCD给搞定了,先分享一下经验 关于2440的LCD的控制器的讲解已经够都了,我不想重复了,也不想复制了,写点自己理解的东西,欢迎大家拍砖。 Lcd显示原理:程序构建一个显存在存储器中,例如unsigned int LCD_BUFFER[240][320],建的显存其实就是一个数组,要注意显存的大小要和屏幕的大小一致。 建好显存后,设置LCD控制器,主要是LCDCON1~5,控制显示时序和各种显示参数,这部分没什么问题,教程也很多,比较简单。 控制器设置好后,显示控制器将会将显存内的数据直接按照一定的时序输出显示在显示器上,时序控制器主要控制 帧同步信号(VSYNC/VFRAME)、同步脉冲信号(VLINE/HSYNC),像素时钟信号(VCLK),将显存内的数据显示出来。 由于显存是由编程实现的,要将图像数据显示出来,则要将显存数据的一些参数告诉给控制器(例如:显存大小,显存的起始地址,结束地址等),这样控制器才能知道从显存里面去提取数据来显示。将显存的参数告诉给控制器,主要通过LCDSADDR1~3来设定: LCDSADDR1:帧缓冲起始寄存器1, 首先知道一个概念,显存是存在存储器中的,显存首地址对应的是存储器中的一个地址, LCDSADDR1的[29:21]用来 存储 显存在存储器中的地址的[30:22]位,即为显存地址的段地址,故赋值语句应该写成 ((U32)LCD_BUFFER>>22)<<21,显存就是定义的数组,将数组的地址提取出来再提取它的[30:22]位,然后再赋给LCSSADDR1的[29:21]位,这句应该能理解。 LCDSADDR1的[20:0]用来存放显存的首地址的[21:1]位,就是刚才上面的那个地址,只不过上面的是段地址,下面放的是后面的位,故写成M5D((U32)LCD_BUFFER>>1);其中M5D用来提取低21位, 0~20。 LCDSADDR2:帧缓冲起始寄存器2 LCDSADDR2的[20:0]用来存放显存结束地址,显存首地址+显存大小=显存结束地址。表达式为M5D( ((U32)LCD_BUFFER+320*240*2)>>1 );显示屏共320*240个点,用16位显示,故显存大小为320*240*2个字节,如果显示是24位的,则应320*240*4. LCDSADDR3:帧缓冲起始寄存器3 LCDSADDR3的[21:11]用来确定虚拟屏的大小,不要虚拟屏可不管,主要是[10:0]位用来存储显示屏的页宽度,根据显示屏宽度设定为320即可。 上面简单的介绍了下LCD显示控制器的三个寄存器,如果要想搞亮屏幕的话,还需参考其他资料,另外,记得程序里面的RO BASE设定为0x32000000,我就在这搞了一阵。

 

原创粉丝点击