主题中讨论的其他器件:TLC6983、 EK-TM4C1294XL
您好!
我有一些与外设散聚 DMA 相关的问题。
我需要使用 DMA 将各种数据帧从 RAM 发送到 SSI0。 有时会有一些帧将数据更新到 LED 驱动器 IC (TLC6983)、而有一些常规帧会发送空闲状态和同步消息。 TLC6983需要连续的背对背 SPI 数据流(IDEL/SYNC)。 我计划使用散聚 DMA、其中源是 DMA 任务列表中定义的 RAM 区域、目标始终为 SS!0 TX 寄存器。 理想情况下、DMA 将循环(如数据表中所述)并单独发送空闲状态和同步消息、但当需要显示新映像时、需要使用不同的任务列表来执行此操作、 然后 DMA 会恢复到空闲/同步任务列表。
1.产品说明书指出"在 列表末尾标记为将最后一个条目的控制字编程为采用自动传输模式。" -循环时应该这样做吗? 我怀疑不会、因为它会停止 DMA 控制器。 那么、在循环时、最后一个任务列表条目应该设置为分散集中模式、这与其他条目相同?
2.以这种方式循环时,当任务列表中的最后一个传输运行时 DMA 完成中断是否仍然被置位? (这个条目用来复制主控制结构体、使其返回到列表的开始位置(或者指向一个新的列表)。 如果不是,是否有办法确定名单的末尾?
3.数据表指出最后一个任务列表条目可以指向一个新列表-如何以无缝的方式从任务列表 A 切换到任务列表 B、从而确保连续从任务列表 A 传输到任务列表 B? 理想情况下、任务列表中的最后一个任务将被新任务异步覆盖、 但是、在 DMA 控制器循环时执行此操作听起来很危险、因为 DMA 控制器可能会在更新时尝试访问它-除非这以某种方式被双缓冲。 如果在 DMA 完成 ISR 中对其进行更新、可能太晚了- DMA 将已经循环并重新启动当前任务列表。
4.这应该起作用:请勿循环、而是运行任务列表 A、然后在 DMA 完成中断加载任务列表 B 上并启动 DMA -但这会导致 SSI 传输之间出现间隙。
5. 与上述(4)相关、DMA 完成中断到底将在什么位置设置? 如果是在完成最后一个请求时、则可能存在 SSI 上最后一个字节的 TX 时间、在此时间内需要为 DMA 完整 ISR 提供服务。
提前感谢您的帮助、
马修