1.前言
- 系统定时器模块集成了3个不同的定时器
一个周期性间隔的定时器,用来为操作系统设置时基
一个看门狗定时器,可用于软件死锁时进行系统复位
一个实时时钟计数器用来记录流逝的时间
- 系统定时器时钟
这些定时器计数使用由PMC(电源管理控制器)提供的慢时钟,这个时钟的典型频率是32.768KHZ,系统定时器也可以配置成支持其它频率
- 定时器中断
系统定时器提供了一条中断线,连接到中断控制器,一般是作为终端控制器的中断源1,与debug单元和RTC共用一条中断线,需要通过寄存器进行区分。
2.系统定时器框架
- 硬件框架
图 系统定时器框架
- 定时器的用途
图 定时器的用途
3.功能介绍
- 系统定时器时钟
系统定时器只使用SCLK时钟
- 周期性间隔定时器
周期性间隔定时器用来为操作系统提供周期性的中断,PIT的reset值是0。
它是基于一个16位的递减计数器。它是通过将一个值预加载到ST_PIMR中。
当计数器达到0的时候,状态寄存器的PITS会被置位。如果使能中断,则会产生一个中断。计数器会自动加载初始值并启动。在任何时候加载ST_PIMR寄存器会立即采用新的初值并重新启动。
注意:ST_PIMR的周期如果小于MCK周期,则会产生不可预料的问题
- 看门狗定时器
看门狗定时器是防止软件陷入死锁的时候造成系统卡死
它是通过一个16位的递减寄存器实现,初始值由ST_WDMR进行设置。
Reset时的值为0x00020000。它是使用了slow clock的128分频,来达到最大的周期为256s(典型slow clk为32.768khz情况下),也就是每隔128个slow clock周期,计数器加1.
通常情况下,在看门狗定时器溢出之前,用户会通过设置ST_CR.WDRST重新加载看门狗定时器初值
如果溢出发生,会做如下操作
设置中断产生的 ST_SR ( 状态寄存器 ) 的 WDOVF 位
l如果ST_WDMR .RSTEN被设置会产生内部reset信号
l Reloads and restarts the down counter.
写ST_WDMR寄存器不会加载并重启计数器。当ST_CR被写入,看门狗计数器会立即从ST_WDMR寄存器载入并重启,slow clock 128分频也会立即重置并重启。
- 实时时钟
实时时钟被用来计数流逝的秒数。它是基于一个20位的计数器,时钟是由slow clk用编程值进行分频。Reset时这个值分频值被设置为0x8000。
当slow时钟采用32.768khz时,计数器则每隔1秒加1。20bit可以计数到1048576秒,多于12天的时间,然后回绕到0.
实时时钟可以在任何时候从ST_CRTR 寄存器读出值。
计数器的当前值和alarm寄存器ST_RTAR进行比较。如果计数值匹配,TC_SR寄存器的ALMS位被设置。
Reset后alarm寄存器被设置成最大值0.
20位计数器每次增加时,设置ST_SR中的RTTINC位,该位可用来启动中断,或产生一秒信号。
写 ST_RTMR 将立即对时钟分频器载入新值并重启,这同样会导致 20 位计数器复位