dsp EMIF接口

EMIF,全称是External Memory Interface,外部存储器接口,用于片外储存器扩展和外部数据接口的一种并行数据传输片上外设。它能与三种外部存储器无缝连接:同步突发静态存储器(SBSRAM),同步动态存储器(SDRAM),异步存储器(SRAM,ROM,FLASH)等。

这里补充一下它们的区别,虽然我觉得不是重点:

SDRAM:读写操作要求与外部时钟同步;动态存储,芯片需要定时刷新;同步技术使得用于大容量、高速存储领域。

SBSRAM:支持同步突发访问,所以读写速度高;属于SRAM范畴,属于静态RAM,不需要刷新。

异步存储器:简单直接,时钟不必同步;但容量小,主要用于小容量数据存储和程序存储。


EMIF主要和EDMA和外设存储器连接通信,通过引脚。引脚中的CE片选引脚很重要,每个片选引脚对应一个CE空间。其它引脚如图:

dsp EMIF接口_第1张图片

虽然不同型号dsp寄存器名称有差别,但大体有如下最重要的EMIF寄存器:

GBLCTL:EMIF全局控制寄存器

CECTL0/1/2/3:CE空间控制寄存器

SDCTL:SDRAM控制寄存器

SDTIM:SDRAM时序控制寄存器

SDEXT:SDRAM扩展控制寄存器


对于与SDRAM连接的配置过程:

配置开始-》全局控制寄存器配置EMIF时钟-》CE空间寄存器配置SDRAM空间-》SDCTL配置SDRAM工作模式-》SDTIM配置刷新模式-》配置扩展功能-》配置结束


对于与Flash连接的配置过程:

配置开始-》全局配置时钟,Flash接口选择-》CE空间读写时序控制-》配置结束


一般程序架构:

#...宏定义

#include

#include

...

void erase_Flash(); //函数声明

void write_Flash();

unsigned int read_Flash();


EMIF_Config myFlash = { //通过结构体配置

//配置全局寄存器

EMIF_GBLCTL_RMK(

...

),

//配置CE寄存器1,但0、2、3忽略

EMIF_GECTL_DEFAULT,

EMIF_GECTL_RMK(

...

),

EMIF_GECTL_DEFAULT,

EMIF_GECTL_DEFAULT,

//忽略SDRAM相关寄存器

EMIF_SDCTL_DEFAULT,

EMIF_SDTIM_DEFAULT,

EMIF_SDEXT_DEFAULT,

...

...

}


void main()

{

...

CSL_init();

EMIF_config(&myFlash);

erase_Flash(); //对flash而言,写入前先擦除

Flash_ptr = (unsigned int *)FLASH_BEGIN; //写入的初始地址

for(i = 0;i

{

write_Flash(bootfile[i],Flash_ptr++);

}

...

}


void erase_Flash()

{

*FLASH_ADR2 = 0xaa; //擦除操作命令序列,flash特殊

*FLASH_ADR1 = 0x55;

*FLASH_ADR2 = 0x80;

*FLASH_ADR2 = 0xaa;

*FLASH_ADR1 = 0x55;

*FLASH_ADR2 = 0x10;

}


void write_Flash(unsigned int data,unsigned int addr)

{

*FLASH_ADR2 = 0xaa; //写操作命令序列,flash特殊,换作SDRAM则不用。

*FLASH_ADR1 = 0x55;

*FLASH_ADR2 = 0xa0;

*addr = data;

}


unsigned int read_Flash(unsigned int addr)

{

return (*addr);

}

你可能感兴趣的:(DSP学习)