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