This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320C28346:在 XINTF 上写入了错误的数据 — TMS320C28346

Guru**** 2535750 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1555652/tms320c28346-wrong-data-written-on-xintf---tms320c28346

部件号:TMS320C28346


工具/软件:

我在向 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 设置的代码。

 e2e.ti.com/.../XINTF.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    代码或硬件是否有任何更改模式?  

    另外、在 XINTF 配置之后、您是否检查了所有寄存器是否根据代码设置正确配置? 之所以问这个问题、是因为在代码中、您在进行 EMIF 配置后启用时钟、而在进行 EMIF 配置之前应该启用该时钟。

    Vivek Singh