这几天调试了下TCC8902的定时计数器,简单记录下:
8902总工有3种类型的定时器,T-Timer,X-Timer,Z-Timer;其中T-Timer是通用定时器(Timer0~Timer3是4个16位的定时器,Timer4、Timer5是2个20位的定时器),X-Timer是看门狗定时器,Z-Timer是一个32位的定时器,三种不同类型的定时器对应不同的时钟源,这些时钟源可能是内部总线时钟分频出来的,也有可能是外部时钟输入,具体看寄存器的设置,下面简单说下T-Timer1的设置:
上图是16bit定时器的原理框图。定时器设置,最关键的是时钟源的选择(上图的TCLK),8902的时钟源有两种产生方式TCLK(PCLK=12MHz,这个时钟是在boot的main.c中设置)分频产生和外部EXTCLK[3:0]产生,配置TCFG1可以选择不同的时钟源和分频因子。
15~10位 :预留
9位(STOP) :设置连续计数,还是只定一次
8位(CC) :设置TCNT是否清零
7位(TOL) :设置TCNT是上升沿计数还是下降沿计数
[6:4]位(TCKSEL) :时钟源的选择
k=0~4 TCK=TCLK/2(k+1) (2的k+1次方)
k=5、6 TCK=TCLK/2k
k=7 外部时钟,8902有4个外部时钟引脚,这种模式只能用在0~4定时器。
3位(IEN) :中断使能控制位
2位(PWM) :PWM控制
1位(CON) :TCNT的计数方式,当TCNT=TREF时,清0还是继续计数
0位(EN) :开启/关闭定时器
接下来就是设置定时时间了,
主要是设置TREF和TCNT这两个寄存器
这两个寄存器的具体功能数据手册中有详细描述,就是设置计数值,每次来一个脉冲,技术值就会加1,当累加到这个计数值时,就会清零,再开始计数。若要用到PWM调占空比,还得要设置TMREF寄存器。
每次当计数记满之后,就会产生一个TIREQ的定时器中断,我们可以在定时器对应的定时器中断服务程序中进行相应的操作,8925的中断会有一组中断向量号和中断优先级控制寄存器,详细在以后再做记录。