作者:小墨,本文转载自:ZYNQ微信公众号
简介
TTC 包含三个独立的定时器/计数器,PS中有两个TTC模块,总共有六个定时器/计数器,TTC 1 控制器可以配置为安全或非安全模式,使用nic301_addr_region_ctrl_registers.security_apb [ttc1_apb] 寄存器位。TTC 控制器内的三个定时器具有相同的安全状态。
具体特点
每个三路定时器计数器都有:
1. 三个独立的 16 位预分频器和 16 位向上/向下计数器
2. 可选时钟输入,来自:
3. 三个中断,每个计数器一个
4. 溢出中断、定期中断或计数器匹配可编程值
5. 通过 MIO 和 PL 生成波形输出(例如,PWM)
TTC 的框图
TTC 的框图如图所示,定时器/时钟0的时钟输入和输出复用由 slcr.MIO_PIN_xx 寄存器控制,如果未在这些寄存器中进行选择,则默认值为EMIO接口。
三重计数器定时器框图
功能描述
每个预分频器模块均可独立编程以使用 PS 内部总线时钟 (CPU_1x),或来自 MIO 或 PL 的外部时钟。对于外部时钟,SLCR 寄存器通过 MIO 或 PL 确定确切的引脚排列。然后,所选时钟从2分频到65536,再应用于计数器。
计数器模块可以向上计数或向下计数,并且可以配置为在给定的间隔内计数,它还将三个匹配寄存器与计数器值进行比较,如果匹配则产生中断。
中断模块结合了各种类型的中断:计数器间隔、计数器匹配、计数器溢出、事件定时器溢出;每种类型都可以单独启用。
操作模式
每个计数器模块都可以独立编程以在以下两种模式中的任何一种下运行:
间隔模式
计数器在 0 和间隔寄存器的值之间连续递增或递减,计数方向由计数器控制寄存器的 DEC 位决定,当计数器通过零时产生间隔中断,当计数器值等于匹配寄存器之一时,将产生相应的匹配中断
溢出模式
计数器在 0 到 0xFFFF 之间连续递增或递减,计数方向由计数器控制寄存器的 DEC 位决定。当计数器通过零时产生溢出中断。,当计数器值等于匹配寄存器之一时,会产生相应的匹配中断。
事件定时器操作
事件计时器通过在 CPU_1x 上计时的内部(用户不可见)16 位计数器进行操作,该计数器:
在外部脉冲的非计数阶段重置为 0
外部脉冲计数阶段的增量
事件控制定时器寄存器控制内部计数器的行为:
E_En 位:当为 0 时,立即将内部计数器重置为 0,并停止递增
E_Lo 位:指定外部脉冲的计数相位
E_Ov 位:指定如何处理内部计数器溢出(在外部脉冲的计数阶段)
当 0:溢出导致 E_En 为 0(见 E_En 位描述)
当 1:溢出导致内部计数器回绕并继续递增
当发生溢出时,总是会产生中断(取决于通过另一个寄存器进一步启用)。
在外部脉冲的计数阶段结束时,使用内部计数器的非零值更新事件寄存器;因此,它显示了外部脉冲的宽度,以 CPU_1x 的周期数衡量。
如果内部计数器由于溢出而复位为 0,在外部脉冲的计数阶段,事件寄存器将不会更新并保持上次非溢出计数操作的旧值。
编程模型
计数器使能序列
选择时钟输入源,设置预分频器值(slcr.MIO_MUX_SEL 寄存器,TTC 时钟控制寄存器),在继续执行此步骤之前,请确保禁用TTC(ttc.Counter_Control_x [DIS] = 1)。
设置间隔值(Interval register)。此步骤是可选的,仅适用于间隔模式。
设置匹配值(Match registers)。如果要启用匹配,则此步骤是可选的。
使能中断(Interrupt Enable register)。如果要启用中断,则此步骤是可选的。
启用/禁用波形输出、启用/禁用匹配、设置计数方向、设置模式、启用计数器(TTC Counter Control register),此步骤启动计数器。
计数器停止序列
回读计数器控制寄存器的值。
将 DIS 位设置为 1,同时保留其他位。
写回计数器控制寄存器。
计数器重启序列
回读计数器控制寄存器的值。
将RST位设置为1,同时保留其他位。
写回计数器控制寄存器。
事件定时器使能序列
选择外部脉冲源(slcr.MIO_MUX_SEL 寄存器),所选外部脉冲的宽度以 CPU_1x 周期测量
设置溢出处理,选择外部脉冲电平,启用事件定时器(Event Control Timer register)。
使能中断(Interrupt Enable register)。
读取测量的宽度(Event register)。请注意,发生溢出时返回的值不正确。
中断清除和应答序列
读取中断寄存器:读取时清除中断寄存器中的所有位。