目前总共用到了四个中断向量,我觉得已经把g2553的所有定时器中断都用到了。
定时器有两个,ta0与ta1,每个定时器又有两个中断向量
1,ccr0到达时的中断,在计数模式时候很有用,平时定时器的基本功能。
2,ccr1,ccr2,以及 overflow时候的中断向量,这里面又有三个中断标志。
#define timer0_a1_vector (8 * 2u) /* 0xfff0 timer0)a cc1, ta0 */
#define timer0_a0_vector (9 * 2u) /* 0xfff2 timer0_a cc0 */ . .
#define timer1_a1_vector (12 * 2u) /* 0xfff8 timer1_a cc1-4, ta1 */
#define timer1_a0_vector (13 * 2u) /* 0xfffa timer1_a cc0 */
可见,每个timera模块有两个中断向量
更详细一点,查阅用户指南可知:
timera0只针对ccr0的计数溢出 timera1再查询taiv后可知道是ccr1,还是ccr2,亦或taifg引起的,至于taifg是什么情况下置位的,则要看ta工作的模式
ta0的两个中断:
#pragma vector=timer0_a0_vector
__interrupt void timera0(void)
{
//计数到达时候的代码
}
#pragma vector=timer0_a1_vector
__interrupt void timer0_a(void)
{
switch( ta0iv ) //taiv中断向量寄存器 用于
{
case 2: break; // ccr1 not used 捕获/比较器1
case 4: break; // ccr2 not used 捕获/比较器2
case 10: break; // overflow 定时器溢出
}
下面是ta1的两个中断向量,注意向量名字。
#pragma vector=timer1_a0_vector
__interrupt void timera1(void)
{
//计数到达时候的代码
}
#pragma vector=timer1_a1_vector //timer1_a cc1 的中断向量
__interrupt void timer_a1(void)
{ unsigned int count; char counth,countl; float mile; uchar shi[2]; //的方法进行判断是哪一个中断源产生的中断
switch(ta1iv) //如果是timer1_a cc1产生的中断
{
case 2: break; // ccr1 not used 捕获/比较器1
case 4:break; // ccr2 not used 捕获/比较器2
case 10:break; // overflow 定时器溢出
}
另外ta1与ta2的寄存器名字也有不同设置时候需要注意
『本文转载自网络,u球体育app下载的版权归原作者所有,如有侵权请联系删除』