Boot中timer定时器的设置(5)

/* load value for 10 ms timeout */ 
    lastdec = timer_load_val; 
    writel(timer_load_val, &timers->TCNTB4); 

然后将timer_load_val的值写入TCNTB4寄存器中
 
7、下面是要配置TCON寄存器,也就是timer控制寄存器

/* auto load, manual update of Timer 4 */
    tmr = (readl(&timers->TCON) & ~0x0700000) | 0x0600000;
    writel(tmr, &timers->TCON);

先来看看TCON寄存器信息:

Boot中timer定时器的设置

TCON现实与(~0x0700000)与运算,即TCON = TCON & F8FFFFF,也就是将TCON的20、21、21这几个位清零,然后TCON = TCON | 0X0600000将位21、20设置为1,对照datasheet知道将timer4设置为自动装载,和手动更新.这就有一个矛盾既然自动转载干嘛还要手动更新呢?看下8就知道了。writel()函数已经介绍过了。

8、你看下面这个代码就很有趣,他和上面的那个代码很类似

/* auto load, start Timer 4 */
    tmr = (tmr & ~0x0700000) | 0x0500000;
    writel(tmr, &timers->TCON);

起始2440定时器第一次往TCONTB装入初始值是要手动更新的,如果没有更新初值自动更新那更新什么呢,他不知道,TCONTB默认是0,更新0有什么用呢。所以需要手动更新,然后关掉手动更新,设置好后,再启动timer4就完成了timer4的设置和运行。

9、timestamp = 0,这句我们暂时还没涉及到,他是后面要用的。

10、然后返回

return (0);

尚待解决的问题:
 
1、为什么求timer_load_val这个地方会有个100呢?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/eca2c79d2e59d3745d8e4b7814130343.html