5948|15

324

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

中断太快导致无法处理其他函数怎么办 [复制链接]

 
先看下面一段简易代码:
.......//子函数省略
void main
{
    init();//各种初始化
    while(1)
    {
           key_scan();//按键处理程序
    }
}

//中断处理程序
void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12ISR (void)
{

  switch(__even_in_range(ADC12IV,34))
  {
  case  0: break;                           // Vector  0:  No interrupt
  case  2: break;                           // Vector  2:  ADC overflow
  case  4: break;                           // Vector  4:  ADC timing overflow
  case  6:                                  // Vector  6:  ADC12IFG0
    AD_dataA = ADC12MEM0;
    AD_data_deal();//ad数据处理函数

    break;

  case  8: break;                           // Vector  8:  ADC12IFG1
  case 10: break;                           // Vector 10:  ADC12IFG2
  case 12: break;                           // Vector 12:  ADC12IFG3
  case 14: break;                           // Vector 14:  ADC12IFG4
  case 16: break;                           // Vector 16:  ADC12IFG5
  case 18: break;                           // Vector 18:  ADC12IFG6

  default: break;
  }

}

       现在遇到的问题是,AD进入中断的频率太快了,以至于无法响应while(1)里面的按键处理程序,但是要是把AD的进入中断速率降低,采样速率又不能满足要求,,,请问该怎么办?



最新回复

学习中。。。。  详情 回复 发表于 2014-11-25 17:53
 
点赞 关注
个人签名

欢迎关注:JL单片机


回复
举报

6040

帖子

203

TA的资源

版主

推荐
 
再说有可能是你的数据处理时间太长了,一般不建议在中断里面进行数据处理。
 
 

回复

67

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
那么就在每数次进中断的时候  key_scan();一次呗。。

点评

这样的话,,,,,,,,要是处理按键程序,那么AD中断的处理时间会变长,AD中的函数可能没执行完下一次中断又来了  详情 回复 发表于 2014-11-19 11:33
 
 
 

回复

6040

帖子

203

TA的资源

版主

板凳
 
只能是用DMA来实现了。
 
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

5
 
提高处理器频率不就是了~明显是处理不过来!

点评

,,,,,,,现在设置的主频是20M,,,,,,,  详情 回复 发表于 2014-11-19 11:34
 
个人签名construction complete!
 
 

回复

324

帖子

0

TA的资源

一粒金砂(高级)

6
 
gkcn 发表于 2014-11-19 11:19
那么就在每数次进中断的时候  key_scan();一次呗。。

这样的话,,,,,,,,要是处理按键程序,那么AD中断的处理时间会变长,AD中的函数可能没执行完下一次中断又来了
 
个人签名

欢迎关注:JL单片机

 
 

回复

324

帖子

0

TA的资源

一粒金砂(高级)

7
 
zqjqq88 发表于 2014-11-19 11:32
提高处理器频率不就是了~明显是处理不过来!

,,,,,,,现在设置的主频是20M,,,,,,,

点评

如果你的采样率是1K,那么间隔是1ms,这间隔可以做很多事的~  详情 回复 发表于 2014-11-19 12:11
 
个人签名

欢迎关注:JL单片机

 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

8
 
hjl240 发表于 2014-11-19 11:34
,,,,,,,现在设置的主频是20M,,,,,,,

如果你的采样率是1K,那么间隔是1ms,这间隔可以做很多事的~
 
个人签名construction complete!
 
 

回复

24

帖子

0

TA的资源

一粒金砂(初级)

9
 
中断处理的事以少为好
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
1.数据处理放外面;
2.优化数据处理函数;
3.增加主频;
 
 
 

回复

3416

帖子

0

TA的资源

纯净的硅(高级)

11
 
中断服务还是尽可能短小精悍吧
最好设置个标识就退出,由主函数去根据标志位处理
 
个人签名

So TM what......?

 

 

回复

1万

帖子

139

TA的资源

版主

12
 
中断进入太频繁不是问题,问题在于中断服务的处理时间,中断服务宜尽量简单,后续处理可放在主循环里通过调用相关函数/子程序来解决。
 
个人签名上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
 
 

回复

862

帖子

2

TA的资源

纯净的硅(初级)

13
 
你测什么量?要这么高频率?你可以多次采样数据集中起来,滤波后处理一次,没必要每次都处理啊~~
 
 
 

回复

3471

帖子

13

TA的资源

五彩晶圆(高级)

14
 
可以用DMA的方式。先 把AD_data_deal();//ad数据处理函数 放到中断函数外边。ADC考虑适当减小读取的频率,在中断里去降低处理的频率。   
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

15
 
说一下你的具体应用吧,采样频率有多快。
同上,数据 处理部分不要放到中断里面
 
 
 

回复

87

帖子

1

TA的资源

一粒金砂(中级)

16
 
学习中。。。。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表