TI中文支持网
TI专业的中文技术问题搜集分享网站

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

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

Green Deng:

你好,我需要一点时间分析一下这个问题,会尽快回复你。

,

Green Deng:

你好,有可能存在溢出情况。首先,我们要检查程序中是否执行了以下语句,确保没有中断溢出:
1.)如果使用了ADCISR,请确保在PIE中确认了该中断,以便将来可能发生中断。
2.)确保在检测到ADCINTFLG时也将其清除
另外,如果在相对较长的时间后发生卡死,可以尝试稍微增加S/H时间。 当转换/中断发生时,可以延长等待时间。 ADC时序设置可能处于某个状态,在该状态下会发生溢出。 稍微增加时序(如修改SH)可能足以使ADC脱离溢出条件。

,

fei xiao1:

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,查看是否足以防止溢出。

,

fei xiao1:

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

,

Green Deng:

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

,

fei xiao1:

感谢您的方案!

,

Green Deng:

客气了

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28377S,pwm1a触发adc的SOC,EOC0触发adc int1,中断在运行一段时间后无法进入
分享到: 更多 (0)