TI论坛
直播中

陈婧甄

7年用户 201经验值
私信 关注
[问答]

请教关于DSP的EMIFA的若干疑问

本人在做DSP的EMIFA的实验的时候遇到下面的问题,DSP6748的外部存储器接在CS2上面,默认的其实地址是0x60000000,但是本人在外部CPLD里面编写了一个译码电路,用EMIFA_ADDR13作为译码,即当EMIFA_ADDR13为1的时候,存储器片选使能,为0的时候不使能,这样就把存储器的地址译码倒了其实地址为0x60002000的地址处了。。。。。但是这只是我的想法,实验中发现,在dsp中往0x60002000的地址处的存储空间写入数据的时候却怎么也写不进去,没办法,只好在外面捕捉一下EMIFA的相关信号了,见图2,当图1中的地址为0x60002000的时候,发现EMIFA_ADDR13一直都是低电平,低电平当然外部存储没有片选了,所有写不进去也是正常的。后来我改了一下地址发现把地址线的EMIFA_ADDR15拉高的时候,即地址为0x60008000的时候,发现外部存储器却意外片选上了;
我所不解的是:1.地址0x60002000,明明就是把EMIFA_ADDR13拉高了,为什么外部捕捉到的EMIFA_ADDR13却一直是低电平
2. 地址0x60008000,明明就是把EMIFA_ADDR15拉高了,为什么外部捕捉到的EMIFA_ADDR13却一直是高电平,这究竟是为什么呢

另外,本人再次基础上还有一个地方不懂的,0x60008000才是外部存储的起始地址,但程序对0x60008000地址处写入数据的时候,用ccs的memory browner观察的时候,发现0x60000000地址处的数据居然也有变化!例如,我往0x60008000处写入0xAAAA,发现0x60000000处的数据也变成0xAAAA,向0x60008002处写入0xBBBB,发现0x60000002处的数据也相应的编程0xBBBB;同样,向0x60000000处写入数据的时候,0x60008000处的数据也发生变化(时基实验中发现数据确实写进去了),这个到底是怎么回事呢?

希望各位大牛不吝赐教!!


但是输出的时候,在外部捕捉到的结果却是这样的

回帖(13)

李波

2018-7-25 07:22:35
 #1. 地址线的A0实际上是地址信号的A2,这就是你为什么看到偏了2位的原因.


#2. 你在不同地址上看到同样的变化,那是因为你的译码电路的问题,因为你搞错了A13和A15,0x60008000实现上是硬件信号的A13在起作用,至于0x60008000为什么跟着0x60000000变化,应该是CPLD的逻辑对地址线的A13处理上有什么不完善的地方。
                                                                         http://processors.wiki.ti.com/index.php/Main_Page
Think Over Before Asking.
http://www.catb.org/~esr/faqs/smart-questions.html#goal
举报

陈婧甄

2018-7-25 07:29:48
引用: lifei639156 发表于 2018-7-25 07:22
 #1. 地址线的A0实际上是地址信号的A2,这就是你为什么看到偏了2位的原因.

您所说的地址线的A0实际上是地址信号的A2,是当外部存储器是8位的时候把?当外部存储器是16位的时候,A0应该接存储器的A1吧,您看一下手册P776页的那个连接图啊,因为我的外部存储接的是16位的存储器,按道理说应该值偏移一位啊,为什么会偏移两位呢
顺便问一下,因为我的板子外部的EMIFA的地址线只有EMIFA_ADDR[13:0]这14根和CPLD相连这,因为工程需要,我用低13根用于寻址,最高位EMIFA_ADDR13用于地址译码,这里只用了一根地址线译码,会不会造成逻辑错误啊!
举报

李波

2018-7-25 07:43:08
引用: zhan198498 发表于 2018-7-25 07:29
您所说的地址线的A0实际上是地址信号的A2,是当外部存储器是8位的时候把?当外部存储器是16位的时候,A0应该接存储器的A1吧,您看一下手册P776页的那个连接图啊,因为我的外部存储接的是16位的存储器,按道理说应该值偏移一位啊,为什么会偏移两位呢
顺便问一下,因为我的板子外部的EMIFA的地址线只有EMIFA_ADDR[13:0]这14 ...

#1. 上面右边接的是16-bit的设备,其本身A0就是代表8位地址的A1。 在DSP这边不管外面接几位的设备,A0都是代表地址的A2,当接低于32 bit的设备时,低位地址A0, A2由BA0, BA1来充当。
#2. 只用地址线A13来译码,那么物理上就只有两个地址了,其它地址都会跟着这两个地址一起变。
0x60008000-0x6000FFFF.都是一样的。
0x60000000-0x60007FFF都是一样的。
其实不只上面这段空间是一样的,还有红色地址部分也是一样的,总之,所有A13=1的地址空间都只指向一个地址,A13=0的指向另一个。
但是你上面说的0x60008000与0x60000000是一样的,应该不对吧,一个是A13=1, 一个是A13=0,建议检查一下CPLD的逻辑吧,对于EMIF来说无非就是送出地址信号而已。
                                                                         http://processors.wiki.ti.com/index.php/Main_Page
Think Over Before Asking.
http://www.catb.org/~esr/faqs/smart-questions.html#goal
举报

陈婧甄

2018-7-25 08:03:01
引用: lifei639156 发表于 2018-7-25 07:43
#1. 上面右边接的是16-bit的设备,其本身A0就是代表8位地址的A1。 在DSP这边不管外面接几位的设备,A0都是代表地址的A2,当接低于32 bit的设备时,低位地址A0, A2由BA0, BA1来充当。
#2. 只用地址线A13来译码,那么物理上就只有两个地址了,其它地址都会跟着这两个地址一起变。
0x60008000-0x6000FFFF.都是一样的。

如果我接的是16位的FLASH,若EMA_A[13:0]分别接FLASH的A[14:1],EMA_BA1接FLASH的A[0],那么DSP的可寻址范围是多大啊,是2的14次方,还是2的(14+1)次方啊
举报

更多回帖

发帖
×
20
完善资料,
赚取积分