分享

DM642之EMIFA模块

 昵称25730179 2015-05-27
首先,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 :片选

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多