proteus自带uclinux的改造与扩展源代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
proteus自带uclinux的改造与扩展源代码自己写的源代码供大家学习:这里要感谢bqtanterry网友提供的proteus实例/forum.php?mod=viewthread&tid=2455
#include
#define com 0u
#define dat 1u
#define rs (1u<<0)
#define rw (1u<<1)
#define e (1u<<2)
#define addr 0x80000020u
unsigned char tab[]="I love ARM!";
unsigned char tbl[]="Fuck! I do!";
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write(unsigned char f,unsigned char input)
{
unsigned int tmp=addr;
*((volatile unsigned *)(tmp+=f))=input;delay(5);
*((volatile unsigned *)(tmp&=~(rw)))=input;delay(5); *((volatile unsigned *)tmp)=input;delay(5);
*((volatile unsigned *)(tmp|=e))=input;delay(5);
*((volatile unsigned *)(tmp&=~e))=input;delay(5);
*((volatile unsigned *)(tmp|=rw))=input;
}
void init()
{
write(com,0x38);
write(com,0x0f);
write(com,0x06);
write(com,0x01);
}
int main()
{
int i;
init();
write(com,0x80+0x10);
for(i=0;i<11;i++)
{
write(dat,tab);
delay(10);
}
write(com,0x80+0x40+0x12); for(i=0;i<11;i++)
{
write(dat,tbl);
delay(10);
}
for(i=0;i<16;i++)
{
write(com,0x1c);
delay(220);
}
return 0;
}
编译:arm-elf-gcc -o lcd lcd.c -elf2flt
生成romfs镜像:./genromfs -d romfs/ -f romfs.img 再用H-Converter.exe转换成romfs.hex
上图可以看出A0是控制LCD_RS,A1控制LCD_RW,A2控制LCD_E
这个是关于地址对lcd的控制逻辑图。U68的Q4有效时ADDR_LCD才能使能,所以有A6A5A4A3=0b0100,即addr
=0x80000020地址使能lcd。