S3C6410驱动I80接口LCM
来源:互联网 发布:mastercam9.1软件下载 编辑:程序博客网 时间:2024/05/17 23:50
在嵌入式的主流 LCD屏中主要支持两大类的硬件接口,一种是常见的RGB接口,另外一种是MCU接口.后面因为最早是针对单片机的领域在使用,因此得名.后在中低端手机大量使用,其主要特点是价格便宜的.
RGB屏只需显存组织好数据。启动显示后。LCD-DMA会自动把显存通过RGB接口送到LCM。
而MCU屏则需要发送画点的命令来修改MCU内部RAM。(即不能直接MCU屏RAM)
所以RGB显示速度明显比MCU快,而且播放视频方面,MCU-LCD也比较慢.
MCU管脚的控制脚有5个
- CS 片选信号
- RS (置1为写数据,置0为写命令)
- /WR (为0表示写数据)
- /RD (为0表示读数据)
- RESET 复位LCD( 用固定命令系列 0 1 0来复位)
- SYS_CSx 对应CS
- SYS_OE 对应RD
- SYS_WE对应WR
- SYS_RS对应RS
- 这里没有对应RESET,直接采用某一个IO口来代替。
在mini6410中 这里采用VD[21]即GPJ5来充当RESET脚 - 数据脚 输出VDOUT[17:0],与RGB管脚不一样的是,MCU-LCD还带有 VDIN[17:0],即显存中的数据可以通过命令读取出来。
我们测试是采用学生公司的MCU LCM,爱诺信2.8"的mcu屏。因为接口不是完全兼容,因此只能用采用复杂连线板来匹配。开发板使用的是mini6410。
这个LCM按其管脚要求配置成 16bpp(565)。这是LCM一侧的跳线配置。
相应的,在S3C6410一侧使用VD[0-15]
因此在S3C6410 一侧,采用VD[0-15]来与其对接
- RESET : 这里使用VD[21]来当RESET线,即 GPJ5的output脚.
- CS0: 这里复用了HSYNC信号脚,即使用GPJ8
- OE: 在引脚上悬空,即始终为高,这样不影响结果。
- WE: 复用了VCLK信号脚,即采用 GPJ11脚
- RS 复用了VDEN信号脚,即采用 GPJ10脚
I80 硬件波形分析
---------------------------------------------------------
启动波形
根据I80的要求,每次如果需要RESET LCD屏,需要用软件发送 101序列。
这是MCU-LCD IC里的RESET波形图
这里我们实测LCD屏的启动波形
MCU-LCD初始化屏幕,一般出现如下画面表示硬件连线正确,并且初始化成功.
写入波形
在MCU-LCD中,用RS脚来区别是向MCU屏发送命令还是数据。而且通常每一种MCU屏有一组初始化命令,它具体的序列取决了不同硬件,所以不同型号的MCU-LCD屏初始化命令序列是不一样的,这个要由生产厂家来提供。
参考S3C6410提供的I80标准波形,在写入时,WE必须是低电平,RS取决于写入命令还数据。CS是片选有效,是低电平有效。
//MCU屏要求,每次Reset要求送一个 1,0,1的波形
void LCD_MCU_Reset()
{
#ifdef LCD_TYPE_MCU_NOAIS28
rGPJCON = (rGPJCON & ~(0x3<<10)) | (0x1<<10);
rGPJDAT |= (0X1<<5);
Delay(100);
rGPJDAT &= ~(0X1<<5);
Delay(100);
rGPJDAT |= (0X1<<5);
Delay(100);
#endif
}
LCD_MCU_Write_Register(0x00E3,0x3008);
LCD_MCU_Write_Register(0x00E7,0x0012);
LCD_MCU_Write_Register(0x00EF,0x1231);
LCD_MCU_Write_Register(0x0001,0x0100);
LCD_MCU_Write_Register(0x0002,0x0700);
LCD_MCU_Write_Register(0x0003,0x1030);
LCD_MCU_Write_Register(0x0004,0x0000);
LCD_MCU_Write_Register(0x0008,0x0207);
LCD_MCU_Write_Register(0x0009,0x0000);
LCD_MCU_Write_Register(0x000A,0x0000);
LCD_MCU_Write_Register(0x000C,0x0000);
LCD_MCU_Write_Register(0x000D,0x0000);
LCD_MCU_Write_Register(0x000F,0x0000);
LCD_MCU_Write_Register(0x0010,0x0000);
LCD_MCU_Write_Register(0x0011,0x0007);
LCD_MCU_Write_Register(0x0012,0x0000);
LCD_MCU_Write_Register(0x0013,0x0000);
Delay(10);
LCD_MCU_Write_Register(0x0010,0x1490);
LCD_MCU_Write_Register(0x0011,0x0227);
Delay(10);
LCD_MCU_Write_Register(0x0012,0x001A);
Delay(10);
LCD_MCU_Write_Register(0x0013,0x0700);//1000
LCD_MCU_Write_Register(0x0029,0x0001);// 0015
LCD_MCU_Write_Register(0x002B,0x000C);
Delay(10);
LCD_MCU_Write_Register(0x0020,0x0000);
LCD_MCU_Write_Register(0x0021,0x0000);
LCD_MCU_Write_Register(0x0030,0x0000);
LCD_MCU_Write_Register(0x0031,0x0607);
LCD_MCU_Write_Register(0x0032,0x0305);
LCD_MCU_Write_Register(0x0035,0x0000);
LCD_MCU_Write_Register(0x0036,0x1604);
LCD_MCU_Write_Register(0x0037,0x0204);
LCD_MCU_Write_Register(0x0038,0x0001);
LCD_MCU_Write_Register(0x0039,0x0707);
LCD_MCU_Write_Register(0x003C,0x0000);
LCD_MCU_Write_Register(0x003D,0x000F);
LCD_MCU_Write_Register(0x0050,0x0000);
LCD_MCU_Write_Register(0x0051,0x00EF);
LCD_MCU_Write_Register(0x0052,0x0000);
LCD_MCU_Write_Register(0x0053,0x013F);
LCD_MCU_Write_Register(0x0060,0xa700);
LCD_MCU_Write_Register(0x0061,0x0001);
LCD_MCU_Write_Register(0x006A,0x0000);
LCD_MCU_Write_Register(0x0080,0x0000);
LCD_MCU_Write_Register(0x0081,0x0000);
LCD_MCU_Write_Register(0x0082,0x0000);
LCD_MCU_Write_Register(0x0083,0x0000);
LCD_MCU_Write_Register(0x0084,0x0000);
LCD_MCU_Write_Register(0x0085,0x0000);
LCD_MCU_Write_Register(0x0090,0x0010);
LCD_MCU_Write_Register(0x0092,0x0600);
LCD_MCU_Write_Register(0x0093,0x0003);
LCD_MCU_Write_Register(0x0095,0x0110);
LCD_MCU_Write_Register(0x0097,0x0000);
LCD_MCU_Write_Register(0x0098,0x0000);
LCD_MCU_Write_Register(0x0007,0x0133);
#define LCD_MCU_START_WRITE() rI80IFCONB0 |=(1<<9)
void LCD_MCU_Write_Cmd(unsigned short cmd)
{
rLDI_CMD0 = cmd;
//等Normal command 变为0
while(!( (rI80IFCONB0& (1<<9)) == 0));
rLDI_CMDCON0 = (rLDI_CMDCON0 & (0x0)) |((0x01)<<0); //01 : Normal Command Enable
rLDI_CMDCON1 = (rLDI_CMDCON1 & (0x0)) |((0x0)<<0); //Command 0 RS control,送命令
LCD_MCU_START_WRITE();
Delay(10);
}
void LCD_MCU_Write_Data(unsigned short data)
{
rLDI_CMD0 = data;
//等Normal command 变为0
while(!( (rI80IFCONB0& (1<<9)) == 0));
rLDI_CMDCON0 = (rLDI_CMDCON0 & (0x0)) |((0x01)<<0); //01 : Normal Command Enable
rLDI_CMDCON1 = (rLDI_CMDCON1 & (0x0)) |((0x1)<<0); //Command 0 RS control ,送数据
LCD_MCU_START_WRITE();
Delay(10);
}
- S3C6410驱动I80接口LCM
- S3C6410驱动I80接口LCD
- S3C6410驱动I80接口LCD
- 2416 RBG 接口 LCD 换成 I80 接口 LCD 驱动修改 EBOOT 部分
- 2416 RBG 接口 LCD 换成 I80 接口 LCD 驱动修改 NK 部分
- ARM7-LPC2132驱动LCM的接口说明
- LCD的接口- I80(MCU)接口
- EBI (外部总线接口) 控制I80接口LCD屏
- lcm驱动简单认识
- MTK6577---LCM驱动分析
- MTK LCM驱动移植
- lcm驱动流程
- lcm 驱动分析
- mtk lcm驱动添加
- mtk lcm驱动流程
- MTK LCM驱动移植
- lcm 接口总结
- S3C6410驱动IDE硬盘
- mongo数据库--非关系型数据库
- centos wget 命令安装
- MyEclipse导入非本机项目jdk版本不同异常
- 【剑指offer】面试题18:树的子结构
- Ural - 1753 Bookshelf
- S3C6410驱动I80接口LCM
- HelloWorld
- [数据库]MySQL Hash索引和B-Tree索引的区别
- hibernate session缓存机制
- Ubuntu 14.04 x64 安装 Android SDK
- web socket
- SpringDI
- 代码简洁之道——注释
- 制作简易计算器封装类