首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

外部存储器接口EMIF的SDRAM用法

外部存储器接口EMIF的SDRAM用法

先引用一段官方术语来介绍EMIF:所有TMS320C6000器件的外部存储器接口(EMIF)支持各种外部器件的无缝接口,包括同步的SDRAM。我选择的器件是C6713,所以主要关心自己用的芯片内部资源情况,C6713总线宽度为32位,注意了这里的每一位都对应有自己的引脚,但是PYP封装的芯片只有16个管脚,GDP的拥有32个管脚,所以选择了什么封装的芯片,还要查看数据手册,确定是否有相应的管脚共使用。存储空间数为4,存储空间大小为512MB,同步时钟是独立的ECLKIN,支持的数据宽度为8/16/32位,控制信号是复用的,有一个增补寄存器SDEXT。   再来关注C6713有哪些EMIF接口信号:需要系统提供一个外部时钟源(ECLKIN),ECLKOUT信号由内部产生,所有与C6713接口的存储器必须在ECLKOUT(EMIF时钟)下工作;SBSRAM、SDRAM和异步接口的信号复用,不需要进行后台刷新,系统允许同时具有这三种类型的存储器。复用的端口控制信号为SDRAS、SDCAS和SDWE分别是行地址、列地址和写使能信号,其实对于控制信号而言我们同样关心的是数据信号,有ED[31:0],EA[21:2],CE[3:0],BE[3:0]分别是数据线,地址线,空间选择线,低位字节激活使能。还有四个没有介绍的信号线分别是ARDY、HOLD、HOLDA、BUSREQ这四个信号线分别是就绪,外部总线保持(三态)请求信号,外部总线保持请求响应,总线请求信号。
   关于EMIF的寄存器,那是真不少,一个个的介绍清楚也是不可能的,需要的话去查阅相关的数据手册和书籍,参考《TMS320C6000系列DSP的CPU与外设》在这里只是简单介绍一下有哪一些寄存器。全局控制寄存器(GBLCTL),空间控制寄存器(CExCTL),DSRAM控制寄存器(SDCTL),SDRAM时序寄存器(SDTIM),SDRAM扩展寄存器(SDEXT)。如此看来东西还不少,看完这些介绍之后,看一段实际的例子,这个例子还是继承了前面的IIR滤波器的,做一个针对性分析。
  *(unsigned volatile int *)EMIF_GCR =0x3068;   
  *(unsigned volatile int *)EMIF_CE1 =CE1_8;   
  *(unsigned volatile int *)EMIF_SDCTRL =0x53116000;//0x57126000;
  *(unsigned volatile int *)EMIF_CE0 =0x90;     
  *(unsigned volatile int *)EMIF_SDRP =0x61a;   
  *(unsigned volatile int *)EMIF_SDEXT=0x54529;
   初始化程序段就是对着五个寄存器做了设定,全局控制寄存器GCR写入了0x3068,查阅书籍得,高16bits是保留位,低16bits才有影响。低16bits写入的是0011_0000_0110_1000,对应的关系还是去查看书籍吧,这里面除去保留位以外,写入数据的含义为CLK2EN允许计时,CLK1EN保持高电平,ARDY和HOLD是由外部器件控制的表示外部期间是否准备好、是否有请求EMIF的行为。NOHOLD和HOLDA是保持使能和表示外部设备拥有EMIF。
   CE1和CE0肯定是对空间片区的控制,看一下CE0=0x90代表了什么含义1001_0000,MTYPE为1001,代表16位宽SDRAM,所以控制CE空间是干什么用的,要修改这个地方。后面代表读保持。CE1_8=0xffffff03前面的ffffff都是标准配置,0x03是8bit的异步接口和标准写保持配置。
   SDCTRL为SDRAM的控制寄存器,写入的数据为0x53116000,对应查阅含义为:SDBSZ=1表示的是存储体个数为2;SDRSZ=01b表示12列地址管脚,每个存储体4096行;SDCSZ=00b表示9列地址管脚,每个存储体512个单元;RFEN=1,DSRAM刷新有效;INIT=1,初始化为SDRAM配置的每一CE空间的SDRAM,操作完成后EMIF将把INIT位改回0;TRCD=0x1、TRP=0x1、TRC=0x6,指定在EMIF时钟周期中SDRAM的tRCD、tRP和tRC的值,所以在控制同步接口的时候要注意时序;后面为保留位全是0。
   SDRP对应的为时序寄存器,控制SDRAM的自动刷新周期,设置的值为0x61A,即刷新周期为0x61a。系统默认的为0x5dc。
   扩展寄存器SDEXT为0x54529,如果是根据系统来设置,还可以做稍微的改变,这里面的各项主要是控制ECLKOUT循环中SDRAM的各种时间的值,以及周期数等。
   综上所述:SDRAM的控制主要是时序方面的控制以及存储空间的控制,说简单点,就是将存放数据的方式,区域大小,读写时序,等全部在初始化的时候通过寄存器来控制好,在主程序while段转起来之后,系统就会按照我们初始化的时候设计的样子来工作了。
继承事业,薪火相传
返回列表