先前烧写程序都是到flash,程序较大
之前一直好好的正常工作,忽然一次烧写后看到电脑上adc口读取的采样值发生明显偏差。正常为0的输出电压,检测到3000+,直接电路的过压保护灯亮了,epwm关闭;再看其他的adc口采样电压值也发生了较大的偏差,正常为2048的输入电压(3.3V的一般电压)直接升到了4095。如下图所示:、

请问是否有小伙伴遇到过类似问题?先前程序运行都是正常的。下面附上adc部分程序:
#include "F28x_Project.h"
#define TriggerEpwm 7
void ADCsetup(void);
void ADCInit(void);
void ADCSOCInit(void);
void ADCsetup(void){
ADCInit();
ADCSOCInit();
}
void ADCSOCInit(void){
// Select the channels to convert and the end of conversion flag
// A1 used for HVBUS sample--ADCA-SOC1
// B4 used for AC sample--ADCB-SOC1
// Sample Current first and then voltage sample
EALLOW;
//Configure HVBUS sample SOC: ADCA1-SOC1
AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1;
AdcaRegs.ADCSOC1CTL.bit.ACQPS = 29;
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = TriggerEpwm;
//Configure AC sample SOC1 ADCB-SOC1
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 4;
AdcbRegs.ADCSOC0CTL.bit.ACQPS = 49;
AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = TriggerEpwm;
AdcbRegs.ADCSOC1CTL.bit.CHSEL = 4;
AdcbRegs.ADCSOC1CTL.bit.ACQPS = 29;
AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = TriggerEpwm;
AdcbRegs.ADCSOC2CTL.bit.CHSEL = 4;
AdcbRegs.ADCSOC2CTL.bit.ACQPS = 29;
AdcbRegs.ADCSOC2CTL.bit.TRIGSEL = TriggerEpwm;
AdcbRegs.ADCSOC3CTL.bit.CHSEL = 4;
AdcbRegs.ADCSOC3CTL.bit.ACQPS = 29;
AdcbRegs.ADCSOC3CTL.bit.TRIGSEL = TriggerEpwm;
//Configure ADC INT1 trig after HVBUS Sample
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 1;
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 4;//trig on IA sample (ADCa SOC2) 1h EOC1 is trigger for ADCINT4
AdcaRegs.ADCSOC2CTL.bit.ACQPS = 9; // Sample window is 10 SYSCLK cycles
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = TriggerEpwm; // Trigger on ePWM2 SOCA
AdcaRegs.ADCSOC3CTL.bit.CHSEL = 2;//trig on IB sample (ADCa SOC3) 1h EOC0 is trigger for ADCINT2
AdcaRegs.ADCSOC3CTL.bit.ACQPS = 9; // Sample window is 10 SYSCLK cycles
AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = TriggerEpwm; // Trigger on ePWM2 SOCA
AdcaRegs.ADCSOC4CTL.bit.CHSEL = 10;//trig on IC sample (ADCa SOC4) 1h EOC1 is trigger for ADCINT10
AdcaRegs.ADCSOC4CTL.bit.ACQPS = 9; // Sample window is 10 SYSCLK cycles
AdcaRegs.ADCSOC4CTL.bit.TRIGSEL = TriggerEpwm; // Trigger on ePWM2 SOCA
EDIS;
}
void ADCInit(void){
SetVREF(ADC_ADCA, ADC_INTERNAL, ADC_VREF3P3);
SetVREF(ADC_ADCB, ADC_INTERNAL, ADC_VREF3P3);
//SetVREF(ADC_ADCC, ADC_INTERNAL, ADC_VREF3P3);
EALLOW;
// Set ADCCLK divider same to CPUCLK
AdcaRegs.ADCCTL2.bit.PRESCALE = 2;//50MHz
AdcbRegs.ADCCTL2.bit.PRESCALE = 2;
//AdccRegs.ADCCTL2.bit.PRESCALE = 2;
//Set pulse positions to late
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
// Power up the ADC and then delay for 1 ms
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
EDIS;
DELAY_US(200000);
}
void ReadSam(void){ //Read Sample Value and Filter
ivin[ivosam] = AdcbResultRegs.ADCRESULT1;
ivo[ivosam] = AdcaResultRegs.ADCRESULT1;//+vref;
Vinsam.ins = (ivin[0]+ivin[1]+ivin[2]+ivin[3]+ivin[4]+ivin[5]+ivin[6]+ivin[7])>>3;
Vosam.ins = (ivo[0]+ivo[1]+ivo[2]+ivo[3]+ivo[4]+ivo[5]+ivo[6]+ivo[7])>>3;
ivosam++;
if(ivosam >= 8){
ivosam = 0;
}
Vinreal = (int)Vinsam.ins - Vin_ref;
Vinabs = abs(Vinreal);
}


