|
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;
}
|
|