微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > TI C2000 F28377D 单片机emif 外接SDRAM问题

TI C2000 F28377D 单片机emif 外接SDRAM问题

时间:10-02 整理:3721RD 点击:
有没有哪位童鞋写过F28377D EMIF to SDRAM 的程序啊? 我弄了好几天了也没弄出来。一个例子都找不到。找到的都是DSP 的例子。求高手指点怎么配置EMIF?

http://blog.sina.com.cn/s/blog_7177add50100vdtt.html              具体的话你看时序图自己写

先引用一段官方术语来介绍EMIF:所有器件的外部存储器接口(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段转起来之后,系统就会按照我们初始化的时候设计的样子来工作了。

楼上说的很详细啊。SDRAM的控制主要是时序方面的控制以及存储空间的控制,说简单点,就是将存放数据的方式,区域大小,读写时序,等全部在初始化的时候通过寄存器来控制好,在主程序while段转起来之后,系统就会按照我们初始化的时候设计的样子来工作了。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top