虽然定时器较多,但工作原理都是相同的,只需要理解一个定时器的工作原理即可。对于某一个定时器,其内部结构原理图如图二所示。缓存寄存器TCMPBn和TCNTBn用于缓存定时器n的比较值和初始值;TCON用于控制定时器的开启与关闭;通过读取寄存器TCNTOn得到定时器当前计数值。
其中: prescaler value=0~255 (它的值由TCFG0寄存器设置,如下图)
TCFG0 | 位 | 描述 | 初始值 |
保留 | [31:24] | 0x00 | |
Dead zone length | [23:16] | 此8位决定死区长度。死区长度的单位时间等于定时器0的单位时间 |
0x00 |
Prescaler 1 | [15:8] | 此8位决定定时器2,3,4的预标定器值 | 0x00 |
Prescaler 0 | [7:0] | 此8位决定定时器0,1的预标定器值 | 0x00 |
|
位 | 描述 | 初始值 |
Timer 0 computer buffer register | [15:0] | Set compare buffer value for Timer0 | 0x00000000 |
|
位 | 描述 | 初始值 |
Timer 0 count buffer register | [15:0] | Set count buffer value for Timer 0 | 0x00000000 |
例1:结合上面讲解可知,定时器0的输入时钟是经过PCLK分频的得到的,下图展示了其产生过程。
-------------------------------------分割线---------------------------------------------------
分析:在上题中出现了TCFG1和TCFG0两个定时器配置寄存器,其中TCFG0配置寄存器控制第一级分频器prescaler的分频系数,TCFG1配置寄存器控制多路选择开关,选择第二级分频器divider的分频系数。具体如下图所示:
-----------------------------------------分割线---------------------------------------------------
例2:PCLK为50MHz,请设置适当的分频系数,使定时器0的输入时钟为62.5kHz。
答:已知PCLK为50MHz,则50MHz/62.5kHz=800,即需要对PCLK进行800分频。所以,使第一级分频器的分频系数为100,第2级的分频系数为8即可满足要求。最后,只需要将分频系数写入定时器控制寄存器中相应的位即可,代码如下:
1
2
3
上一篇:S3C2440系统时钟
下一篇:ARM下的参数传递
推荐阅读最新更新时间:2024-03-16 14:50