工具/软件:
我在向 TMS320C28x 器件的外部接口写入数据时遇到问题。 设置如下:
- TMS320C 激活了外部存储器接口并连接到外部 CPLD。 它处于 16 位模式、仅使用 8 条地址线+ CS、WR 和 RD。
- 在 CPLD 中实现了存储器接口。 在顶部、泄露分析器(Lattice 在器件上运行时提供的逻辑分析仪)用于探测数据、地址和 CS、WR 和 RD 信号。
- 接口应与 CPU 交换数据。 这大致有效,即,我读取正确的数据,而写入 CPLD 的数据是“通常“我所期望的。
- 问题是、在某些看起来相当随机的情况下、写入 CPLD 的数据被损坏(全零而不是特定的值)。
最初、我假设问题是由失败时序限制或信号完整性问题引起的。 但是、当我分析到达 CPLD 的信号的逻辑分析器迹线时、看起来 CPU 写出的数据确实为零。 请参阅随附的屏幕截图。
TMS 上的代码最初涉及多个 ISR 和 DMA 传输。 无法预测问题是否会出现。 有几次,它出现了 ca.一天一次到每 5 分钟一次 然而,为了跟踪错误,我删除了一切可能的。 只有一个主循环可以将数据写入 CPLD 的内存地址。 所有中断、看门狗、计时器和 DMA 均被禁用(我还通过在执行代码时检查 Code Composer Studio 中的相应外设控制寄存器来验证这一点)。 该电路板已知可工作多年。
使用此代码,系统现在似乎可以正常工作,至少在监视 1 小时没有损坏的数据显示在 CPLD。 但是、一旦使用 Code Composer Studio 中的内存浏览器观察地址周围的内存、CPLD 通过持续刷新映射(地址 0x4000)的位置、该问题的发生速率非常高(与在原始代码中观察到的情况相比)、即每 10ms 执行几次。 我无法确定行为改善/恶化的模式或周边情况。
禁用内存监视器的持续刷新有两个结果。 在大多数情况下、它会立即停止错误的写入、即数据在总线上正确输出。 不过、在其他一些情况下根本不会发生任何情况、TMS 继续向应为非零的地址写入零。
对于 XINTF 输出错误数据的可能原因有什么想法? 这是与调试器相关的问题吗? 在早期版本的代码中、删除调试器没有任何更改。 董事会也是已知的工作了几年,我尝试了一个相同的,导致相同的结果。 我还附加了定义 XTINF 设置的代码。

