8835|13

61

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

主程序里关中断的问题。 [复制链接]

我的主程序里大部分的时间都是关中断的,开中断的时间只占很少部分,感觉当中断频率高的时候会丢失中断响应。

请问主程序里关中断的时间应该占多大比例才合适??

最新回复

晕,回头看了看还是不行. 因为我把AD值做256次累加就超过16位了,怎么对32位的数做移位啊?????  详情 回复 发表于 2006-5-11 09:28
 
点赞 关注

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不明白你的意思?
你所谓的“关中断”是在主程序中关闭总中断,到一定时候再开启总中断等候中断到来?还是在主程序里大部分的时间中客观上没有中断发生?
如果是前者,我感觉没有这种必要,就让总中断一直开着,只要有中断发生,MCU自然就会响应中断(当然各中断初始化必须是正确的)。即便多中断源同时发生,只要处理得当,也不会发生丢失中断的情况。
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你可以再每个中断开始时关中断,每个中断结束时开中断啊
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用:

我的主程序里大部分的时间都是关中断的,开中断的时间只占很少部分,感觉当中断频率高的时候会丢失中断响应。

请问主程序里关中断的时间应该占多大比例才合适??
这种作法很难保证不丢“中断”。
象cdzjh说的那样,不要关总中断,这样才能保证不会丢失“中断”。只要处理适当,也可以保证“中断”响应的及时性。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用:

你可以再每个中断开始时关中断,每个中断结束时开中断啊
进入中断程序的时候中断不是本来就关拉吗??
不用这样麻烦拉吧
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

6
 
  是这样的,我的中断有TIMER-A的脉冲捕获中断和ADC12的采样中断,在中断程序中调用了除法子程序,而主程序里也调用了同样的除法子程序,如果在主程序调用除法子程序的时候中断来了,等中断返回的时候主程序里的运算结果就会出错,所以我把主程序里调用除法子程序的部分关了中断,这样只有当主程序里除法子程序调用结束结果存入RAM后才开中断.
  问题随之而来,我的主程序里除了调用除法子程序外其他部分的运算量很小,也就是大部分时间都在做除法运算,大部分时间都关了中断.当输入脉冲频率低于1K时程序运行良好,而频率高于1K时就开始出问题,频率越高越严重,我打断点看了下,问题出在TIMER-A丢失了脉冲,所以估计是中断没响应的问题.
所以我想问一下这种情况下是否会丢中断,主程序里关中断的时间在整个主程序运行时间里的比例多大才合理.

  另外我是用汇编的.
  
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用:

你可以再每个中断开始时关中断,每个中断结束时开中断啊
只要进入一个中断程序,除非在中断程序里关中断,不然程序会等到这个中断返回后才
响应其他中断,即使其他中断的优先级比当前优先级高,所以不存在这个问题.
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
不解,为什么要在TA中断服务处理程序里做除法运算呢?
一定要这么办的话,就用两套变量。
也可以用局部变量:
1、主程序里调用除法子程序时用一套变量,比如Rxx。
2、进入TA中断服务处理程序时,先将主程序里的除法变量压栈,TA中断服务处理程序里调用除法子程序时还用Rxx。
3、TA中断服务处理程序退出之前,进行对应的出栈操作
不过,最好不要在TA中断服务处理程序里进行除法运算,太费时间了吧?有可能不能及时响应ADC12的中断请求。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
谢谢大家提醒
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用:

不解,为什么要在TA中断服务处理程序里做除法运算呢?
一定要这么办的话,就用两套变量。
也可以用局部变量:
1、主程序里调用除法子程序时用一套变量,比如Rxx。
2、进入TA中断服务处理程序时,先将主程序里的除法变量压栈,TA中断服务处理程序里调用除法子程序时还用Rxx。
3、TA中断服务处理程序退出之前,进行对应的出栈操作
不过,最好不要在TA中断服务处理程序里进行除法运算,太费时间了吧?有可能不能及时响应ADC12的中断请求。
我的TA设为上升沿捕获,然后计算连续两个上升沿之间的差得到脉宽,再用主频除以脉宽得到频率值,也就是每两次TA中断做一次除法,计算出频率值后把频率值存入RAM再中断返回.
  实在不行就只能用两套变量,不过我现在弄清楚这里面的问题.
  谢谢你说的局部变量压栈的方法,我会试试.
  我的TA中断频率最高只有2K,而AD中断频率是22K,但反而AD中断一点不出问题.  我AD中断是做250次平均值的,也就是每250次AD中断在AD中断程序里会做一次除法.
 
  另外,刚刚看了老大你关于使用硬件乘法器做除法的帖子,很感兴趣.因为我的主程序里要做不少除法,真是很头痛除法运算啊.
  我是用汇编的,用C就可以使用硬件乘法器做除法提高速度吗?

  
  我用的除法子程序就是魏小龙老师书上提供的32位除16位无符号数的汇编除法子程序,应该也是TI提供的标准子程序吧,我现在想搞清楚这个子程序的效率到底如何,做一次运算到底需要运行多少条指令,需要多少时间.所以现在正在努力看这个子程序,请问mmtcyq老大是否了解这个子程序的运算速度.
  另外有人说这个程序做除法时,如果分母是2的次方,比如2 4 8 16 32的时候速度比较快,是不是这样啊.
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
我原来用的是BCD的除法,就是用减法实现的除法。这个办法还是比较费时,程序也比较长。

魏小龙的书我没有看过,所以不清楚他是怎么实现除法的。可以的话,请提供该除法的流程或则程序,一起研究一下它的效率问题。

现在,我的新项目是要对ADC的值进行标定,想用乘法器,也是用的汇编。本来想用除法,但因为还没有找到比较理想的办法,就临时改成了作乘法(乘以放大倍数,但是没有使用硬件乘法器),问题暂时得到了解决。

关于你对250次累加和采取除法运算计算平均值这个问题,我建议你改为对256次累加和取平均值。如果这样处理,就不用作除法,只须将累加和右移8为即可(就是丢弃结果的最低字节),比之作除法,岂不简单得多!
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

12
 
呵呵,这个建议不错。谢谢mmtcyq老大了。

其实我真是傻,我在做PWM波输出时,对占空比的计算就是把周期T右移一位,这样就是得到T/2,占空比为1:1了。

我真是糊涂的厉害。。。。。。。。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

13
 
类似的事,在谁的身上都有可能发生。所以,大家互相交流是很有必要的。
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

14
 
晕,回头看了看还是不行.
因为我把AD值做256次累加就超过16位了,怎么对32位的数做移位啊?????
 
 
 

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

随便看看
查找数据手册?

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-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表