DSP之外部设备连接接口之EMIF
发布时间:2020-12-15 18:31:58 所属栏目:百科 来源:网络整理
导读:????? 外部设备连接接口包括外部存储器连接接口(EMIF)、主机接口(HPI)等。外部存储器接口主要用来同并行存储器连接,这些存储器包括SDRAM、SBSRAM、Flash、SRAM存储器等,外部存储器接口还可以同外部并行设备进行连接,这些设备包括并行A/D、D/A转换器、
????? 外部设备连接接口包括外部存储器连接接口(EMIF)、主机接口(HPI)等。外部存储器接口主要用来同并行存储器连接,这些存储器包括SDRAM、SBSRAM、Flash、SRAM存储器等,外部存储器接口还可以同外部并行设备进行连接,这些设备包括并行A/D、D/A转换器、具有异步并行接口的专用芯片,并可以通过外部存储器接口同FPGA、CPLD等连接;主机接口主要用来为主控CPU和C55x处理器之间提供一条方便、快捷的并行连接接口,这个接口用来对DSP进行控制、程序加载、数据传输等工作。
?????? 这里主要是EMIF。
EMIF输入输出信号图:
?
EMIF为3种类型的存储器提供了无缝接口:
1 异步存储器,包括ROM,FLASH,异步SRAM
2 同步突发静态存储器(
SBSRAM
)
3 同步动态存储器(
SDRAM
)
???????
异步存储器可以是静态随机存储器(
SRAM
)、只读存储器(
ROM
)和闪存存储器等存储器,在实际使用中还可以用异步接口连接并行
A/D
采样器件、并行显示接口等外围设备,但使用这些非标准设备时需要增加一些外部逻辑来保证设备的正常使用。
??????? 在使用外部存储器接口时应区分字寻址和字节寻址之间的区别,当
TMS320C55x
访问数据时,
CPU
用
23
位地址访问
16
位字,该方式下数据空间被分成
128
页,每页字长
64K
。
CPU
访问程序代码时,用
24
位地址访问
8
位字节,
DMA
控制器访问存储器时也采用字节寻址方式。
??????? 如果多个请求服务同时到达,EMIF会根据每个请求优先级来进行处理。最高为HOLD,最低为刷新。
??????? 对EMIF编程时,必须了解外部存储器地址如何分配给片使能空间,即CE空间,每个CE空间可以同那些类型的存储器连接,以及用那些寄存器位来配置CE空间。
??????? TMS320C55x的外部存储器映射在存储空间的分布,相应于EMIF的片选使能信号,例如CE1空间的存储器,则必须将其片选引脚连接到EMIF的CE1引脚。当EMIF访问CE1空间时,驱动CE1变低。
TMS320C5510外部存储器映射中的最高地址单独分配给CE3空间,或由CE3及内部的DSP ROM共享。这些地址的分配由CPU状态寄存器ST3_55中的MPNMC位来决定。在DSP复位期间,MPNMC值取决于DSP的NP/MC引脚的信号电平。
?
可以使用全局控制寄存器EGCR和每个CE空间控制寄存器来配置CE空间。
对于每个CE空间,必须设置控制寄存器1中的以下域:
MTYPE 指定存储器类型
MEMFREQ 决定存储器信号的频率
MEMCEN 决定CLKMEM引脚是输出存储器时钟信号,还是被拉成高电平
?
一定要对全局控制寄存器写如下控制位。
WPE 对所有CE空间,使能或者禁止
NOHOLD 对所有CE空间,使能或禁止HOLD请求
?
?
外部寄存器接口硬件连接与配置
?
??????? 外部存储器接口所支持的异步存储器接口、同步突发静态存储器接口和同步动态存储器接口都支持程序代码访问以及
32
位宽、
16
位宽和
8
位宽数据访问。外部存储器的
4
个片选空间都可以单独进行设置,设置的内容包括存储器类型、存储器宽度、读写时序参数等内容。本节将分别给出不同接口的硬件连接以及参数的设置。
????????
异步存储器的类型多种多样,它们既包括静态随机存储器、闪存存储器、只读存储器等,又有先入先出存储器、双端口存储器等,
这些存储器有着不同的特点,可以根据需要灵活选用。
???????? 外部存储器接口所支持的异步存储器接口、同步突发静态存储器接口和同步动态存储器接口都支持程序代码访问以及
32
位宽、
16
位宽和
8
位宽数据访问。外部存储器的
4
个片选空间都可以单独进行设置,设置的内容包括存储器类型、存储器宽度、读写时序参数等内容。
????????? AM29LV320D
是一种大容量的闪存存储器,存储容量可以达到
2M
字
/4M
字节,数据总线宽度可以是
8
位或
16
位,下面给出
AM29LV320D
与
DSP
的连接关系示意图。
?
???????
?
?
????? 从图中可以看到
C55x
处理器与
AM29LV320D
的连接用了数据线
D7-D0
,在这种
连接方式下
AM29LV320D
的
DQ15/A-1
引脚应当作为地址线
A-1
来使用,处理器
的地址总线
A[21:0]
接到
AM29LV320D
的
A[20:-1]
,
AM29LV320D
的
BYTE#
信
号接地,
RESET#
接到系统复位信号,写保护
/
快速编程
WP#/ACC
引脚接高电
平。???
????? AM29LV320D
的读写时序,如图
5-5
和图
5-6
所示,从时序图中可以看到该
芯片的一个读写周期最短为
90ns
或
120ns
,而数字信号处理器的
CLKOUT
时钟
是
DSP
主时钟的
1/1
、
1/2
、
1/3
、
1/4
、
1/5
、
1/6
、
1/7
或
1/8
,如果
DSP
运行在
200MHz
,则
DSP
一个时钟周期为
5ns
,如果不能让
DSP
的读写时序同
AM29LV320D
的读写时序相匹配,就无法实现正确的读写。调整
DSP
的读写时
序有两种方法,一种是将
AM29LV320D
的
RY/BY
信号接到
DSP
的
ARDY
信号上
,通过硬件等待信号实现二者读写时序的同步,另外一种方法是通过软件设置
外部存储器接口寄存器实现正确读写。方法
1
使用简单,但灵活性不强,如果
DSP
通过外部存储器接口连接多个芯片,这种方法就不能使用,软件设置的方
法灵活、方便,推荐使用该种方法设置外部存储器接口的读写时序。
当
CLKOUT
为
4
分频时,设置建立时间为
1
个时钟周期,选通时间为
4
个时钟周期,保持时间为
2
个时钟周期就可以正确读取
AM29LV320D
存储器。
外部存储器接口为每个片选空间都提供了独立的片选控制寄存器,通过这些寄存器可以设置寄存器类型,读
/
写时序以及超时时钟周期数,具体可参见下表
。
片选控制寄存器
1
(
CEx_1
)
片选控制寄存器
2
(
CEx_2
)
片选控制寄存器
3
(
CEx_3
)
?
因此,使用异步存储器要注意的问题是:
1 外部存储器连接信号
2 EMIF对异步存储器的配置
3 EMIF异步读操作
4 EMIF异步写操作
5 随就绪信号(ARDY)插入的额外周期
?
???????
同步突发静态存储器所使用的信号包括数据总线
D[0..31]
、地
址总线
A[21..0]
、片选信号
CE0-CE3
、字节使能信号
BE0-BE3
,此
外还有
SBSRAM
地址选通信号
SSADS
、输出使能信号
SSOE
、写
使能信号
SSWE
和存储器接口时钟
CLKMEM
。
?????? 接下来给出
C55x
外部存储器接口同
32
位无校验管道型
SBSRAM
的连接图。图中
SBSRAM
占用
CE0
空间,
SBSRAM
的
MODE
信号接到低电平使
SBSRAM
工作在
线性突发模式,其他未用的
SBSRAM
信号如
ZZ
、
ADV
、
ADSP
和
GW
信号都接
成非活动状态。
??????
如果所用的
SBSRAM
是有校验型存储器,连接时则应注意
SBSRAM
的校验
信号
DQP[d:a]
应当接地以减少功率消耗。
????? 如果要使用
SBSRAM
的电源关闭模式,可以将
SBSRAM
的
ZZ
引脚
同
C55x
的通用输入输出引脚相连接,通过通用输入输出引脚控制
SBSRAM
是否进入电源关闭模式。
?
??????
控制
SBSRAM
接口的寄存器包括
EMIF
全局控制寄存器和片选
控制寄存器
CEx_1
,接下来给出
SBSRAM
所需设置字段表。
SBSRAM
需要设置字段
?
TMS320C55x
外部存储器接口支持
16
位、
32
位宽,
64M
位和
128M
位
SDRAM
,
SDRAM
可以工作在
C55x
频率的
1/2
或
1/1
。
SDRAM
的引脚映射和寄存器配置表
?
SDRAM
接口专用信号包括
SDRAM
行选通信号
SDRAS
、列选通信
号
SDCAS
和写使能信号
SDWE
,
SDA10
信号在
ACTV
命令时作为
行地址信号,
在读写操作时作为预加电使能信号,在
DCAB
命令
下为高,保持模式下为高阻态。
?
?????? SDRAM
操作时需要一系列命令来支持其运行,下面给出命令
列表
。
C55x EMIF
接口
SDRAM
命令
?
在进行
SDRAM
操作时需要修改
EMIF
全局控制寄存器和片选控制寄存器
1
,接下来给出
SDRAM
所需设置字段表。
?
?
除了设置以上寄存器以外还需要设置
SDRAM
控制寄存器
。
SDRAM
控制寄存器
1
SDRAM
控制寄存器
2
?
SDRAM
周期寄存器和计数寄存器用来设置
SDRAM
的刷新周期,
其中周期寄存器存放刷新所需
CLKMEM
时钟周期数,计数寄存器
存放刷新计数器当前计数值。
?
?
外部寄存器接口的软件设置
?
应用芯片支持库函数对外部寄存器接口进行设置首先要在头文件
中包含
csl_emif.h
,接下来声明
EMIF
配置结构:
EMIF_Config Config_EMIF = {
0x0281,? /* EMIF
全局控制寄存器
*/
?????????????? /* CLKMEM=OFF */
?????????????? /*HOLD_disabled */
0xFFFF,/* EMIF
初始化寄存器
*/
0x100c,/* ce01 */
/*MTYPE=001B 16
位异步存储器
? READ START=0000b
读建立周期为
0
? READ STROBE=000011b
读选通周期为
3
? READ HOLD=01b
读保持周期为
1
*/
0x0FFF,/* ce02 */
/*READ EXT HOLD=00b
? WRITE EXT HOLD=00b
? WRITE SETUP=1111b
写建立周期为
=15
? WRITE STROBE=222221b
写选通周期为
=63
? WRITE HOLD=11b
写保持周期为
=3
*/
0x00FF,/* ce03 */
/*TIMEOUT=0XFF,timeout=255*/
0x013E,/* ce11 */
/*MTYPE=000B 8
位异步存储器
? READ START=0001b
读建立周期为
1
? READ STROBE=001111b
读选通周期为
15
? READ HOLD=10b
读保持周期为
2
*/
0x0FFF,/* ce12 */
/*READ EXT HOLD=00b
? WRITE EXT HOLD=00b
? WRITE SETUP=1111b
写建立周期为
15
? WRITE STROBE=222221b
写选通周期为
63
? WRITE HOLD=11b
写保持周期为
3
*/
0x00FF,/* ce13 */
0x1105,/* ce21 */
/*MTYPE=001B 16
位异步存储器
? READ START=0001b
读建立周期为
1
? READ STROBE=000001b
读选通周期为
1
? READ HOLD=01b
读保持周期为
1
*/
0x0105,/* ce22 */
/*READ EXT HOLD=00b
? WRITE EXT HOLD=00b
? WRITE SETUP=0001b
写建立周期为
1
WRITE STROBE=000001b
写选通周期为
1
? WRITE HOLD=01b
写保持周期为
3
0x00FF,/* ce23 */
0x110D,/* ce31 */
/*MTYPE=001B 16
位异步存储器
? READ START=0001b
读建立周期为
1
? READ STROBE=000011b
读选通周期为
3
? READ HOLD=01b
读保持周期为
1
*/
0x010D,/* ce32 */
/*READ EXT HOLD=00b
? WRITE EXT HOLD=00b
? WRITE SETUP=0001b
写建立周期为
1
? WRITE STROBE=000011b
写选通周期为
3
? WRITE HOLD=01b
写保持周期为
1
*/
0x00FF,/* ce33 */
0x07FF,/* sdc1 */
0x0FFF,/* sdper */
0x07FF,/* init */
0x03FF /* sdc2 */
/*
没有
SDRAM*/
};
接下来调用
EMIF
配置函数完成配置过程:
EMIF_config(&Config_EMIF);
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |