LPC2388外部存储器控制器EMC使用问题
时间:10-02
整理:3721RD
点击:
我用的是LPC2388芯片,现已实现IO驱动LCD屏的功能,背光点亮,背景颜色,都可以实现。
我现在想用总线方式把LCD背我驱亮。但却未能实现 ,我是这样设计的。
P3.0到P3.7接的是D0到D7
P4.0接的是LCD RS,当RS为1时是指令,为0时是数据
P4.2接的是LCD RST 是LCD复位
P4.24接的是LCD RD 为LCD读信号
P4.25接的是LCD WR 为LCD写信号
P4.30接的是LCD CS 为LCD的片选
EMC的A[15:0] 接的是P4.0到P4.15
EMC的D[7:0]接的是P3.0到P3.7
EMC的BLS0接的是P4.25
EMC的OE接的是P4.24
EMC的CS0 、CS1接的是P4.30和P4.31
Memory bank selection
Chip Select Pin Address Range Memory Type Size of Range
CS0 0x8000 0000 - 0x8000 FFFF Static 64 kB
CS1 0x8100 0000 - 0x8100 FFFF Static 64 kB
我的C代码是这样写的。
#define LCD_CMD_ADDR (*(volatile unsigned long *)(0x80000001))
#define LCD_DATA_ADDR (*(volatile unsigned long *)(0x80000000))
void EMC_init()
{
uint32 temp=0x0;
PCONP = PCONP | 0x00000800;
EMC_CTRL = 0x00000001;
PINSEL6 = 0X00005555;//D0-D7
PINSEL8 = 0X55555555;//A0-A15
temp = PINSEL9;
temp &=0xFF0FFFF;
PINSEL9 =temp | 0x50090000;//RD、 WR、 CS0、 CS1
//EMS write
EMC_STA_CFG1 = 0x00000100;//禁止页模式
EMC_STA_WAITWEN1 = 0x00000008;//写使能延时为1cclk
EMC_STA_WAITWR1 = 0x0000001f;//延时33cclk写
// //EMS read
EMC_STA_WAITOEN1 = 0x00000008;//输出使能延时为1cclk
EMC_STA_WAITRD1 = 0x0000001f;//延时为33cclk读
EMC_STA_WAITPAGE1 = 0x00000008;//页读模式延时为1cclk
EMC_STA_WAITTURN1 = 0x00000008;//总线空闲为1cclk
// EMC_STA_EXT_WAIT = 0x0000000f;//延长等待时间
}
void lcd_write_cmd(uint8 cmd)
{
LCD_CMD_ADDR = cmd;//写指令
}
void lcd_write_data(uint8 data)
{
LCD_DATA_ADDR = data;//写数据
}
void lcd_init()
{
os_dly_wait(200); //wait board power on
EMC_init();//EMC初始化
lcd_reset(); //LCD复位
lcd_initial();//LCD初始化
}
LCD的初始化是没有问题的,因为我已经用IO口成功把LCD屏背光点亮,现在想用总线驱亮,却不能成功,我已经找了好几天的原因,都没有找到,请各位高手,指教,我的原因出在哪 里。谢谢。
我现在想用总线方式把LCD背我驱亮。但却未能实现 ,我是这样设计的。
P3.0到P3.7接的是D0到D7
P4.0接的是LCD RS,当RS为1时是指令,为0时是数据
P4.2接的是LCD RST 是LCD复位
P4.24接的是LCD RD 为LCD读信号
P4.25接的是LCD WR 为LCD写信号
P4.30接的是LCD CS 为LCD的片选
EMC的A[15:0] 接的是P4.0到P4.15
EMC的D[7:0]接的是P3.0到P3.7
EMC的BLS0接的是P4.25
EMC的OE接的是P4.24
EMC的CS0 、CS1接的是P4.30和P4.31
Memory bank selection
Chip Select Pin Address Range Memory Type Size of Range
CS0 0x8000 0000 - 0x8000 FFFF Static 64 kB
CS1 0x8100 0000 - 0x8100 FFFF Static 64 kB
我的C代码是这样写的。
#define LCD_CMD_ADDR (*(volatile unsigned long *)(0x80000001))
#define LCD_DATA_ADDR (*(volatile unsigned long *)(0x80000000))
void EMC_init()
{
uint32 temp=0x0;
PCONP = PCONP | 0x00000800;
EMC_CTRL = 0x00000001;
PINSEL6 = 0X00005555;//D0-D7
PINSEL8 = 0X55555555;//A0-A15
temp = PINSEL9;
temp &=0xFF0FFFF;
PINSEL9 =temp | 0x50090000;//RD、 WR、 CS0、 CS1
//EMS write
EMC_STA_CFG1 = 0x00000100;//禁止页模式
EMC_STA_WAITWEN1 = 0x00000008;//写使能延时为1cclk
EMC_STA_WAITWR1 = 0x0000001f;//延时33cclk写
// //EMS read
EMC_STA_WAITOEN1 = 0x00000008;//输出使能延时为1cclk
EMC_STA_WAITRD1 = 0x0000001f;//延时为33cclk读
EMC_STA_WAITPAGE1 = 0x00000008;//页读模式延时为1cclk
EMC_STA_WAITTURN1 = 0x00000008;//总线空闲为1cclk
// EMC_STA_EXT_WAIT = 0x0000000f;//延长等待时间
}
void lcd_write_cmd(uint8 cmd)
{
LCD_CMD_ADDR = cmd;//写指令
}
void lcd_write_data(uint8 data)
{
LCD_DATA_ADDR = data;//写数据
}
void lcd_init()
{
os_dly_wait(200); //wait board power on
EMC_init();//EMC初始化
lcd_reset(); //LCD复位
lcd_initial();//LCD初始化
}
LCD的初始化是没有问题的,因为我已经用IO口成功把LCD屏背光点亮,现在想用总线驱亮,却不能成功,我已经找了好几天的原因,都没有找到,请各位高手,指教,我的原因出在哪 里。谢谢。
怎么没有人帮忙看下吗,
你确定你的屏幕可以显示了吗?首先一点背光点亮以及显示相应的背景色和你的程序其实是没关系的,这和屏幕本身以及背光电路有关,就是说背光电源电路对了,背光点亮,背景颜色,都已经实现了。
为了确定你的LCD初始化是对的,你可以写个简单的彩色刷屏程序。
我没有用过LPC2388,只做过24XX系列的,另外我可以告诉你的是EMC的控制器是它自带的,你控制外部存储器的时候其实可以在启动代码里配置好,可以不自己写。
ylbaiwy
我确定,我的屏是我用IO驱起来的,实现了屏的背光和背景颜色,因为我不仅通过IO实现了屏的各种背景颜色,而且还实现 了画点画线。
对,LPC2388是用EMC来控制外部存储器的,而且在启动代码里也已经配置好了,和我自己写的配置是一样的,但我却不太明白怎么用总线方式把屏驱起来,实现背光点亮、背景颜色等。
假设你的EMC是对的。你的屏幕是多大的?分辨率是多少?每秒刷多少帧?主频给的多少?
学习学习.
我的屏是480*272的,每秒刷多少帧,主频给的多少,这个我真不清楚,请问,怎么可以查到这些参数。谢谢。