用zlg的smartarm2200(其中CPU已经更换为LPC2294),液晶屏使用的是金鹏电子的OCM480272T430-1B。当使用IO作驱动的时候,屏能正常工作。其基本代码为:
#define
P_D0
0x00010000
//D0--P2.16
#define
P_D1
0x00020000
//D1--P2.17
#define
P_D2
0x00040000
//D2--P2.18
#define
P_D3
0x00080000
//D3--P2.19
#define
P_D4
0x00100000
//D4--P2.20
#define
P_D5
0x00200000
//D5--P2.21
#define
P_D6
0x00400000
//D6--P2.22
#define
P_D7
0x00800000
//D7--P2.23
#define
P_RD
0x00020000
//--P0.17
#define
P_WR
0x00040000
//--P0.18
#define
P_CS
0x00080000
//--P0.19
#define
P_RS
0x00100000
//--P0.20
#define
P_RST
0x00800000
//--P0.23
将以上IO均设置成GPIO。
void wr_shju(unsigned char data)
//写数据
{
IO2SET = IO2SET |
(data<<16);
IO2CLR = IO2CLR |
(~(data<<16));
}
unsigned char rd_shju(void)
//读数据
{
uint32
i;
i=IO2PIN;
i=i>>16;
return ((unsigned char)(i));
}
启动代码使用zlg的代码,屏能正常工作。
将屏的CS端接开发板的Ncs2以后,尝试以总线方式驱动。在代码中做如下修改:
#define
P_TH_ADDR
(*((volatile uint8 *) 0x82000000))
//nCS2控制下的液晶屏地址
void wr_shju(unsigned char data)
{
//IO2SET = IO2SET |
(data<<16);
//IO2CLR = IO2CLR |
(~(data<<16));
P_TH_ADDR=data<<16;
}
unsigned char rd_shju(void)
{
uint32
i;
i=P_TH_ADDR;
i=i>>16;
return ((unsigned char)(i));
}
说明:因为我的BANK定义为32位数据总线,屏的D0接ARM的D16,所以需要移动16位
启动代码中设置为:
LDR
R0, =PINSEL2
IF :DEF: EN_CRP
LDR
R1, =0x0f814920
ELSE
LDR
R1, =0x0f814924
ENDIF
STR
R1, [R0]
LDR
R0, =BCFG0
LDR
R1, =0x1000ffef
STR
R1, [R0]
LDR
R0, =BCFG1
LDR
R1, =0x1000ffef
STR
R1, [R0]
LDR
R0, =BCFG2
LDR
R1, =0x2000ffef
STR
R1, [R0]
同时,降低ARM的频率,运行结果为:
NCS2上有正常的波形出现,但是,数据线的D7~D0上数据非常不好(怀疑ARM的数据总线驱动能力弱)。最终的结果是屏不能正常驱动。
想请教各位高人:
我以上的思路有问题吗?如果有问题,还需要修改哪些地方?谢谢! |