主题中讨论的其他器件: HALCOGEN
您好!
我正在使用 DMA 在 TMS570LC4357上通过 SCI 读取/写入数据。 我正在使用定长消息、因此我想将这些消息与 DMA 接收块的开头对齐、以便更轻松地从缓冲区中复制数据。 当消息与接收块不同步时、我会尝试复位 DMA 控制数据包以使数据恢复同步。 这在大部分时间都可以正常工作、但有时复位函数不起作用。
根据 TRM 中第20.2.4节的注释、我应该能够通过写入其中一个值来重置控制数据包。 根据我的理解、这会将目标地址重置为 IDADDR 中的值、从而完成我尝试执行的操作。 但是、有时 DMA 会进入这样的状态:写入控制数据包不会重置目标地址、并且目标地址保持不同步。 它将在几秒到几分钟内保持此状态、但最终会正确复位并重新同步。
我曾尝试过:
1.简单覆盖控制数据包中的 IDADDR 值。
2.禁用 DMA 通道,向 IDADDR 写入其它值,恢复正确的 IDADDR 值,然后启用 DMA 通道。
3、禁用 DMA 通道、重写所有 DMA 控制包的值、然后使能 DMA 通道。
4.运行前轮询 DMASTAT #2。
5.将 DMA FIFO 置于旁路模式。
6.都作为运行中的唯一 DMA 通道运行此操作,并运行多个 DMA 通道。
我找到了这些类似的主题、但这些建议不起作用:
e2e.ti.com/.../resetting-of-dma
e2e.ti.com/.../expected-dma-behavior-after-resetting-dma
e2e.ti.com/.../tms570-reset-dma-with-dma-btc-interrupt
我尝试的每一项都显示了上述行为。 如果我注释掉对 IDADDR 的写入、但使其不同步、那么接收永远不会重新同步。 这使我认为重新同步大部分时间都在运行、而其他因素会阻止控制数据包复位。
谢谢。
大卫
