DM642之EMIFA模块

首先,EMIFA模块引脚图如下:
上图中,ACE3,ACE2,ACE1,ACE0为片选信号,即存储空间使能信号,每个空间的大小为256MB。
CE0: 0X8000 0000  ~ 0X8FFF FFFF
CE1: 0X9000 0000 ~  0X9FFF FFFF 
CE2: 0XA000 0000 ~  0XAFFF FFFF
CE3: 0XB000 0000 ~  0XBFFF FFFF
 
大概先说这么多,看下实际编程时的寄存器设置:
EMIFA模块共需要设置12个寄存器,按顺序如下:
  1. EMIFA全局控制寄存器 GBLCTL
  2. CE0存储空间控制寄存器 CECTL0
  3. CE1存储空间控制寄存器 CECTL1
  4. CE2存储空间控制寄存器 CECTL2
  5. CE3存储空间控制寄存器 CECTL3
  6. SDRAM控制寄存器  SDCTL
  7. SDRAM时序寄存器 SDTIM
  8. SDRAM扩展寄存器 SDEXT
  9. CE0次级控制寄存器 CESEC0
  10. CE1次级控制寄存器 CESEC1
  11. CE2次级控制寄存器 CESEC2
  12. CE3次级控制寄存器 CESEC3
其中比较重要的是1,2,3
GBLCTL我设置的值为0x52078,实现以下配置:
  • 使能ECLKOUT2,设置ECLKOUT2(见上图)的频率为1/2 EMIF输入时钟频率(EMIF输入时钟频率可以是 ECLKIN,1/4CPU时钟,1/6CPU时钟
  • 使能ECLKOU1
  • 使能CLKOUT4,,该管脚与GP1混用
  • 使能CLKOUT6,该管脚与GP2混用
CECTLx寄存器组比较重要的是字段 MTYPE [7:4]
对于C64x系列DSP:
MTYPE字段如下(该字段用于设置对应存储空间的模式)
 0000b  8位宽异步接口
 0001b  16位宽异步接口
 0010b  32位宽异步接口
 0011b  32位宽SDRAM
 0100b  32位宽可编程同步存储器
 1000b  8位宽SDRAM
 1001b  16位宽SDRAM
 1010b  8位宽可编程同步存储器
 1011b  16位宽可编程同步存储器
 1100b  64位宽异步接口
 1101b  64位宽SDRAM
 1110b  64位宽可编程同步存储器
 
由于VPM642开发板的CE0对应的是64位SDRAM,故CECTL0设置为 0xFFFF FFD3
而由于串口使用的是8位异步模式,故将cectl1[7:4]设置为0,其他字段是用于指定地址形状以及访问该空间的控制信号,这部分比较复杂具体可见:《TMS320C6000系列的CPU与外设》
 
SDCTL,SDTIM以及SDEXT寄存器用于设置SDRAM空间的刷新,时序以及寻址特性,具体可见上面的参考书。
 
实际的设置代码如下:
1.初始化
/*SEEDDM642的emifa的设置结构*/
EMIFA_Config Seeddm642ConfigA ={
        0x00052078, /*gblctl EMIFA(B)global control register value */
                 /*将CLK6、4、1使能;将MRMODE置1;使能EK2EN,EK2RATE*/
        0xffffffd3, /*cectl0 CE0 space control register value*/
                 /*将CE0空间设为SDRAM*/
        0x73a28e01, /*cectl1 CE1 space control register value*/
                 /*Read hold: 1 clock;
                     MTYPE : 0000,选择8位的异步接口
                     Read strobe :001110;14个clock宽度
                     TA:2 clock; Read setup 2 clock;
                     Write hold :2 clock; Write strobe: 14 clock
                     Write setup :7 clock
                     --            ---------------
                        \     14c    /1c
                        \----------------/ */
        0x22a28a22, /*cectl2 CE2 space control register value*/
             0x22a28a42, /*cectl3 CE3 space control register value*/
        0x57115000, /*sdctl SDRAM control register value*/
        0x0000081b, /*sdtim SDRAM timing register value*/
        0x001faf4d, /*sdext SDRAM extension register value*/
        0x00000002, /*cesec0 CE0 space secondary control register value*/
        0x00000002, /*cesec1 CE1 space secondary control register value*/
        0x00000002, /*cesec2 CE2 space secondary control register value*/
        0x00000073 /*cesec3 CE3 space secondary control register value*/    
};
 
2.设置:
/*EMIFA的初始化,将CE0设为SDRAM空间,CE1设为异步空间
    注,DM642支持的是EMIFA,而非EMIF*/
  EMIFA_config(&Seeddm642ConfigA);
 
再贴一张DM642与SDRAM的接线示意图
SDRAS:SDRAM行地址开关
SDCAS:SDRAM列地址开关
SDWE:可写
SDCKE:SDRAM 时钟使能信号
CEn    :片选
 
 
 
 

你可能感兴趣的:(休闲,dsp,EMIFA,DM642,VPM642)