主题中讨论的其他器件: TMS320F28062
1、最近平台切换出现了几个问题(从 TMS320F28062切换到 TMS320F280049)
关于中断嵌套:启用、例如:代码有两个中断:Timer0和 ADCA2、现在运行时、我需要在进入 ADCIR 后关闭 TIMER0、以防止 TIMER0中断 ADCIR 中程序的执行。 该代码涉及以下方面:
中断空 ADC_OVER ISR ()
{
AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
PieCtrlRegs.PIEIER1.bit.INTx7=0;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_group10;
EINT;
… 代码……
PieCtrlRegs.PIEIER1.bit.INTx7=1;
}
现在根据上述代码执行、程序将进入一个非法中断(不会发生 TMS320F28062)。
如果您更改为启用 Timer0和 ADCA1 (PIE1组中断)、然后通过上述逻辑操作、程序将不会进入非法中断、代码可以正常运行。 造成这种情况的原因是什么?
2、当使用使能 Timer0和 ADCA1中断来执行代码时、发现一些变量在中断嵌套过程中进入 ADC 中断服务子例程后发生了变化、 这些变量的更改应该由 TIMER0中断执行、因此怀疑在进入 ADC 中断服务子例程后 TIMER0没有完全关闭、并且它将偶尔进入。
例如:中断 void ADC_over_ISR ()
中断空 ADC_OVER ISR ()
{
AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
PieCtrlRegs.PIEIER1.bit.INTx7=0;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT2 = 1;
PieCtrlRegs.PIEACX.ALL = PIEACK_group10;
EINT;
if (gStepAlgo >ESA_PwmOff)
{
… 代码……
}否则{
… 代码……
}
gStepAlgo_pre = gStepAlgo;
PieCtrlRegs.PIEIER1.bit.INTx7=1;
}
在上述代码中可以发现、在顺序执行 else 段代码之后、gStepAlgo 大于 ESA_PwmOff (gStepAlgo 更改应在 TIMER0中执行)。 理论上、gStepAlgo 应首先在 TIMER0中断中更改、然后进入 ADC 中断以执行 IF 段代码。 我在这里无法理解。 我需要您的支持。
3、关于 X 缓冲区的软件配置、由于此处的平台差异很大、有一些细节需要支持。