你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

怎样缩短中断进入时间

[复制链接]
michael_nuaa 提问时间:2019-4-10 16:42 /
阅读主题, 点击返回1楼
收藏 评论19 发布时间:2019-4-10 16:42
19个回答
sky_han 回答时间:2019-4-10 17:44:47
理论分析:

你的MCU正在执行其他程序,此时中断发生,MCU需要判断此中断以及优先级,然后保护现场进行压栈,然后取中断服务程序地址,还有hclk速率不要分频这会影响存储速度,同样增加时间,你想想从哪里能够省下时间?
捕获M3.JPG

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

tanic 回答时间:2019-4-11 09:35:43
应当用示波器测量
启动ADC转换拉一个IO高  ,进入ADC中断后再拉低,看脉冲宽度。
回答时间:2019-4-11 09:53:44
把其他的中断优先级设置低于ADC中断。ADC采样设置到最小。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

edmundlee 回答时间:2019-4-11 12:04:28
先改一段测试代码, 不要让它中断, 就在主函数轮询ADC的EOS, 便可确认转换时间是否如楼主所原先所设计的
先确认了是哪儿的问题才想解决方案吧, 除非你有N个中断在ADC中断前发生了, 否则中断的响应时间是不可能是几个us的
所以我觉得是转换时间的问题

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

michael_nuaa 回答时间:2019-4-12 11:12:57
本帖最后由 michael_nuaa 于 2019-4-12 11:14 编辑

to @edmundlee
软件中循环输出GPIO,用逻辑分析仪测试发现大概需要2.45us,和理论计算2.17us有一点差距。

使用中断方式发现从触发到进入中断需要3.48us
michael_nuaa 回答时间:2019-4-12 12:06:42
问题算是找到了
if (ADC_GetITStatus(ADC1, ADC_IT_EOC) == SET) 占用了较长时间,后面估计要改成汇编了

谢谢各位

    if (ADC_GetITStatus(ADC1, ADC_IT_EOC) == SET) //if (ADC1->SR & 0x02)
    {  
        GPIO_SetBits(GPIOB, GPIO_Pin_5);
       ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
    }
edmundlee 回答时间:2019-4-12 12:29:59
michael_nuaa 发表于 2019-4-12 11:12
to @edmundlee
软件中循环输出GPIO,用逻辑分析仪测试发现大概需要2.45us,和理论计算2.17us有一点差距。

不清楚你的测试点在哪儿, 所以不能确定这时间是否合理
edmundlee 回答时间:2019-4-12 12:30:56
michael_nuaa 发表于 2019-4-12 12:06
问题算是找到了
if (ADC_GetITStatus(ADC1, ADC_IT_EOC) == SET) 占用了较长时间,后面估计要改成汇编了

用奇存器可以了
michael_nuaa 回答时间:2019-4-19 09:36:03
再次谢谢各位
Dylan疾风闪电 回答时间:2019-4-19 09:58:51
想要提高整体响应时间,提升MCU主频是一个方法。
指令数是恒定的,要快就加快主频,缩短指令执行时间。
你可以试试主频配置到最高,甚至可以尝试超频;看是否能达到你的需求。
如果最高频率达不到要求,而超频可以,那你可能要换更快的CM4系列

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

12

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版