[讨论] G2553 计时器中断问题

23124515   2016-5-27 19:14 楼主
悬赏 10 分 芯积分未解决
这两天试着在做一个简单的频率计,通过两个计时器部分,其中一个接外部的TACLK来计频数,另外一个用ACLK的32768Hz时钟频率来给一个1s中断,可我发现其中外部时钟计数的防溢出中断__interrupt void Timer_A0 (void)不能进入,而进入ISR_Trap,查了网上的资料,发现这个iSR_trap是因为引起中断而不能进入中断而发生的,可调试了好几天,还是不能发现问题在哪里。小弟接触430时间不长,可能是自己阅历不够所以不能解决问题,所以在这里想问问各位论坛大神有什么建议,在下感激不尽!!

#include
long long int freqdata;
int i,j,h=0,m=0,n=0,flagFreq=0,fun,max=100,min=1,Vpp,buffer,xsd;
int TA_OverflowCnt=0;//TA溢出次数存放变量
void main(void)
{ WDTCTL = WDTPW + WDTHOLD;            // Stop WDT
//端口设置
P1OUT = 0;
P1SEL |= BIT0;              //允许其第二功能,作为TACLK输入,即待测输入 <<----设为1外围模块接口
// P2SEL = 0x00;        //设置P2为通用I/O
P1DIR &=~BIT0;                //P1.0(TACLK)作为输入引脚
// P2DIR |= (BIT0 + BIT1 + BIT2 + BIT3 + BIT4);                        // Set P2 to output direction 0000 1111
    //TimerPart
TA1CTL = TASSEL_1 + TACLR + TAIE + MC_1;  // TA1信号作为基准时钟   选择ACLK(32768Hz)作为时钟 持续上升
TA0CTL = TASSEL_0 + MC_2 + TAIE; //外部时钟信号作为A0时钟 ,持续上升模式
TA1CCR0 = 32768;
TA0CCR0 = 40000;
TA0CCTL0 = OUTMOD_4 + CCIE;
TA1CCTL0 = CCIE;
    //Clock Setup
P1SEL |= BIT4;              //允许其第二功能,作为TACLK输入,即待测输入 <<----设为1外围模块接口
P1DIR |= BIT4;
BCSCTL1 = CALBC1_1MHZ;                    // Set range
    DCOCTL = CALDCO_1MHZ;
_EINT();        //打开全局中断
}

//   TA interrupt service routine计数器A0溢出中断
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(TIMER0_A0_VECTOR))) Timer_A0 (void)
#else
#error Compiler not supported!
#endif
{
TA_OverflowCnt = TA_OverflowCnt + 40000;                              // Add Offset to CCR0
}
//定时器A1中断
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer_R1(void)
{
freqdata = TA_OverflowCnt + TAR;//读取上次TA计数值及溢出次数,计算频率
TA_OverflowCnt=0;      //将溢出次数置零
TA1CTL = TASSEL_1 + TAIE + MC_1;
TA1R = 0 ;
TA0CTL = TASSEL_0 + TAIE + MC_2;  //选用外部时钟  连续计数模式
TA0R = 0 ;
flagFreq = 1;
// P1OUT ^= BIT6;
}


回复评论 (5)

无法进入__interrupt void Timer_A0 ,会不会是你预编译引起的呢,注释掉预编译看看呢
点赞  2016-5-28 23:03
你打开全局中断之后,需要加个while(1);
点赞  2016-5-30 15:13
while(1);保证程序不会执行完
点赞  2016-5-30 15:14
加一句While(1)或加一句进入低功耗的代码
点赞  2016-6-2 15:31
3-5楼正解,程序在短时间内迅速执行完毕并自动复位,导致功能无法实现。
点赞  2016-6-3 11:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复