中断的开关
中断这个,我试了好像不太好用,定时中断还是会启动~
// disable global interrupt关中断 __bic_SR_register(GIE); // enable global interrupt开中断 __bis_SR_register(GIE); _DINT();//关总中断 (可用于保护不希望受到中断打断的程序) _()NOP; //在保护程序之前与关中断之间最少有一步操作 _EINT(); //开总中断 1234567891011
定时中断
TA0R = 0; TA0CCR0 = 32768; // 1s = 32768 * (1 /32768) TA0CTL = TASSEL__ACLK | MC__UP | TACLR | TAIE; // ACLK, count mode, clear TAR, enable interrupt 123 关于TA0CTL 以定时器A举例 时钟CLK
#define TASSEL__TACLK (0*0x100u) /* Timer A clock source select: 0 - TACLK外部输入*/ #define TASSEL__ACLK (1*0x100u) /* Timer A clock source select: 1 - ACLK32.768KHz*/ #define TASSEL__SMCLK (2*0x100u) /* Timer A clock source select: 2 - SMCLK16MHz*/ #define TASSEL__INCLK (3*0x100u) /* Timer A clock source select: 3 - INCLK外部输入*/ 1234 模式MC
#define MC__STOP (0*0x10u) /* Timer A mode control: 0 - Stop停止暂停定时器*/ #define MC__UP (1*0x10u) /* Timer A mode control: 1 - Up to CCR0向上计数模式*/ #define MC__CONTINUOUS (2*0x10u) /* Timer A mode control: 2 - Continuous up连续模式*/ #define MC__UPDOWN (3*0x10u) /* Timer A mode control: 3 - Up/Down向上或向下模式*/ 1234 TA0CCR0
设定的计数阈值
如果MC选择MC__UP,则就是说TA0R开始定时累计,当TA0R==TA0CCR0时,产生定时中断TACLR
清空TAxR,这个是用来计数用的
#define TACLR (0x0004) /* Timer A counter clear清空TAxR*/ 1 TAIE
使能中断
#define TAIE (0x0002) /* Timer A counter interrupt enable使能中断*/ #define TAIFG (0x0001) /* Timer A counter interrupt flag中断产生标志位*/ 12