每个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专用定时器 | ||
重新加载值和当前值 | 计时器负载 定时器计数器 | 要重新加载到递减器中的值。 递减器的当前值。 |
控制和中断 | 定时器控制 定时器中断 | 启用、自动重新加载、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
| 表示看门狗达到零。 |
编程模型
定时器启用序列
- .选择时钟输入源,设置预分频器值(slcr.MIO_MUX_SEL寄存器、TTC时钟控制寄存器)。继续执行此步骤之前,请确保禁用TTC(TTC.Counter_Control_x[DIS]=1)。
- .设置间隔值(间隔寄存器)。此步骤是可选的,仅适用于间隔模式。
- 设置匹配值(匹配寄存器)。如果要启用匹配,此步骤是可选的。
- .使能中断(中断使能寄存器)。如果要启用中断,此步骤是可选的。
- 启用/禁用波形输出,启用/禁用匹配,设置计数方向,设置模式,启用计数器(TTC计数器控制寄存器)。此步骤启动计数器。
计数器停止顺序
- 读取计数器控制寄存器的值。
- 将DIS比特设置为1,同时保留其他比特。
- 写回计数器控制寄存器。
计数器重新启动顺序
- 读取计数器控制寄存器的值。
- 将RST位设置为1,同时保留其他位。
- 写回计数器控制寄存器。
事件定时器启用序列
- 选择外部脉冲源(slcr.MIO_MUX_SEL寄存器)。所选择的外部脉冲的宽度是在CPU_1x周期中测量的。
- 设置溢出处理,选择外部脉冲电平,启用事件定时器(事件控制定时器寄存器)。此步骤开始测量外部脉冲的选定电平(高或低)的宽度。
- 使能中断(中断使能寄存器)。如果要启用中断,此步骤是可选的。
- 读取测量的宽度(事件寄存器)。请注意,发生溢出时返回的值不正确。
中断清除和确认序列
读取中断寄存器:读取时会清除中断寄存器中的所有位。
计数器/定时器的时钟输入选项
以下显示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所示。