[Linux]定时器中断
[Linux]定时器中断
INTRODUCTION
接触多了,难的不是写代码而是看手册,搞明白
TIMER0
上面这张图就说明了定时器总体工作原理,自己看的也就这样。不明不白hhh
定时器配置寄存器,上面的截图说的很明白,这里用prescaler 0 用99
这个地方就是定时器用什么模式。
计数器和比较的一个寄存器
上面这个就是我最不明白了,mux为何用1/16
CODE PROGRAM
1void timer_init(void)
2{
3 /* 设置TIMER0的时钟 */
4 /* Timer clk = PCLK / {prescaler value+1} / {divider value}
5 = 50000000/(99+1)/16
6 = 31250
7 */
8 TCFG0 = 99; /* Prescaler 0 = 99, 用于timer0,1 */
9 TCFG1 &= ~0xf;
10 TCFG1 |= 3; /* MUX0 : 1/16 */
11
12 /* 设置TIMER0的初值 */
13 TCNTB0 = 15625; /* 0.5s中断一次 */
14
15 /* 加载初值, 启动timer0 */
16 TCON |= (1<<1); /* Update from TCNTB0 & TCMPB0 */
17
18 /* 设置为自动加载并启动 */
19 TCON &= ~(1<<1);
20 TCON |= (1<<0) | (1<<3); /* bit0: start, bit3: auto reload */
21
22 /* 设置中断 */
23 register_irq(10, timer_irq);
24}
这就是配置寄存器代码
CODE TECHNIQUE
喜欢c的最大理由就在这
1
2typedef void(*irq_func)(int);
3irq_func irq_array[32];
4
这样用很方便,节省了代码量,程序就是不易读hhhh
吾心信其可行,
则移山填海之难,
终有成功之日!
——孙文
则移山填海之难,
终有成功之日!
——孙文
评论
0 评论