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.
工具/软件:Code Composer Studio
我使用 DMA 并从 DMA 中断获取 ADC 结果。 主要功能如下所示。
void main (void) { InitSysCtrl(); init_gpio(); Dint; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; PieVectTable.DMA_CH1_INT=&DMA_CH1_ISR; PieVectTable.DMA_CH2_INT=&DMA_CH2_ISR; EDIS; EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=0; EDIS; init_EPWM10(); init_EPWM11(); EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1; EDIS; init_adca(); init_adcb (); init_dma(); EALLOW; CpuSysRegs.SECMSEL.bit.PF2SEL = 1; EDIS; init_pid(); IER |= M_INT1; IER |= M_INT7; PieCtrlRegs.PIEIER7.bit.INTx1 = 1; PieCtrlRegs.PIEIER7.bit.INTx2 = 1; EINT; ERTM; StartDMACH1(); StartDMACH2(); while (1) { } }
_interrupt void DMA_CH2_ISR (void)
{
uint16 i;
uint32温度;
温度= 0;
for (i=0;i<8;i++)
{
temp += dma_ch2_Buffer[i];
}
ADC_IPV =温度>> 3;
温度= 0;
for (i=0;i<8;i++)
{
temp += dma_ch2_Buffer[i+8];
}
ADC_Ibat =温度>> 3;
温度= 0;
for (i=0;i<8;i++)
{
temp += dma_ch2_Buffer[i+16];
}
adc_vmid = temp >> 3;
CHARGE_CC_Loop ();
PieCtrlRegs.PIEACX.ALL = PIEACK_group7;
}
void charge CC_Loop (void) { PID_CHARGE_CC.Error =(Int32)(ADC_Ibat)- PID_CHARGE_CC.Target; test1 = PID_CHARGE_CC.Error - PID_CHARGE_CC.Error_Old; PID_CHARGE_CC.Error_Old = PID_CHARGE_CC.Error; }
可变 PID_CHARGE_CC.Error、PID_CHARGE_CC.Error_Old 和测试1均为 Int32类型。 当我调试时、PID_CHARGE_CC.Error 和 PID_CHARGE_CC.Error_Old 的图形是正常的。 但变量 test1很奇怪、
如下所示。
test1图:
您好'9259、
什么是 Test1? 您期望它是什么? 您是否在其他任何情况下获得预期结果?
您好!
test1是一个用于显示奇怪值的变量。 由于 Test1 = PID_CHARGE_CC.Error-PID_CHARGE_CC.Error_Old、并且图形显示 PID_CHARGE_CC.Error 和 PID_CHARGE_CC.Error_Old 是稳定的(-300 ~-240)、因此 test1应该更加稳定。 但是、Test1的某些值大约为65536或-65536。
如果 将 Test1、 PID_CHARGE_CC.Error 和 PID_CHARGE_CC.Error_Old 更改为 Int16或浮点类型、我可以获得预期结果。