您的位置 首页 主动

KEIL FOR ARM 下LPC22xx的外部RAM用法

工作笔记:调试外部RAM,我是在CS0上外扩了一个64K的RAM,也就是地址从0X80000000开始。开始不知道REALVIEW的设置,所以总是不能读写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等信号是否正常。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/274398.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部