1

Atmel SAMD21 TCC 外设提供了一个 STOP 命令,用于暂停计数器。可以使用 RETRIGGER 命令恢复计数器。

当发出 STOP 指令时,TCC 进入故障状态,其中输出要么处于三态,要么被驱动到配置寄存器中指定的状态。据推测,这种机制旨在支持固定的故障保护输出状态。

在我的情况下,我希望输出引脚冻结在它们在 STOP 命令时所处的状态。我能看到的唯一方法是每次更新输出时更新配置的故障输出状态寄存器 - 需要中断处理,这违背了 TCC 的大部分输出波形扩展架构的目的,以及作为一个我宁愿避免处理负载。还有其他复杂性,例如考虑死区时间机制和硬件/软件竞争。

所以我一直在寻找不涉及 STOP 命令的方法来实现这一点 - 但我看不到任何其他停止计数器的方法。没有办法门控外设时钟输入,并且在 GCLK 中禁用它被排除在外,因为它也运行 TCC1。(谁知道这会产生什么其他影响。)否定 ENABLE 位,除了矫枉过正之外,不出所料还会使输出处于三态。以各种其他方式修改配置通常需要写入启用保护寄存器,因此需要首先禁用外设。

(我还没有研究过的一个想法是从事件系统中驱动计数器,并控制事件生成/门控。)

那么:有没有什么方法可以在当前状态下暂停外设,同时保持输出引脚的状态?

4

1 回答 1

1

我能想到的尝试就是异步“COUNT”事件,这听起来像是时钟到计数器门。

(来自 03/2016 手册的页码)

31.6.4.3。事件,第 712 页;在异步事件的活动状态期间计数(递增或递减,取决于计数器方向)。在这种情况下,只要事件处于活动状态,计数器就会在预分频时钟的每个周期递增或递减。

31.8.9。事件控制,第 734 页;EVCTRL 寄存器,位 2:0 – EVACT0[2:0]:定时器/计数器事件输入 0 动作 0x5 COUNT (async) 对异步事件的活动状态进行计数

缺点是软件事件必须是同步的。

于 2019-01-22T16:28:20.400 回答