分类: 嵌入式
2014-02-07 13:54:37
原文地址:2. interrupt_init 作者:changyongID
|
use PWM Timer 4 because it has no output
timer的使用
产生timer的频率过程如下
/---> 1/2 * PLCK1
(产生PCLK1) |/--> 1/4 * PLCK1
PCLK -> 被8-bit prescaler分频 ---> clock divider -----> 1/8 * PLCK1
|\--> 1/16 * PLCK1
\--> 外部时钟(TCLK)
TCFG0 Bit Description
Prescaler 1 [15:8] These 8 bits determine prescaler value for Timer 2, 3 and 4.
Prescaler 0 [7:0] These 8 bits determine prescaler value for Timer 0 and 1. 0x00
那么看上面的代码
1. prescaler1
timers->TCFG0 = 0x0f00;
这里要使用timer4,所以设置其[15:8]为0f,即prescaler1 = 16
2. 定时器初值计算
timer_load_val = get_PCLK()/(2 * 16 * 100);
timers->TCNTB4 = timer_load_val 将值记录于TCNTB4中。在 auto reload 模式时,在减计数一次完成之后,会自动将 TCNTB4 的值赋给 TCNT4
4. TCON
最后 设置 TCON 的bit[22:20]
timers->TCON = (timers->TCON & ~0x0700000) | 0x600000; => bit[22:20] = 110
即选择 auto reload mode, update TCNTB4
timers->TCON = (timers->TCON & ~0x0700000) | 0x500000; => bit[22:20] = 101
即 auto reload mode, start for timer4 此时,真正开始定时器4