首先,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个寄存器,按顺序如下:
- EMIFA全局控制寄存器 GBLCTL
- CE0存储空间控制寄存器 CECTL0
- CE1存储空间控制寄存器 CECTL1
- CE2存储空间控制寄存器 CECTL2
- CE3存储空间控制寄存器 CECTL3
- SDRAM控制寄存器 SDCTL
- SDRAM时序寄存器 SDTIM
- SDRAM扩展寄存器 SDEXT
- CE0次级控制寄存器 CESEC0
- CE1次级控制寄存器 CESEC1
- CE2次级控制寄存器 CESEC2
- 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 :片选
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。