微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > KEIL FOR ARM 下LPC22xx的外部RAM用法

KEIL FOR ARM 下LPC22xx的外部RAM用法

时间:11-11 来源:互联网 点击:
工作笔记:

调试外部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等信号是否正常。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top