32g12K128的外部中断INT1会连续进来2次
使用2个ADC,数据就绪分别分别拉高INT0,INT1;INT0正常,INT1会连续进来2次,检查了代码,确定不是代码问题。使用1ms定时器查到的问题,每次进入中断,记录当前定时器时间,应该是每40ms进来1次。
请问有遇到这种情况的吗?该如何解决
针对STC32G12K128外部中断INT1连续触发两次的问题,结合您提供的信息,以下是一些可能的原因及解决方案:
1. 硬件抖动问题
外部中断的触发可能受到硬件抖动的影响,尤其是在ADC数据就绪信号拉高INT1时,信号可能存在短暂的抖动,导致中断被误触发两次。建议采取以下措施:
硬件滤波:在INT1引脚上添加RC滤波电路,以消除信号抖动。
软件消抖:在中断服务程序(ISR)中增加延时或状态判断,确保中断触发是稳定的。
2. 中断优先级与嵌套问题
如果系统中存在多个中断源,且INT1的中断优先级较低,可能会被高优先级中断打断,导致中断服务程序未完全执行完毕时再次被触发。建议:
检查中断优先级:确保INT1的中断优先级设置合理,避免被其他中断打断。
中断标志清除:在ISR中及时清除中断标志,避免因标志未清除而再次触发中断。
3. ADC采样与中断触发时序问题
ADC采样完成后拉高INT1,可能与某些时序问题相关。例如,ADC采样周期与中断触发时间可能存在冲突。建议:
检查ADC配置:确保ADC采样周期与中断触发的时序匹配,避免采样未完成时中断被误触发。
增加采样间隔:适当增加ADC采样间隔,确保每次采样完成后有足够的时间处理中断。
4. 定时器与中断冲突问题
您提到使用1ms定时器记录中断时间,可能是定时器与中断之间存在冲突。建议:
检查定时器配置:确保定时器的时钟源和分频配置正确,避免定时器溢出或误差导致中断时间记录不准确。
同步处理:在ISR中记录定时器时间时,确保定时器值与中断触发的同步性。
5. 代码逻辑问题
尽管您确认代码没有问题,但仍建议仔细检查以下方面:
中断服务程序:确保ISR中没有重复触发中断的逻辑,例如在ISR中误操作了INT1的触发条件。
中断触发模式:检查INT1的触发模式(上升沿、下降沿或电平触发),确保与硬件信号匹配。
6. 芯片BUG或硬件异常
如果以上方法均未能解决问题,可能存在芯片本身的BUG或硬件异常。建议:
查阅芯片手册:检查STC32G12K128的勘误表,确认是否存在已知的INT1问题。
联系技术支持:向STC官方技术支持反馈问题,获取进一步的解决方案。
总结
建议您从硬件滤波、中断优先级、ADC时序、定时器配置等方面逐一排查问题。如果问题仍未解决,可考虑更换芯片或进一步与技术支持沟通。希望以上建议对您有所帮助!
[本文内容由国芯人工智能辅助生成,仅供参考] 着重检查代码中外部中断配置为单方向边沿中断还是双方向边沿中断,亦或者是电平中断。 晓飛飛 发表于 2025-3-24 10:01
着重检查代码中外部中断配置为单方向边沿中断还是双方向边沿中断,亦或者是电平中断。 ...
使用的上/下降沿中断,忽略下降沿中断
示波器测信号看看是否有异常 DebugLab 发表于 2025-3-24 10:14
示波器测信号看看是否有异常
用示波器看了,INT0和INT1的周期一致,但是INT0上升沿有5V,INT1上升沿只有3V不到,测量了两个adc的供电口都是5V。我把INT0和INT1设置的都是高阻输入模式 1,高阻加打开内部上拉
2,是边沿触发,用上升沿;那进去后读到低电平直接退出 神农鼎 发表于 2025-3-24 10:29
1,高阻加打开内部上拉
2,是边沿触发,用上升沿;那进去后读到低电平直接退出 ...
低电平是直接退出,高电平会进来2次,也就是退出后马上进来。
只看到设置高阻,内部上拉如何打开,寄存器配置的 退出中断前清除中断标志 Ayb_ice 发表于 2025-3-24 10:36
退出中断前清除中断标志
外部中断没看到清除外部中断标志寄存器,但是我还是把I/O清了。
页:
[1]
2