代码之家  ›  专栏  ›  技术社区  ›  Jeremy

暂停SAMD21 TCC计数器

  •  0
  • Jeremy  · 技术社区  · 7 年前

    atmel samd21 tcc外设提供停止命令,暂停计数器。计数器可以通过再触发命令恢复。

    当发出停止时,变矩器离合器进入故障状态,在该状态下输出为三态或驱动至配置寄存器中指定的状态。假设该机制设计为支持固定故障保护输出状态。

    在我的例子中,我希望输出管脚在停止命令时处于冻结状态。唯一能做到这一点的方法是每次更新输出时都更新配置的故障输出状态寄存器——需要中断处理,哪种方式会破坏TCC的输出波形扩展体系结构的大部分功能,同时也是我希望避免的处理负载。还有其他一些复杂的问题,例如计算死区机制和硬件/软件竞赛。

    所以我一直在寻找不涉及stop命令的方法来实现这一点,但是我看不到任何其他方法来停止计数器。没有办法将外围时钟输入选通,并且在gclk中禁用它,因为它也运行tcc1。(谁知道这会有什么其他的影响。)否定的启用位,除了被过度杀死,也毫不奇怪的三态输出。以各种其他方式修改配置通常需要写入以启用受保护的寄存器,因此需要先禁用外围设备。

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

    那么:在保持输出管脚的状态的同时,是否有任何方法可以使外围设备暂停在当前状态?

    1 回复  |  直到 7 年前
        1
  •  0
  •   aMike    7 年前

    我能想到的就是异步“count”事件,听起来是这样的 通向柜台的钟的门。

    (2016年3月手册页码)

    31.64.3。事件,P.712; 在异步事件的活动状态期间计数(增量或减量,取决于计数器方向)。在这种情况下,只要事件处于活动状态,计数器将在预定时钟的每个周期上递增或递减。

    31.8事件控制,第734页; evctrl寄存器, 位2:0_“evact0[2:0]:计时器/计数器事件输入0动作 0x5异步事件的活动状态计数(异步)

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

    推荐文章