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.

TMS320F28377S,pwm1a触发adc的SOC,EOC0触发adc int1,中断在运行一段时间后无法进入

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一直有累加

请教下,在这种情况下,解决思路是?大概可能的原因是?

  • 你好,我需要一点时间分析一下这个问题,会尽快回复你。
  • 你好,有可能存在溢出情况。首先,我们要检查程序中是否执行了以下语句,确保没有中断溢出:
    1.)如果使用了ADCISR,请确保在PIE中确认了该中断,以便将来可能发生中断。
    2.)确保在检测到ADCINTFLG时也将其清除
    另外,如果在相对较长的时间后发生卡死,可以尝试稍微增加S/H时间。 当转换/中断发生时,可以延长等待时间。 ADC时序设置可能处于某个状态,在该状态下会发生溢出。 稍微增加时序(如修改SH)可能足以使ADC脱离溢出条件。
  • 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),看上去好像解决了该问题,这个方式是否合理?

  • 你提供的代码段中的语句都是正确的。说明标志被清除,中断被确认。
    将INT1CONT位设置为1基本上会忽略中断/溢出标志是否被清除,因此在这种情况下它会起作用。不过溢出的原因以及对应用程序的影响还不清楚。
    也可以尝试将ADCPS增加几个steps,比如增加1或2,查看是否足以防止溢出。
  • 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,都复现了卡死的问题。

    期待您的回复!

  • USB数据传输和SCI通信发生的时间比50us(20kHz ADC中断频率)长,这可能会导致溢出。在USB和SCI ISR内部,是否可以轮询ADC溢出标志,以便在出现溢出标志时将其清除,或者停止此时的ADC转换,直到USB和SCI ISR任务完成为止?
  • 感谢您的方案!