新浪博客

异步存储器,比如ROMFLASH
同步突发SRAMSBSRAM
同步DRAMSDRAM

由于5509 开发板外扩一片 16 位的 SDRAM,用/CE0 选通,容量为 4M * 16 位,寻址占用/CE0 /CE1 两个存储空间。片选引脚 CE1CE3 引至总线扩展器上,供用户自行连接设备。其中,CE1CE2 接至 CPLD 使用
* CPLD和不接CPLD的操作区别:
1、 不接CPLD,对EMIF的操作,就只需要要配置好相关存储器的寄存器之后,就可以直接进行读写访问
2、 CPLD,相当于在EMIF操作的前期映射了一个全局的管理寄存器,要对EMIF操作,就必须先对CPLD进行读写,再进行EMIF的读写操作
35509共有 6 个扩展寄存器组,用于与板上外设如按键、网络芯片等通信,进行控制或读写信息。这些寄存器组通过 CPLD 扩展 分别是:
功能选择寄存器组 按键寄存器组 Flash 地址扩展寄存器组
网络控制寄存器组 LCD 控制寄存器组 LCD 数据寄存器组
5509 开发板通过功能选择寄存器组,利用 CE2CE3 存储空间对各寄存器组进问操作,操作流程如下:
1)读操作
①写功能选择寄存器组(写 CE2 空间任意地址),使能需要操作的目标寄
存器组,对于读 LCD 数据,必须将 LCDDIR 置为 1
②读目标寄存器组(读 CE2 空间任意地址)
③读操作完成后,再写功能选择寄存器组,禁用所有寄存器组。
2)写操作
①写功能选择寄存器组(写 CE2 空间任意地址),使能需要操作的目标寄存组;
②写目标寄存器组(写 CE3 空间任意地址)
③写操作完成后,再写功能选择寄存器组,禁用所有寄存器组。
* 对于CE0空间的SDRAM,读写操作不与CPLD的功能寄存器组挂钩,可以直接配置EMIF后读写SDRAM
* 对于CE1CE2的空间,比如SDRAMCE1有映射,那么必须遵循先对功能寄存器组读写操作时序,才能读写SDRAM

EMIF编程时,必须了解
1、 外部存储器地址如何分配给片使能(CE)空间
2、 每个CE空间可以同哪些类型的存储器连接
3、 以及用哪些寄存器bit来配置CE空间
EMIF访问CE0空间时,就驱动/CE0变低,使能片选CE0上挂着存储器

配置CE空间
* 使用全局控制寄存器(EGCR)和每个CE空间控制寄存器来配置CE空间
[转载]DSP学习第六篇——EMIF外部存储器接口的使用(SDRAM与按键寄存器组
一、 利用外部存储器接口EMIF进行使用SDRAM
程序:
main()
{
CSL_init(); //初始化CSL*/
CHIP_RSET(XBSR,0x0a01); //EMIF为全EMIF接口*/
PLL_config(&myConfig); //设置系统的运行速度为144MHz*/
EMIF_config(&emiffig); //初始化DSP的外部SDRAM*/
//SDRAM中写入数据*/
souraddr = (int *)0x40000;
deminaddr = (int *)0x41000;
while(souraddr<deminaddr)
*souraddr++ = datacount++;
//读出SRAM中的数据*/
souraddr = (int *)0x40000;
datacount = 0;
while(souraddr<deminaddr)
databuffer[datacount++] = *souraddr++;
while(1);
}

二、 利用外部存储器接口EMIF进行按键扫描
与上面过程相比,多了一步对于CPLD的读写,因为按键的扩展有用到接CPLD,所以要先选中按键。
souraddr = (int *)0x400001;
*souraddr = 0x00fe; //CE2空间,即对功能寄存器组设置,选上按键寄存器组
…………
button=*souraddr; //CE2空间,相当于将按键寄存器组的数读出
程序:
void main (void)
{
CSL_init(); //初始化csl*/
PLL_config(&Fs144M); //设置时钟频率为144MHz*/
CHIP_RSET(XBSR,0x0a01); //EMIF为全EMIF接口*/
EMIF_config(&emiffig); //初始化DSPEMIF*/
GPIO_RSET(IODIR,0xff); //设置IO为输出端口*/

souraddr = (int *)0x400001;
*souraddr = 0x00fe; //CE2空间,即对功能寄存器组设置,选上按键寄存器组
printf('K1 pressn');
while(1)
{
button=*souraddr; //CE2空间,相当于将按键寄存器组的数读出
switch(button) //按键按到则亮 io为低电平时为亮*/
{
case 0xe:GPIO_RSET(IODATA,~0x01);delay();break;
case 0xd:GPIO_RSET(IODATA,~0x02);delay();break;
case 0xb:GPIO_RSET(IODATA,~0x04);delay();break;
case 0x7:GPIO_RSET(IODATA,~0x08);delay();break;
default :GPIO_RSET(IODATA,0xff);
}
}
}

AttentionCDM文件、DMA、映射表、程序空间使用的都是字节地址(14位)
编程使用的地址、数据空间使用的都是字地址(13位)

我的更多文章

下载客户端阅读体验更佳

APP专享