KEIL FOR ARM 下LPC22xx的外部RAM用法
调试外部RAM,我是在CS0上外扩了一个64K的RAM,也就是地址从0X80000000开始。开始不知道REALVIEW的设置,所以总是不能读写RAM,没有输出信号,在KEIL下要做如下设置。
一、在“Options for Target Targe 1”下,选择Asm菜单,在“Conditional Assembly Control Symbols”下的输入框中填上EXTERNAL_MODE,然后按OK结束,
二、Startup.s这个文件也要做一定的改动。
EMC_SETUP EQU 1 ;使能外部RAM控制。
BCFG0_SETUP EQU 1 ;使能CS0控制。如果用到别的片选,则都要使能。
BCFG0_Val EQU 0x1000554A; ;
;此时要注意BCFG0这个寄存器的设置,要仔细看内容,其分别定义了读、写、连续的时钟周期,重要的是,如果是RAM,RVLE位一定要置1,别的要根据你RAM的速度,来设置一个合适的值,位29、28决定了RAM的宽度,8位、16位、32位等。
三、另一个设置就是比较重要的PINSEL2
PINSEL2_Val EQU 0x0F000914
的设置的为16位总线,A1-23地址线使能,使能CS0,OE ,WE;别的引脚则设置为了I/O,这个寄存器的位4、5应该看明白,你选择的是多少位的总线,然后就是看你需要的选择了。
综上,设置了这几种寄存器,外部RAM就可以正常工作了。如果以上设置的不对,则可能没有WE信号,也可能不产生CS0;下面是一个简单的例子。
#define RAMADDR 0x80000000 //外部RAM的基址。
void ExternRam(void)
{
volatile unint *buf;
unint data[512];
unint i;
for (i=0x00;i<512;i++)
{
buf=(volatile unint *) (RAMADDR | i<1);
*buf=i;
}
for (i=0x00;i<512;i++)
{
buf=(volatile unint *) (RAMADDR | i<1);
data[i]=*buf;
}
}
如果你写入的数据与读出的数据一样,那就说明设置的对了,调试时,最好用示波器看看WE,OE,CS0等信号是否正常。
KEILFORARMLPC22xx外部RA 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)