首先,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,2,3
GBLCTL我设置的值为0x52078,实现以下配置:
CECTLx寄存器组比较重要的是字段 MTYPE [7:4]
对于C64x系列DSP:
MTYPE字段如下(该字段用于设置对应存储空间的模式)
由于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 :片选
|
|
来自: 昵称25730179 > 《DSP开发》