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.

TMS320F28335: ADC采样可以进入ADC中断,但是采样结果寄存器AdcRegs.ADCRESULT0----AdcRegs.ADCRESULT7的结果全是0

Part Number: TMS320F28335

您好:

       我尝试在定时器0中断触发ADC采样,但是结果寄存器ADCRESULT全是0;请帮我看一下哪里错了

interrupt void ISRTimer0(void)
{

    PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
    AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;//软件启动方式

}

ADC配置如下:

EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;//开时钟
ADC_cal();
EDIS;

EALLOW;
SysCtrlRegs.HISPCP.all = 3; // HSPCLK = SYSCLKOUT/(2*ADC_MODCLK)
// ADC_cal();
EDIS;

AdcRegs.ADCTRL3.all = 0x00E0;
DELAY_US(10000L);

AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;//ADC工作模式 //1为级联模式
AdcRegs.ADCTRL1.bit.CONT_RUN = 0; //非连续运行(0),连续运行(1)//完成一次转换继续下一次转换//!!!!!!!!!!
AdcRegs.ADCTRL1.bit.CPS= 0;//预分频
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xf;//采样时间


AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x2;//25MHz不分频
AdcRegs.ADCTRL3.bit.SMODE_SEL=0; //顺序采样

AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; //
AdcRegs.ADCTRL1.bit.SUSMOD = 0;
AdcRegs.ADCTRL1.bit.RESET = 1;//复位ADC
AdcRegs.ADCTRL1.bit.RESET = 0;//完成复位

AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x7;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0xB; // 采样ADCA0//12-ad13
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0xA; // 采样ADCA1
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x9; // 采样ADCA2//13-ad14
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x1; // 采样ADCA3//14-ad15
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x4; // 采样ADCA4
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x5; // 采样ADCA5
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x6; // 采样ADCA6
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x7; // 采样ADCA7

PieCtrlRegs.PIEIER1.bit.INTx6 = 1; //开启INT1.6中断
IER |= M_INT1; // 开启第一组中断
EINT;
ERTM;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; //允许SEQ1发送中断申请
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 0; //禁止SEQ2发送中断申请
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2 = 0; //每个SEQ2序列转换完成后发送一次中断申请
}

中断服务函数如下:

while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);

sampleTable[0] = (AdcRegs.ADCRESULT0) >> 4;
sampleTable[1] = (AdcRegs.ADCRESULT1) >> 4;
sampleTable[2] = (AdcRegs.ADCRESULT2) >> 4;
sampleTable[3] = (AdcRegs.ADCRESULT3) >> 4;
sampleTable[4] = (AdcRegs.ADCRESULT4) >> 4;
sampleTable[5] = (AdcRegs.ADCRESULT5) >> 4;
sampleTable[6] = (AdcRegs.ADCRESULT6) >> 4;
sampleTable[7] = (AdcRegs.ADCRESULT7) >> 4;

AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
PieCtrlRegs.PIEACK.all |= PIEACK_GROUP1;
for(i = 0; i < 8; i++)
{
ADCbuf[i] = (float)sampleTable[i] * 3.0 / 4095.0;
}