/* 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寄存器信息:
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呢?