sky_han 发表于 2019-4-10 17:44:47

理论分析:

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

tanic 发表于 2019-4-11 09:35:43

应当用示波器测量
启动ADC转换拉一个IO高,进入ADC中断后再拉低,看脉冲宽度。

发表于 2019-4-11 09:53:44

把其他的中断优先级设置低于ADC中断。ADC采样设置到最小。

edmundlee 发表于 2019-4-11 12:04:28

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

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]
查看完整版本: 怎样缩短中断进入时间