我很郁闷,连续试了几个sample code都有问题
我的程序:
void main( void )
{
volatile unsigned int i;
// Stop the watchdog timer so it doesn't reset our chip
WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer
_BIS_SR(OSCOFF + SCG0 + GIE);
SCFI0|=FN_8;
FLL_CTL0 |= OSCCAP0+DCOPLUS; // set oscillator capacitance
do
{
IFG1 &= ~OFIFG; // Clear oscillator fault flag
for ( i=50000; i==0; i--); // Delay
}
while (IFG1 & OFIFG); // Test osc fault flag // DCO to stabilize.
__delay_cycles( 1000 );
TACCTL0 = CCIE; // TACCR0 interrupt enabled
TACCR0 = 2000;
TACTL = TASSEL_2 + MC_1+ID_3+TAIE; // SMCLK, up mode
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
while(1);
}
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
timer++;
}
问题是无法进入中断,timer这个变量始终为0,很简单一个程序出现这个问题我真不知道哪错了,请高人指点!
此帖出自
小平头技术问答
#define TIMER1_A1_VECTOR (48 * 2u) /* 0xFFE0 Timer1_A3 CC1-2, TA1 */#define TIMER1_A0_VECTOR (49 * 2u) /* 0xFFE2 Timer1_A3 CC0 */
默认TA1和CCR0不是同一个中断向量。
第一次来的是CCR0中断,往后CCR0+1的时候来TA中断,所以你的程序中断进不去,为什么这么说呢。默认不写的情况可以理解为程序跑飞了。
你干脆可以这么理解,程序进入中断后自动关闭中断。所以不管是跑飞还是什么情况都无法再次进入中断了。没有服务函数啊,老大。
fuchong兄已经说明问题所在了。
一周热门 更多>