一.用于十六位通信的外部存储器配置:
LDR R0, =BCFG2
LDR R1, =0x1000fbef
STR R1, [R0]
二.外部存储器的地址定义:
#define D20W16 (unsigned short *) 0x82000000
三.数据的初始化及读写操作:
uint16 test16[256],temp16[512];
void DWInit()
{
for(i=0;i<256;i++)
{
if (i % 2 == 0)
test16[i] = 0x5500|0xaa;
else
test16[i] = 0xaa00|0x55;
}
}
void WriteShortData(uint16 *vp,uint16 *vt,uint16 n)
{
int i;
for(i=0;i<n;i++)
*vp++ = *vt++;
}
void ReadShortData(uint16 *vp,uint16 *vt,uint16 n)
{
int i;
for(i=0;i<n;i++)
*vp++ = *vt++;
}
四.测试:
void RandWtest()
{
int hh;
MCU_PIN_SEL2 &= 0xFFFFFFF7;//选择p1.20为GPIO
MCU_IO1_DIR |= 0x00100000;//输出
while(1)
{
WriteShortData(D20W16,test16,256);
hh++;
MCU_IO1_CLR = 0x00100000;//低电平,读低256
ReadShortData(temp16,D20W16,256);
MCU_IO1_SET = 0x00100000;//高电平,读高256
ReadShortData(&temp16[256],D20W16,256);
hh++;
}
}
五.一点心得:
我用的外部存储器的地址总线结构有12根地址线,而我们的应用很特别,并没
有应用到它所有的地址总线,共12根,4K,一来我们用不到这么大的内存空间,
二来我们的arm总线数目有限,arm只有9根总线,理论上只能访问512字节的空间,
但是,我们用一个GPIO输出口与A9相连,这样就可以访问1024大小的空间啦。
当然,应用时要注意:
想要访问低512字节的数据首先要把A9置成0;
想要访问高512字节的数据首先要把A9置成1;
我们用于与A9相连的GPIO为P1.20,设置方法如下:
MCU_PIN_SEL2 &= 0xFFFFFFF7;//选择p1.20为GPIO
MCU_IO1_DIR |= 0x00100000;//输出
MCU_IO1_CLR = 0x00100000;//低电平
MCU_IO1_SET = 0x00100000;//高电平
这里的A10和A11都被接地,保留不用。