MSP430块崩溃了,求帮忙看下这个程序TIMERA1_VECTOR怎么只发生一次中断?
用JTAG调试,TIMERA1_VECTOR中断只发生一次,就不发生了,问题出来哪里?#include<msp430x20x2.h>
#include "VLO_Library.h"
#include "intrinsics.h"
unsigned int dco_delta;
unsigned long F_VLOCLK;
unsigned int TACCR0_INIT;
int main(void)
{
WDTCTL = WDTPW +WDTHOLD; // Stop Watchdog Timer
P1DIR |= 0x11; // P1.0,1,4 outputs
P1SEL |= 0x10; // P1.4 = SMCLK
BCSCTL3 = LFXT1S_2; // ACLK = VLO
BCSCTL1 = CALBC1_8MHZ; // 8MHz cal value
DCOCTL = CALDCO_8MHZ; // 8MHz cal value
__delay_cycles(100);
dco_delta = TI_measureVLO(); // dco delta = number of
// 1MHz cycles in 8 ACLK cycles
F_VLOCLK=8000000UL / dco_delta; //VLO时钟频率
TACCR0_INIT=F_VLOCLK/100-1;
//TACCTL0 = CCIE;
TACCR0 = TACCR0_INIT;
TACTL = TASSEL_1 + MC_1+ TAIE; //ACLK作为时钟源,不分频,开TIMERA1中断
P1OUT = 0x01;
__enable_interrupt();
while(1);
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
if(TAIV==10)
{
P1OUT ^= 0x01; // 50HZ输出??
}
} 连续增模式要重新赋初值的吧,好久没用MSP430了,不太确定。你试试看 赋值方式好像不对
TACCR0 = TAR + TACCR0_INIT; 是不是没有清interrupt flag 建议,你到利尔达的论坛去!那是430的天下,这里是AVR呀,很多人不用430的, TACTL = TASSEL_1 + MC_1+ TAIE; //ACLK作为时钟源,不分频,开TIMERA1中断
ACLK 时钟接没有? BCSCTL3 |= LFXT1S_2; // 内部低频震荡VLO作为ACLK时钟源
不知道问题出在哪里。
现在换TIMERA的比较中断,可以了。
TACCTL0 = CCIE; //打开TACCR0比较中断
TACCR0 = TACCR0_INIT;
TACTL = TASSEL_1 + MC_1;//ACLK作为时钟源,不分频
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void) //TACCR0比较中断
{
P1OUT ^= 0x01; // 50HZ输出??
} ==
我在网吧上查一下资料,在网吧避难中 #pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
if(TAIV==10)
{
P1OUT ^= 0x01; // 50HZ输出??
}
}
该成
#pragma vecto = TIMERA0_VECTOR //TIMERA0_VECTOR
__interrupt void Timer_A(void)
{
if(TAIV==10)
{
P1OUT ^= 0x01; // 50HZ输出??
}
} 建议楼主,在TI公司的网站上,把所有的事例代码下下来
所有的基本模块,事例上都有软件最小系统 多谢楼上指点。
TCCRRO比较中断向量是 TIMERA0_VECTOR,
TIMER_A溢出中断向量是TIMERA1_VECTOR。
页:
[1]