Zynq-7000系统看门狗定时器SWDT详解
扫描二维码
随时随地手机看文章
zynq中每个A9处理器都有自己的私有32位定时器以及32位看门狗定时器(AWDT),2个A9共享一个全局64位定时器(GTC)。系统级上,有一个24位的系统级看门狗定时器(SWDT)和两个16位3重定时器/计数器(TTC)。
系统看门狗定时器(SWDT)用于表示一些灾难性的系统故障,例如PS PLL故障。与AWDT不同,SWDT可以不使用外部设备或PL的时钟,并向外部设备提供复位输出设备或PL上。
特点简介
可用的计时器/计数器的主要功能如下:
-
内部24位计数器
-
可选时钟输入,来自:
-
内部PS总线时钟(CPU_1x)
-
内部时钟(来自PL)
-
外部时钟(来自MIO)
-
超时时,输出以下一项或组合:
-
系统中断(PS)
-
系统重置(PS,PL,MIO)
-
可编程超时时间:
- 超时范围32,760至68,719,476,736个时钟周期(在100 MHz时为330 µs至687.2s)
-
超时时可编程的输出信号持续时间:
- 系统中断脉冲4、8、16或32个时钟周期(CPU_1x时钟)
框图
下图显示了SWDT的框图
系统看门狗定时器框图
从中我们看到
-
SLCR可编程寄存器(WDT_CLK_SEL,MIO控制)选择时钟输入。
-
SWDT可编程寄存器设置CLKSEL和CRV的值。
-
信号重新启动会使24位计数器重新加载CRV值,然后重新开始计数。
-
信号停止导致计数器在CPU调试期间停止(行为与AWDT相同)
功能说明
控制逻辑块具有连接到系统互联的APB接口,为了能够写入寄存器,在每次写数据的时候,从APB接收到的密钥字段必须与寄存器的密钥匹配。
零模式寄存器在其内部24位计数器到达时控制SWDT的行为零,接收到零信号后,控制逻辑模块将中断输出信号置为有效。如果同时设置了WDEN和IRQEN,则控制逻辑模块会断言IRQLN时钟周期的中断输出信号,如果设置了WDEN,也会断言复位输出信号大约一个CPU_1x周期。然后,该24位计数器将保持为零,直到变为0时重新启动。
计数器控制寄存器通过在以下位置设置重载值来设置超时时间swdt.CONTROL [CLKSET]和swdt.CONTROL [CRV]来控制预分频器和24位计数器。
重新启动寄存器用于重新启动计数过程,匹配写入该寄存器键使预分频器和24位计数器来重新加载CRV信号中的值。
状态寄存器显示24位计数器是否达到零,无论WDEN位在零模式寄存器,如果24位计数器不为零,则始终递减计数至零,并且 存在选定的时钟源。一旦达到零,就将状态寄存器的WDZ位置1,然后保持设置状态,直到重新启动24位计数器。
预分频器模块对选定的时钟输入进行分频,每次采样CLKSEL信号时钟上升沿。
内部24位计数器递减计数为零,并保持为零,直到重新启动为止,而计数器为零,零输出信号为高。
中断到PS中断控制器
来自SWDT的脉冲长度(四个CPU_1x时钟周期)足以使中断控制器使用上升沿敏感度来捕获中断。
重启
看门狗复位发送到PS复位子系统以引起非POR复位,如下图所示,描述了各种复位的效果。MIO引脚或EMIOWDTRSTO的复位输出为高电平有效。
需要注意的是:要为PS_POR_B和其他电路板复位产生信号脉冲,请将EMIOWDTRSTO信号从SWDT穿过PL路由到可外部锁存的引脚,以产生有效的复位脉冲。或者,使用外部看门狗定时器设备,该设备由PS软件通过GPIO输出引脚进行管理。数据手册中定义了PS_POR_B复位脉冲宽度要求。
SWDT时钟输入选项
以下代码显示了SoC如何选择SWDT的时钟源:
if slcr.WDT_CLK_SEL[0] is 0, use CPU_1X else if slcr.MIO_PIN_14[7:0] is 01100000, use MIO pin 14 else if slcr.MIO_PIN_26[7:0] is 01100000, use MIO pin 26 else if slcr.MIO_PIN_38[7:0] is 01100000, use MIO pin 38 else if slcr.MIO_PIN_50[7:0] is 01100000, use MIO pin 50 else if slcr.MIO_PIN_52[7:0] is 01100000, use MIO pin 52 else use EMIOWDTCLKI
重置SWDT的输出选项
以下代码显示了SoC如何选择SWDT的复位输出引脚:
if slcr.MIO_PIN_15[7:0] is 01100000, use MIO pin 15 else if slcr.MIO_PIN_27[7:0] is 01100000, use MIO pin 27 else if slcr.MIO_PIN_39[7:0] is 01100000, use MIO pin 39 else if slcr.MIO_PIN_51[7:0] is 01100000, use MIO pin 51 else if slcr.MIO_PIN_53[7:0] is 01100000, use MIO pin 53 else use EMIOWDTRSTO





