This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
hello,在调试28377S时如下问题:
ADC中断,运行一段时间后无法进入。卡死时间是随机的,30分钟~几个小时都出现过。
pwm1a触发adc的SOC,EOC0触发adc int1。
在adc int1卡死的状态下,timer0,xint,sci等中断都是能够正常进入的。
在卡死状态下,在线debug发现:
1、对应的PIEIFR未置为1,PIEIER正常
2、ADCINTFLG中的ADCINT1为1,ADCINTOVF中的ADCINT1为1
3、ADCINTSEL1N2中的INT1E为1,INT1CONT为0
4、ADCCOUNTER一直有累加
请教下,在这种情况下,解决思路是?大概可能的原因是?
Green Deng 说:你好,有可能存在溢出情况。首先,我们要检查程序中是否执行了以下语句,确保没有中断溢出:
1.)如果使用了ADCISR,请确保在PIE中确认了该中断,以便将来可能发生中断。
2.)确保在检测到ADCINTFLG时也将其清除
另外,如果在相对较长的时间后发生卡死,可以尝试稍微增加S/H时间。 当转换/中断发生时,可以延长等待时间。 ADC时序设置可能处于某个状态,在该状态下会发生溢出。 稍微增加时序(如修改SH)可能足以使ADC脱离溢出条件。
感谢您回复!
关于1&2,我在中断函数结尾处有以下代码,是否是您所述的内容:
Green Deng 说:另外,如果在相对较长的时间后发生卡死,可以尝试稍微增加S/H时间。 当转换/中断发生时,可以延长等待时间。 ADC时序设置可能处于某个状态,在该状态下会发生溢出。 稍微增加时序(如修改SH)可能足以使ADC脱离溢出条件。
这个您是指AdcaRegs.ADCSOC0CTL.bit.ACQPS寄存器的值吗?我现在设定值是19,需要提高到多少?
另外:目前我尝试将ADC的中断触发模式AdcaRegs.ADCINTSEL1N2.bit.INT1CONT修改为连续模式(值修改为1),看上去好像解决了该问题,这个方式是否合理?
Green Deng 说:你提供的代码段中的语句都是正确的。说明标志被清除,中断被确认。
将INT1CONT位设置为1基本上会忽略中断/溢出标志是否被清除,因此在这种情况下它会起作用。不过溢出的原因以及对应用程序的影响还不清楚。
也可以尝试将ADCPS增加几个steps,比如增加1或2,查看是否足以防止溢出。
我的ADC中断一直设定的中断频率是20KHz,ADC中断执行耗时约5us。经测试,ADC中断卡死是在两种情况下出现的:
1、连续、大量的USB中断(USB传输大量数据)
2、连续、周期性的SCI中断(固定周期的串口通讯)
二者有共同点,看上去都是由其他中断导致ADC中断卡死。
并且根据您的提示,增大ADCPS值,并没有明细效果,问题还是复现,ADCPS值由原来的19增加到30、60、120,都复现了卡死的问题。
期待您的回复!