MSP430 5438 有3个时钟,分别是 TA0、TA1 和TB
了解了定时器A的用法:定时器A可以分成几个独立的时间周期。这几个时钟周期共用一个计数器TA1R或TA0R。
TIMER0 含 TA0CCR0- TA0CCR4 五个
TIMER1 含 TA1CCR0- TA1CCR2 三个
TA0CCR0\TA1CCR0 用于控制计数周期,也就是每当TA0R\TA1R 计数到TA0CCR0\TA1CCR0所设定的数值后就会清零。当计数器计数到CCR0时,CCR0单元会产生一个中断同样当计数器计数到CCR1和CCR2时,两个单元也都会个产生一个中断这样我们可以通过定时器A得到三个定时时间了。
注意的是在增加计数模式时CCR1和CCR2的值应该小于CCR0,否则CCR1和CCR2不会产生中断并且每次CCR1和CCR2中断后要把他重新赋值这样才能保证CCR1和CCR2的中断间隔时间不变例。
TA0CCR0 =8000; // CCR0必须最大,因为一计数到CCR0即立刻清0,用于控制周期
每8000单位时间就触发一次,并TA0R从新计数(CCRO清0)
TA0CCR1=4000; //每4000单位时间就触发一次(CCR1清0吗?) TA0CCR2=1000;
//每1000单位时间就触发一次(CCR2清0吗?)
CCTLx是相应比较/捕获寄存器的控制寄存器它可对比较/捕获寄存器进行设置,在这里只用到比较功能,也就是当计数到CCRx时产生中断,由于CCTLx默认的是比较功能,所以一般也就只用到CCIE这个控制字,就是开启相应比较器的中断,中断函数比较/捕获寄存器0和比较/捕获寄存器1、2是分开的,CCR0的中断很容易只需在函数中加上自己的中断相应程序就行但是CCR1和CCR2是公用一个中断函数的,这就需要识别到底是哪个中断,这可以通过一个寄存器TAIV来识别
|