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.

TMS320F280049: 请问ADC多通道循环同步采样该如何配置?

Part Number: TMS320F280049

请问ADC多通道循环采样该如何配置?当三个ADC module选择定时器触发所有通道(触发周期5us),并且开启ADCA的中断时,所有SOC通道的转换结果都相同。以下是我的ADC SOC通道配置,麻烦看一下配置上是否有不对的,或者是不是方式不对。谢谢。 目标是实现 ADC A \ B \ C的各个通道循环同步采样(每个循环开始时同步)。

#define USER_ACQPS_     40

void InitADCSOC(void)
{
    //config SOCs, set the triggler source for SOCs. ACQPS = 40(0.5US)    ConvTime: 10*0.025=0.25us 
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN4, USER_ACQPS_);   
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN9, USER_ACQPS_);  
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN6, USER_ACQPS_); 
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER3, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN2, USER_ACQPS_);  
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER4, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN3, USER_ACQPS_);

    ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN0, USER_ACQPS_);   
    ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN4, USER_ACQPS_);  
    ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN2, USER_ACQPS_);  
    ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER3, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN3, USER_ACQPS_);

    ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN1, USER_ACQPS_);
    ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN14, USER_ACQPS_); 
    ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN4, USER_ACQPS_); 

    Interrupt_register(INT_ADCA1, &ADCAInt1ISR);

    Interrupt_enable(INT_ADCA1);

    ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER4);
    ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER1);
    ADC_disableInterrupt(ADCA_BASE, ADC_INT_NUMBER2);
    ADC_disableInterrupt(ADCA_BASE, ADC_INT_NUMBER3);
    ADC_disableInterrupt(ADCA_BASE, ADC_INT_NUMBER4);
    ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);

}

__interrupt void ADCAInt1ISR(void)
{
//    Interrupt_disable(INT_ADCA1);// Disable this interrupt from happening again
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);// Acknowledge interrupt

    ADValue[0] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
    ADValue[1] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);
    ADValue[2] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER2);
    ADValue[3] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER3);
    ADValue[4] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER4);

    ADValue[5] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER0);
    ADValue[6] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER1);
    ADValue[7] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER2);
    ADValue[8] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER3);

    ADValue[9] = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0);
    ADValue[10] = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER1);
    ADValue[11] = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER2);

    // Check if overflow has occurred
    if(true == ADC_getInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1))
    {
        ADC_clearInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1);
        ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
    }
}

以下是ADC转换结果截图: