3104|5

6

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

G2553 计时器中断问题 [复制链接]

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


最新回复

3-5楼正解,程序在短时间内迅速执行完毕并自动复位,导致功能无法实现。  详情 回复 发表于 2016-6-3 11:38
 
点赞 关注

回复
举报

4177

帖子

9

TA的资源

五彩晶圆(高级)

沙发
 
无法进入__interrupt void Timer_A0 ,会不会是你预编译引起的呢,注释掉预编译看看呢
 
 

回复

366

帖子

1

TA的资源

一粒金砂(高级)

板凳
 
你打开全局中断之后,需要加个while(1);
 
 
 

回复

366

帖子

1

TA的资源

一粒金砂(高级)

4
 
while(1);保证程序不会执行完
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 
加一句While(1)或加一句进入低功耗的代码
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

6
 
3-5楼正解,程序在短时间内迅速执行完毕并自动复位,导致功能无法实现。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表