KEIL FOR ARM 下LPC22xx的外部RAM用法
調(diào)試外部RAM,我是在CS0上外擴(kuò)了一個(gè)64K的RAM,也就是地址從0X80000000開始。開始不知道REALVIEW的設(shè)置,所以總是不能讀寫RAM,沒有輸出信號,在KEIL下要做如下設(shè)置。
本文引用地址:http://m.butianyuan.cn/article/201611/316613.htm一、在“Options for Target Targe 1”下,選擇Asm菜單,在“Conditional Assembly Control Symbols”下的輸入框中填上EXTERNAL_MODE,然后按OK結(jié)束,
二、Startup.s這個(gè)文件也要做一定的改動。
EMC_SETUP EQU 1 ;使能外部RAM控制。
BCFG0_SETUP EQU 1 ;使能CS0控制。如果用到別的片選,則都要使能。
BCFG0_Val EQU 0x1000554A; ;
;此時(shí)要注意BCFG0這個(gè)寄存器的設(shè)置,要仔細(xì)看內(nèi)容,其分別定義了讀、寫、連續(xù)的時(shí)鐘周期,重要的是,如果是RAM,RVLE位一定要置1,別的要根據(jù)你RAM的速度,來設(shè)置一個(gè)合適的值,位29、28決定了RAM的寬度,8位、16位、32位等。
三、另一個(gè)設(shè)置就是比較重要的PINSEL2
PINSEL2_Val EQU 0x0F000914
的設(shè)置的為16位總線,A1-23地址線使能,使能CS0,OE ,WE;別的引腳則設(shè)置為了I/O,這個(gè)寄存器的位4、5應(yīng)該看明白,你選擇的是多少位的總線,然后就是看你需要的選擇了。
綜上,設(shè)置了這幾種寄存器,外部RAM就可以正常工作了。如果以上設(shè)置的不對,則可能沒有WE信號,也可能不產(chǎn)生CS0;下面是一個(gè)簡單的例子。
#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;
}
}
如果你寫入的數(shù)據(jù)與讀出的數(shù)據(jù)一樣,那就說明設(shè)置的對了,調(diào)試時(shí),最好用示波器看看WE,OE,CS0等信號是否正常。
評論