之前讲过s3c2440时钟体系,看了时钟体系再来看定时器中断会更好的结合运用所学知识点。
S3c2440共有2种定时器:
1.Watchdog看门狗定时器
2.PWM脉冲可调制定时器
下面详细介绍2种定时器的原理,来了解定时器是如何产生定时器中断的。
Watchdog定时器的原理很简单,寄存器很少,框图如下:
1.png
1.定时器,定时器那肯定是需要用到时钟的,从框图中可以看到Watchdog定时器采用的时钟源是PCLK,从s3c2440时钟体系中也可以体现出来,接的是APB总线。
2.然后到达一个8bit的分频器,可以通过配置WTCON[15:8]来设置分频器的预设值。
3.再设置WTCON[4:3]来设置除数因子来进一步分频。
所以最终的Watchdog定时器的时钟周期t_watchdog = 1/[ PCLK / (Prescaler value + 1) / Division_factor ]
4.到达WTCNT:看门狗递减寄存器。WTCNT里的数据就开始在输入时钟频率下递减。WTCNT的值由WTDAT寄存器提供。
5.WTDAT:WTDAT寄存器用于指定计数器的初始值,也就是它的超时时间,系统上电之后硬件自动的将0x8000的初始值载入到WTCNT里,在发生了第一次超时操作时,WTDAT的值才会载入到WTCNT寄存器。
当WTCNT的值减到0时,就会触发看门狗定时器中断,进而产生复位。中断框图中可以看到可以设置WTCON[2]来设置是否产生中断信号,可以设置WTCON[0]来设置是否产生复位信号。
WTCON寄存器如下图:
2.png
WTCNT、WTDAT寄存器如下图:
3.png
在之前的章节中,我们在start.s启动代码中首先做的就是关闭看门狗,把WTCON[5]=0,也就是把Watchdog timer给disable。那么Watchdog Timer就不再工作了,这样做是为了防止在启动代码进行硬件初始化的时候出现超时,发出复位信号又去重启硬件,这样就陷入了不断重启过程中。因为s3c2440芯片默认WTCON[5]是1,也就是Watchdog Timer是处于使能状态。
我们之前s3c2440时钟体系中配置了PCLK=50M Hz, 那么我们WTDAT取默认值0x8000,那么根据公式算出从开机到触发复位重启的时间t=WTDAT/( 1/[ PCLK / (Prescaler value + 1) / Division_factor ])。
我们配置
原文:https://www.cnblogs.com/fuzidage/p/12464079.html