我在调试DSP(C6748)通过EMIF与FPGA进行数据读写时遇到一些问题,需要你们的技术支持!
我把测试case简化为: 在DSP 的12KHZ主中断中读取FPGA片选信号(CS2)所映射的地址范围中的一个地址的值,然后查看对应的时序图,如下图,
其中最上面的数字表示60M的CLK的数量,可以作为时间参考,接下来按照标记依次为:片选信号CE,读使能信号OE,写使能信号WE,地址总线,数据总线。
关于这个时序图我有几个问题想请教下:
- 地址总线上地址在整个读周期结束(CS拉高)后还一直持续的可能原因有哪些,主要是我自己不知道是不是哪里配置出错?
- 整个读操作的周期持续了近50个CLK(60M),远远大于在对EMIF控制寄存器进行配置的(Setup+strobe+hold=2+3+2)7个CLK数量的可能原因有哪些?
时序图:
为了方便分析,我把EMIF初始化配置截图一下:
想问问大家是哪里配置错误还是漏掉什么了吗?
Shine:
1. CS拉高后释放总线,数据线,地址线应该都处于高阻态,这个和寄存器配置没有关系。请检查一下您的硬件连接,不和FPGA连接时,DSP发出的读写是否是否正确?
2. 读到的数据正确吗? FPGA的时序要和DSP的时序匹配,数据线及时提供数据。
,
user6503527:
非常感谢您的快速回复!
1. 好的,我这边请FPGA工程师把数据线和地址线配置为高阻态,DSP再进行读操作看看时序是怎样,还有一个问题就行CS信号本身持续的周期也很长,这个可能原因是什么呢?
2.读到的数据大部分是正确的,但是因为时序不对导致有些地址被连续读两次,然后出错了!
再次感谢!
,
Shine:
请问有在Asynchronous n Configuration Registers (CE2CFG-CE5CFG)寄存器里配置setup, stroble, hold周期吗?配置后,可以看一下CExCFG寄存器,看是否配置成功了。
18.4.5 Asynchronous n Configuration Registers (CE2CFG-CE5CFG)
www.ti.com/…/spruh79c.pdf
,
user6503527:
你好,我在线调试发现我的CE2CFG寄存器的值,除了其中数据总线被改成了16位的,其他的setup,strobe,hold周期都是默认的:
这些周期值没有被改写的原因是初始化出错多吗?
不过因为EMIFA的初始化函数我参照C6748的startware写的,貌似不对,我还不清楚为啥会配置出错!
,
Shine:
您帖的代码里没有看到有初始化这个寄存器的,您再看一下代码里有没有配置CE2CFG寄存器?如果没有的话,可以直接往这个寄存器地址里写数值,不一定要用starterware里的函数配。
,
user6503527:
天啊,我一直以为这个封装的函数是在写这个寄存器里的setup/strobe/hold等配置:
那我再试试直接写这个寄存器看看吧!!
非常感谢!
,
user6503527:
找到问题了,是因为上电初期CE2CFG的初始值是0x3FFFFFFD,再按照startware的EMIFA是用或赋值,所以基本改变不了寄存器的初始值,相当于startware的一个小bug!
谢谢您的耐心指导,我改完后再试试看,希望恢复正常!
,
Shine:
好的,谢谢分享!