问题背景
- 客户反馈,使用APM32F072RBT7调试ADC的断续模式,仿真全速运行时EOC Flag会“自行清0”,导致软件执行逻辑有问题。
- 仿真里打断点执行,EOC没再异常清0。
- 细测,无论是否DISCEN是否使能,异常表现依然存在。
- 检查过客户代码,ADC没开中断,除客户采样取结果的软件操作,没有其他地方再出现过读出ADC->DATA寄存器,或者对EOC bit写1清0的操作。
解决方案
- 因为用户在仿真的同时,开启了Keil MDK的观察ADC寄存器值功能——等效IDE也在变相地不断读取ADC->DATA寄存器,使得EOC Flag会被“无缘无故”异常清0。
- 只要把ADC寄存器的仿真观测关掉后,全速运行就正常。客户编写的断续模式逻辑没问题。
|