Zynq7000系列FPGA中的定时器详细介绍

每个Cortex-A9处理器都有自己的专用32位定时器和32位看门狗定时器。两个处理器共享一个全局64位定时器。这些定时器总是以CPU频率(CPU_3x2x)的1/2进行计时。
在系统级,有一个24位看门狗定时器和两个16位三重定时器/计数器。
系统看门狗定时器的时钟频率为CPU频率(CPU_1x)的1/4或1/6,也可以通过来自MIO引脚或PL的外部信号进行计时。两个三重定时器/计数器的时钟频率始终为CPU频率的1/4或1/6,用于对来自MIO管脚或PL的信号脉冲宽度进行计数。

系统定时器的关系如图8-1所示。

CPU专用定时器和看门狗定时器

定时器和看门狗块都具有以下功能:

  • 32位计数器,当计数达到零时产生中断
  • 8位预分频器,可更好地控制中断周期
  • 可配置的单次或自动重新装弹模式
  • 可配置计数器起始值

计时

所有专用定时器和看门狗定时器的时钟频率始终为CPU频率的1/2(CPU_3x2x)。

寄存器概述

CPU专用定时器和看门狗定时器的寄存器概述如下表所示。

CPU专用定时器寄存器概述
功能名称概述
CPU专用定时器
重新加载值和当前值计时器负载
定时器计数器
要重新加载到递减器中的值。
递减器的当前值。
控制和中断

定时器控制

定时器中断

启用、自动重新加载、IRQ、预分频器、中断状态
CPU专用看门狗(AWDT 0 and 1)
重新加载值和当前值看门狗负载
看门狗计数器
要重新加载到递减器中的值。
递减器的当前值。
控制和中断看门狗控制
看门狗中断
启用、自动重新加载、IRQ、预分频器、中断状态(此寄存器无法禁用看门狗)
重置状态看门狗重置状态由于看门狗达到0而重置状态。
仅通过POR清除,因此SW可以判断是否重置
是看门狗引起的。
禁用禁用看门狗通过写入两个特定字的序列禁用看门狗。

全局定时器(GT)

全局计时器是一个具有自动递增功能的64位递增计数器。全局定时器被存储器映射在与专用定时器相同的地址空间中。全局计时器仅在安全状态下重置时访问。所有Cortex-A9处理器都可以访问全局计时器。每个Cortex-A9处理器都有一个64位比较器,用于在全局计时器达到比较器值时断言专用中断。

计时

GTC总是以CPU频率(CPU_3x2x)的1/2为时钟。

寄存器概述

GTC的寄存器概述如下表所示。

通用定时器寄存器概述
功能名称概述
通用定时器(GTC)
当前值全局定时器计数器增量器的当前值
控制和中断全局定时器控制
全局中断
启用定时器,启用比较器,IRQ,自动递增,中断状态
比较器比较器值
比较器
增量器
比较器的当前值
比较器的增量值
全局定时器禁用通过写入两个特定字的序列禁用看门狗

系统看门狗定时器(SWDT)

除了两个CPU专用看门狗定时器外,还有一个系统看门狗定时器(SWDT),用于发出额外灾难性系统故障的信号,例如PS PLL故障。与AWDT不同,SWDT可以从外部设备或PL断开时钟,并向外部设备或PL.提供复位输出。

特征

可用定时器/计数器的主要功能如下:

  • 内部24位计数器
  • 可选择的时钟输入来自:内部PS总线时钟(CPU_1x)、内部时钟(来自PL)、外部时钟(来自MIO)
  • 超时时,输出一个或多个:系统中断(PS)、系统复位(PS、PL、MIO)
  • 可编程超时周期:超时范围32760到68719476736个时钟周期(100 MHz时为330µs到687.2s)
  • 可编程输出信号超时持续时间:系统中断脉冲4、8、16或32个时钟周期(CPU_1x时钟)

方框图

SWDT的框图如图8-2所示,

与图8-2相关的注释:

  • SLCR可编程寄存器(WDT_CLK_SEL、MIO控制)选择时钟输入。
  • SWDT可编程寄存器设置CLKSEL和CRV的值。
  • 信号重新启动使24位计数器重新加载CRV值,并重新开始计数。
  • 信号停止导致计数器在CPU调试期间停止(与AWDT的行为相同)。

功能说明

控制逻辑块具有连接到系统互连的APB接口。从APB接收的每个写入数据都有一个密钥字段,该字段必须与寄存器的密钥相匹配才能写入寄存器。
当SWDT的内部24位计数器达到零时,零模式寄存器控制SWDT的行为。在接收到零信号时,如果WDEN和IRQEN都被设置,则控制逻辑块断言中断输出信号达IRQLN时钟周期,并且如果WDEN被设置,还断言复位输出信号达大约一个CPU_1x周期。然后,24位计数器保持为零,直到重新启动为止。
计数器控制寄存器通过在swdt中设置重载值来设置超时时间。CONTROL[CLKSET]和swdt。CONTROL[CRV]以控制预分频器和24位计数器。

Restart寄存器用于重新启动计数过程。用匹配的键写入该寄存器会使预分频器和24位计数器重新加载CRV信号中的值。
状态寄存器显示24位计数器是否为零。不管零模式寄存器中的WDEN位如何,如果它不是零并且存在所选时钟源,24位计数器总是保持向下计数到零。一旦达到零,状态寄存器的WDZ位将被设置,并保持设置状态,直到24位计数器重新启动。
预分频器块对所选择的时钟输入进行分频。CLKSEL信号在每个上升时钟沿被采样。
内部24位计数器向下计数到零,并保持在零直到重新启动。当计数器为零时,零输出信号为高电平。

Interrupt to PS中断控制器

SWDT的脉冲长度(四个CPU_1x时钟周期)足以使中断控制器使用上升沿灵敏度捕获中断。

重置

看门狗重置被发送到PS重置子系统,以引起非POR重置。MIO引脚或EMOWDTRSTO的复位输出为高电平。
提示:要为PS_POR_B和其他板重置生成信号脉冲,请将EMOWDTRSTO信号从SWDT路由到PL并到达可从外部锁存的引脚,以生成有效的重置脉冲。建议在安全模式下使用由PS软件通过GPIO输出引脚管理的外部看门狗定时器设备。

寄存器概述

SWDT的寄存器概述如表8-3所示

系统看门狗定时器寄存器概述
功能名称概述
时钟选择
slcr.WDT_CLK_SEL
在CPU_1x和外部时钟源之间进行选择
(MIO/EMIO)
MIO路由选择
slcr.MIO_PIN_xx
通过MIO多路复用器路由SWDT时钟输入,如果没有MIO路由,则使用EMIO。
重置原因
slcr.REBOOT_STATUS
当SWDT生成系统重置时,[SWDT_RST]位被设置。
零模式
swdt.MODE
启用SWDT,在超时时启用中断和重置输出,设置输出脉冲长度。
重新加载值
swdt.CONTROL
设置预分频器和24位计数器超时时的重新加载值。
重启
swdt.RESTART
使预分频器和24位计数器重新加载并重新启动。
状态
swdt.STATUS
表示看门狗达到零。

编程模型

定时器启用序列
  1. .选择时钟输入源,设置预分频器值(slcr.MIO_MUX_SEL寄存器、TTC时钟控制寄存器)。继续执行此步骤之前,请确保禁用TTC(TTC.Counter_Control_x[DIS]=1)。
  2. .设置间隔值(间隔寄存器)。此步骤是可选的,仅适用于间隔模式。
  3. 设置匹配值(匹配寄存器)。如果要启用匹配,此步骤是可选的。
  4. .使能中断(中断使能寄存器)。如果要启用中断,此步骤是可选的。
  5. 启用/禁用波形输出,启用/禁用匹配,设置计数方向,设置模式,启用计数器(TTC计数器控制寄存器)。此步骤启动计数器。
计数器停止顺序
  1. 读取计数器控制寄存器的值。
  2. 将DIS比特设置为1,同时保留其他比特。
  3. 写回计数器控制寄存器。
计数器重新启动顺序
  1. 读取计数器控制寄存器的值。
  2. 将RST位设置为1,同时保留其他位。
  3. 写回计数器控制寄存器。
事件定时器启用序列
  1. 选择外部脉冲源(slcr.MIO_MUX_SEL寄存器)。所选择的外部脉冲的宽度是在CPU_1x周期中测量的。
  2. 设置溢出处理,选择外部脉冲电平,启用事件定时器(事件控制定时器寄存器)。此步骤开始测量外部脉冲的选定电平(高或低)的宽度。
  3. 使能中断(中断使能寄存器)。如果要启用中断,此步骤是可选的。
  4. 读取测量的宽度(事件寄存器)。请注意,发生溢出时返回的值不正确。
中断清除和确认序列

读取中断寄存器:读取时会清除中断寄存器中的所有位。

计数器/定时器的时钟输入选项

以下显示SoC如何为TTC0计数器/定时器0选择时钟源:

if slcr.MIO_PIN_19[6:0] is 1100000, use MIO pin 19
else if slcr.MIO_PIN_31[6:0] is 1100000, use MIO pin 31
else if slcr.MIO_PIN_43[6:0] is 1100000, use MIO pin 43
else use EMIOTTC0CLKI0

TTC0计数器/定时器1只能使用EMIOTC0CLKI1。
TTC0计数器/定时器2只能使用EMIOTC0CLKI2。
以下显示了SoC如何为TTC1计数器/定时器0选择时钟源:

if slcr.MIO_PIN_17[6:0] is 1100000, use MIO pin 17
else if slcr.MIO_PIN_29[6:0] is 1100000, use MIO pin 29
else if slcr.MIO_PIN_41[6:0] is 1100000, use MIO pin 41
else use EMIOTTC1CLKI0

TTC1计数器/计时器1只能使用EMIOTC1CLKI1。
TTC1计数器/定时器2只能使用EMIOTC1CLKI2。

当选择MIO引脚或EMIOTTCxCLKIx作为时钟源时,如果时钟停止运行,则无论时钟是否已经停止,相应的计数值寄存器都会保留旧值。在这种情况下必须小心。

I/O信号

定时器I/O信号如表8-5所示。
系统中有两个三重定时器计数器(TTC0和TTC1)。每个TTC有三组接口信号:计数器/定时器0、1和2的时钟输入和波形输出。
对于每个三重定时器计数器,计数器/定时器0的信号可以使用MIO_PIN寄存器路由到MIO。如果MIO_PIN寄存器未选择时钟输入或波形输出信号,则默认情况下将信号路由到EMIO。计数器/定时器1和2的信号只能通过EMIO获得。

系统看门狗定时器I/O信号如表8-6所示。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值