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.

TMS320F28035: ADC中断通道选择

Part Number: TMS320F28035

AdcRegs.INTSEL1N2.bit.INT1SEL = 15; // IntChSel causes ADCInterrupt 1

为什么这里配置成 1 能够触发CLA task,配置成15就不行?

  • void ADC_SOC_CNF(int ChSel[], int Trigsel[], int ACQPS[], int IntChSel, int mode)
    {

    extern void DSP28x_usDelay(Uint32 Count);


    EALLOW;
    AdcRegs.ADCCTL1.bit.ADCREFSEL = 0;
    AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power up band gap
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power up reference
    AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power up rest of ADC
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADC

    DSP28x_usDelay(1000); // Delay before converting ADC channels

    AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;

    AdcRegs.ADCSOC0CTL.bit.ACQPS = ACQPS[0];
    AdcRegs.ADCSOC1CTL.bit.ACQPS = ACQPS[1];
    AdcRegs.ADCSOC2CTL.bit.ACQPS = ACQPS[2];
    AdcRegs.ADCSOC3CTL.bit.ACQPS = ACQPS[3];
    AdcRegs.ADCSOC4CTL.bit.ACQPS = ACQPS[4];
    AdcRegs.ADCSOC5CTL.bit.ACQPS = ACQPS[5];
    AdcRegs.ADCSOC6CTL.bit.ACQPS = ACQPS[6];
    AdcRegs.ADCSOC7CTL.bit.ACQPS = ACQPS[7];
    AdcRegs.ADCSOC8CTL.bit.ACQPS = ACQPS[8];
    AdcRegs.ADCSOC9CTL.bit.ACQPS = ACQPS[9];
    AdcRegs.ADCSOC10CTL.bit.ACQPS = ACQPS[10];
    AdcRegs.ADCSOC11CTL.bit.ACQPS = ACQPS[11];
    AdcRegs.ADCSOC12CTL.bit.ACQPS = ACQPS[12];
    AdcRegs.ADCSOC13CTL.bit.ACQPS = ACQPS[13];
    AdcRegs.ADCSOC14CTL.bit.ACQPS = ACQPS[14];
    AdcRegs.ADCSOC15CTL.bit.ACQPS = ACQPS[15];

    AdcRegs.INTSEL1N2.bit.INT1SEL = IntChSel; // IntChSel causes ADCInterrupt 1

    if (mode == 0) // Start-Stop conv mode
    {
    AdcRegs.ADCINTFLG.bit.ADCINT1 = 0; // clear interrupt flag for ADCINT1
    AdcRegs.INTSEL1N2.bit.INT1CONT = 0; // clear ADCINT1 flag to begin a new set of conversions
    AdcRegs.ADCINTSOCSEL1.all=0x0000; // No ADCInterrupt will trigger SOCx
    AdcRegs.ADCINTSOCSEL2.all=0x0000;
    }
    if (mode == 1) // Continuous conv mode
    {
    AdcRegs.INTSEL1N2.bit.INT1CONT = 1; // set ADCInterrupt 1 to auto clr
    AdcRegs.ADCINTSOCSEL1.all=0xFF;// ADCInterrupt 1 will trigger SOCx, TrigSel is ignored
    AdcRegs.ADCINTSOCSEL2.all=0xFF;
    }

    if (mode == 2) // CLA mode, Start Stop ADC with auto clr ADC Flag
    {
    AdcRegs.ADCINTFLG.bit.ADCINT1 = 0; // clear interrupt flag for ADCINT1
    AdcRegs.INTSEL1N2.bit.INT1CONT = 1; // set ADCInterrupt 1 to auto clr
    AdcRegs.ADCINTSOCSEL1.all=0x0000; // No ADCInterrupt will trigger SOCx
    AdcRegs.ADCINTSOCSEL2.all=0x0000;
    }

    if(IntChSel<15)
    AdcRegs.INTSEL1N2.bit.INT1E = 1; // enable ADC interrupt 1
    else
    AdcRegs.INTSEL1N2.bit.INT1E = 0; // disable the ADC interrupt 1

    还有这里为什么要小于15,才能使能中断?

  • ADCINT1~8可以分别用来触发CLA task 1~8。

    既然EOC选择1可以触发CLA task,说明ADCINT的选择没有问题。

    推测下来EOC的配置可能存在问题。