工具/软件: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图:


