CpuTimer0Regs.TPR.all = 0xFFFF;//预定标寄存器
CpuTimer0Regs.TPRH.all = 0;
这两句话其实是给一样的寄存器来赋值的,因为CPU定时器0的预定标计数器的寄存器是由两个构成的,一个是TPRH,一个是TPR,所以上述的两个语句中是否有一个是TPRH。好,抛开这个问题不谈,我们来简单谈一下CPU定时器0各个寄存器之间的关系。
CPU定时器有寄存器:计数器寄存器TIMH:TIM,周期寄存器PRDH:PRD,控制寄存器TCR,预定标计数器TPRH:TPR。这里,AH:A的形式表示是一个32位的寄存器是由两个16位的寄存器构成的,AH是高16位,A是低16位。
CPU定时器计数方式是复位时,计数器寄存器TIMH:TIM内装载周期寄存器PRDH:PRD的值,经历一个计数器时钟时,TIMH:TIM内的值就减1,一直减到0,这时产生定时器周期中断事件,并重新装载PRDH:PRD的值,开始计数。这里就讲到了,计数器寄存器在一个计数器时钟时减1,那么计数器时钟是多少呢?或者说是每隔多少时间,定时器的计数器才会减1呢?这个就由预定标寄存器TPRH:TPR来决定了。
先来了解一下预定标寄存器的结构了,TPRH和TPR这两个寄存器都由两部分构成,高8位为定时器预定标计数器PSC,低8位是定时器分频TDDR。也就是说,TPRH是由PSCH和TDDRH构成,而TPR是由PSC和TDDR构成的。这个工作的原理其实和前面的定时器计数类似的,复位时,PSCH:PSC重新装载TDDRH:TDDR的值,然后经历一个CPU时钟时,PSCH:PSC就减1,PSCH:PSC的值减为0时,重新装载TDDRH:TDDR的值,并且产生一个计数器时钟,TIMH:TIM的值减1。