×
单片机 > 单片机程序设计 > 详情

KEIL FOR ARM 下LPC22xx的外部RAM用法

发布时间:2020-06-02 发布时间:
|
工作笔记:

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

关键字:KEIL  FOR  ARM  LPC22xx  外部RAM 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会