4148|5

298

帖子

2

TA的资源

纯净的硅(中级)

楼主
 

有关430的定时器捕获,出现程序卡死 [复制链接]

大致是这样的,我用430的定时器捕获,来获取脉冲的宽度,在上下边沿捕获沿,加了捕获中断,运行一会儿,就会出现程序卡死的现象,这是怎么回事啊,详细描述一下:用430的定时器捕获功能来获取超声波模块的测距的时间差,就是在时间差脉冲的两个沿都捕获,两个捕获值相减,再乘以定时器时钟周期就得到了时间差。循环测试,大概是这样,开启定时器捕获中断,触发超声波模块测距,延时等待,再一次触发测距,进入低功耗模式0,定时器0捕获了4次之后,关捕获中断,退出低功耗模式0,继续后面的任务。这样会发生这样的现象,只要在超声波测距范围内快速变化距离,就是连续改变挡的距离,就出现程序卡死了,不知道为什么会出现这个情况。

最新回复

应该是和中断有很大的关系,我做调试的时候,比如用TACCTL1模块作捕获,根据中断源寄存器的值,明显显示的是捕获中断,可是在中断程序里面进行检测时,不加断点,在判断语句处就会判断错误,从而不能进入相应代码,如果在判断语句上下断点,判断就会正确,这会不会是一个BUG,还是什么其他原因  详情 回复 发表于 2013-6-6 00:53
 
点赞 关注

回复
举报

298

帖子

2

TA的资源

纯净的硅(中级)

沙发
 
好像问题解决了,还是贴一下程序,好看些,写的文字太多了,看起烦
这是循环体里面的语句,感觉问题出现在里面
while(1)
{
        //_BIS_SR(LPM3_bits);    // Enter LPM3
        //CCR0 = 0;                   //(改之前的语句)
        //CCTL0 |= CCIE;         //开捕获中断(改之前的)
        //CCTL0 &= ~CCIFG;  //(改之前的)
        TrigGetDistance();      //触发超声波模块第一次测距
        delay_ms(100);           //延时等待
        TrigGetDistance();      //触发第二次测距
        delay_ms(100);           //延时等待(这是新加的一句,原先的是下面注释的那两句)
        //_BIS_SR(LPM0_bits);    //进入低功耗模式0
        //CCTL0 &= ~CCIE;
        GetCarSpeed();
        ...........
}
定时器0捕获比较0中断函数
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0(void)
{
    cap_array[index++] = CCR0;

    if(index == 4)
    {
        index = 0;
        //LPM0_EXIT;     //退出低功耗模式0(改了后注释掉了)
        //CCTL0 &= ~CCIE; //(改之前没注释掉这句,改了后注释掉了)
    }
   
    P1OUT ^= BIT0;
}

还是不明白为什么触发测距模块后,就进入低功耗模式和在中断里面退出,然后再关闭中断会出现程序卡死的现象,真心求教
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
不清楚,会不会是中断发了冲突,我在用捕获功能的时候,也会卡死,就是在调试的时候,突然就提示错误,得重新连接电脑才行,后来查看了中断源的知识,把中断程序加上就没有问题了

点评

调试不会出现错误提示啊,运行时,程序好像跑飞了,我用看门狗测试过,应该是中断没用好,定时器的捕获中断  详情 回复 发表于 2013-6-5 02:32
 
 
 

回复

298

帖子

2

TA的资源

纯净的硅(中级)

4
 

回复 板凳 bobde163 的帖子

调试不会出现错误提示啊,运行时,程序好像跑飞了,我用看门狗测试过,应该是中断没用好,定时器的捕获中断

点评

应该是和中断有很大的关系,我做调试的时候,比如用TACCTL1模块作捕获,根据中断源寄存器的值,明显显示的是捕获中断,可是在中断程序里面进行检测时,不加断点,在判断语句处就会判断错误,从而不能进入相应代码,  详情 回复 发表于 2013-6-6 00:53
 
 
 

回复

1976

帖子

0

TA的资源

五彩晶圆(初级)

5
 

回复 4楼 yunhaiking 的帖子

应该是和中断有很大的关系,我做调试的时候,比如用TACCTL1模块作捕获,根据中断源寄存器的值,明显显示的是捕获中断,可是在中断程序里面进行检测时,不加断点,在判断语句处就会判断错误,从而不能进入相应代码,如果在判断语句上下断点,判断就会正确,这会不会是一个BUG,还是什么其他原因

点评

在线调试的时候,有中断可能就会有问题,下到单片机里面直接运行试看看  详情 回复 发表于 2013-6-6 12:47
 
 
 

回复

298

帖子

2

TA的资源

纯净的硅(中级)

6
 

回复 5楼 bobde163 的帖子

在线调试的时候,有中断可能就会有问题,下到单片机里面直接运行试看看
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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