主题中讨论的其他器件:TM4C123
我们需要以1ms 的"精确"一致间隔对两个 QEI 位置计数器进行采样、其中"精确"意味着尽可能减少时序变化。 例如、如果采样间隔通常为1ms 左右、但有时为1.5ms、有时为0.5ms、则会导致采样停止、从而提供不可接受的性能。
在过去、我们使用了一个具有单独保持寄存器的正交计数器 IC。 当发送一个定时脉冲时、IC 将把瞬时计数器寄存器复制到这个保持寄存器、即、"锁存"这个值。 该相同的计时脉冲将在我们的 MCU 中触发中断、该中断将从 IC 的保持寄存器中读取保存的值。 通过这种方式、软件执行的时序变化对 QEI 采样没有影响:重要的是该值被"锁存"到了时间。 对于语义:是的、硬件中肯定存在时序差异、但这些变化大约为几纳秒、比软件引入的差异小很多数量级。
TM4C 似乎没有在"硬件"中提供这样的保存寄存器、因此这是一个问题。 我们认为的"最佳"解决方案是显而易见的:使用计时器外设以固定间隔触发中断、将该中断设置为最高优先级、并在此中断中对 QEI 采样。 当然、软件中仍然存在各种可能会中断计时的" gotchas "、例如固定为负优先级的其他中断。
这是 TM4C 真正的"最佳"解决方案吗? 是否有某种方法可以使用定时器触发的 DMA 将*两个* QEI 位置计数器复制到时序变化较少的内存中的变量? 或者我们可能忽略了其他一些可能性?