程序描述:T3通道0比较模式,比较成功后toggle。计数器采用自由运行模式。
问题:比较成功触发中断,我在中断函数里想将计数器(T3CNT)清0,单步调试后发现比不会将其清0,为什么?
#include <ioCC2530.h>
#include <stdio.h>
typedef unsigned char uchar;
typedef unsigned int uint;
void InitT3()
{
CLKCONCMD &= ~0x40; //设置系统时钟源为32MHZ晶振
while(CLKCONSTA & 0x40); //等待晶振稳定为32M
CLKCONCMD &= ~0x07; //设置系统主时钟频率为32MHZ
CLKCONCMD |= 0x38; //时钟速度32 MHz 定时器标记输出设置[5:3]250kHz
PERCFG |= 0x20; //T3 Alternative2
P2SEL |= 0x20; //0010 0000 定时器3优先
P2DIR |= 0xC0; //第1优先级:定时器1通道2-3
P1DIR |= 0xff; //端口1为输出
P1SEL |= 0x40; //0100 0000 timer3 通道0映射口P1_6
T3CCTL0 |= 0x14; //比较——跳变3CNT
//T3CCTL0 &= ~0x40; //屏蔽通道0中断
T3CCTL1 &= ~0x40; //屏蔽通道1中断
T3CC0 |= 0x64; //比较的值
T3CTL |= 0x04; //计数器清0;
T3CTL &= ~0x08; //屏蔽溢出中断
EA = 1;
IEN1 |= 0x08; // T3 interrupt = enable
T3CTL |= 0x10; //开始计数,自由模式
}
#pragma vector = T3_VECTOR//T1输入中断向量
__interrupt void T3_ISR(void)
{
if(TIMIF & 0x02)//原来用的是IRCON
{
P1_1 = 0;
TIMIF = 0;
//T3CNT = 0;
T3CTL |= 0x04; //计数器清0;
T3CTL |= 0x10; //开始计数,自由模式
}
}
void main(void)
{
InitT3();
while(1)
{
//P1_7 = 1;
}
}