你的MCU正在执行其他程序,此时中断发生,MCU需要判断此中断以及优先级,然后保护现场进行压栈,然后取中断服务程序地址,还有hclk速率不要分频这会影响存储速度,同样增加时间,你想想从哪里能够省下时间? 应当用示波器测量
启动ADC转换拉一个IO高,进入ADC中断后再拉低,看脉冲宽度。 把其他的中断优先级设置低于ADC中断。ADC采样设置到最小。 先改一段测试代码, 不要让它中断, 就在主函数轮询ADC的EOS, 便可确认转换时间是否如楼主所原先所设计的
先确认了是哪儿的问题才想解决方案吧, 除非你有N个中断在ADC中断前发生了, 否则中断的响应时间是不可能是几个us的
所以我觉得是转换时间的问题 本帖最后由 michael_nuaa 于 2019-4-12 11:14 编辑
to @edmundlee
软件中循环输出GPIO,用逻辑分析仪测试发现大概需要2.45us,和理论计算2.17us有一点差距。
使用中断方式发现从触发到进入中断需要3.48us 问题算是找到了
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);
} michael_nuaa 发表于 2019-4-12 11:12
to @edmundlee
软件中循环输出GPIO,用逻辑分析仪测试发现大概需要2.45us,和理论计算2.17us有一点差距。
不清楚你的测试点在哪儿, 所以不能确定这时间是否合理 michael_nuaa 发表于 2019-4-12 12:06
问题算是找到了
if (ADC_GetITStatus(ADC1, ADC_IT_EOC) == SET) 占用了较长时间,后面估计要改成汇编了
用奇存器可以了 再次谢谢各位 想要提高整体响应时间,提升MCU主频是一个方法。
指令数是恒定的,要快就加快主频,缩短指令执行时间。
你可以试试主频配置到最高,甚至可以尝试超频;看是否能达到你的需求。
如果最高频率达不到要求,而超频可以,那你可能要换更快的CM4系列:)
页:
1
[2]