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.

28377D调试ADC遇到问题,个别SOC数值无变化



//ADC_initAdcA - 初始化ADCA配置并启动
void ADC_initAdcABCD(void)
{
    uint16_t i;
    EALLOW;
    //写入配置
    AdcaRegs.ADCCTL2.bit.PRESCALE = 6;//将 ADCCLK 分频器设置为 /4
    AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
    AdcbRegs.ADCCTL2.bit.PRESCALE = 6;//将 ADCCLK 分频器设置为 /4
    AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
    AdccRegs.ADCCTL2.bit.PRESCALE = 6;//将 ADCCLK 分频器设置为 /4
    AdcSetMode(ADC_ADCC, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
    AdcdRegs.ADCCTL2.bit.PRESCALE = 6;//将 ADCCLK 分频器设置为 /4
    AdcSetMode(ADC_ADCD, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
    //将脉冲位置设置为后期
    AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    AdcdRegs.ADCCTL1.bit.INTPULSEPOS = 1;
    //打开 ADC 的电源
    AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
    AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
    AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
    AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1;
    //延迟 ± 1ms,允许 ADC 时间通电
    for(i = 0; i < 1000; i++)
    {
        asm("   RPT#255 || NOP");
    }
    //选择要转换的通道和转换标志结束 ADCA**********************************
    //Iu过采样
    AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0 将转换引脚 A2
    AdcaRegs.ADCSOC0CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcaRegs.ADCSOC1CTL.bit.CHSEL = 2;//SOC1 将转换引脚 A2
    AdcaRegs.ADCSOC1CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;//SOC2 将转换引脚 A2
    AdcaRegs.ADCSOC2CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //VR过采样
    AdcaRegs.ADCSOC3CTL.bit.CHSEL = 4;//SOC3 将转换引脚 A4
    AdcaRegs.ADCSOC3CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcaRegs.ADCSOC4CTL.bit.CHSEL = 4;//SOC4 将转换引脚 A4
    AdcaRegs.ADCSOC4CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC4CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcaRegs.ADCSOC5CTL.bit.CHSEL = 4;//SOC5 将转换引脚 A4
    AdcaRegs.ADCSOC5CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC5CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //VDC1过采样
    AdcaRegs.ADCSOC6CTL.bit.CHSEL = 5;//SOC6 将转换引脚 A5
    AdcaRegs.ADCSOC6CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC6CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcaRegs.ADCSOC7CTL.bit.CHSEL = 5;//SOC7 将转换引脚 A5
    AdcaRegs.ADCSOC7CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC7CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcaRegs.ADCSOC8CTL.bit.CHSEL = 5;//SOC8 将转换引脚 A5
    AdcaRegs.ADCSOC8CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC8CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //OH1采样
    AdcaRegs.ADCSOC9CTL.bit.CHSEL = 3;//SOC9 将转换引脚 A3
    AdcaRegs.ADCSOC9CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC9CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //TEMP SENSOR采样
    AdcaRegs.ADCSOC10CTL.bit.CHSEL = 13;//SOC10 将转换引脚 A13
    AdcaRegs.ADCSOC10CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcaRegs.ADCSOC10CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcaRegs.ADCSOCPRICTL.bit.SOCPRIORITY = 0x00;
    AdcaRegs.ADCINTSEL1N2.bit.INT1E = 0;//清除 INT1 标志
    AdcaRegs.ADCINTSEL1N2.bit.INT1CONT = 0;
    AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0xA;//SOC10 的结束将设置 INT1 标志
    AdcaRegs.ADCINTSOCSEL1.all = 0;
    AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1 标志
    AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保清除 INT1 标志
    //选择要转换的通道和转换标志结束 ADCB************************************
    //VG1采样
    AdcbRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0 将转换引脚 B2
    AdcbRegs.ADCSOC0CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //IGX采样
    AdcbRegs.ADCSOC1CTL.bit.CHSEL = 3;//SOC1 将转换引脚 B3
    AdcbRegs.ADCSOC1CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcbRegs.ADCSOC1CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcbRegs.ADCSOCPRICTL.bit.RRPOINTER = 15;
    //选择要转换的通道和转换标志结束 ADCC************************************
    //Iv过采样
    AdccRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0 将转换引脚 C2
    AdccRegs.ADCSOC0CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdccRegs.ADCSOC0CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdccRegs.ADCSOC1CTL.bit.CHSEL = 2;//SOC1 将转换引脚 C2
    AdccRegs.ADCSOC1CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdccRegs.ADCSOC1CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdccRegs.ADCSOC2CTL.bit.CHSEL = 2;//SOC2 将转换引脚 C2
    AdccRegs.ADCSOC2CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdccRegs.ADCSOC2CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //VS过采样
    AdccRegs.ADCSOC3CTL.bit.CHSEL = 4;//SOC3 将转换引脚 C4
    AdccRegs.ADCSOC3CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdccRegs.ADCSOC3CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdccRegs.ADCSOC4CTL.bit.CHSEL = 4;//SOC4 将转换引脚 C4
    AdccRegs.ADCSOC4CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdccRegs.ADCSOC4CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdccRegs.ADCSOC5CTL.bit.CHSEL = 4;//SOC5 将转换引脚 C4
    AdccRegs.ADCSOC5CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdccRegs.ADCSOC5CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //OH2采样
    AdccRegs.ADCSOC6CTL.bit.CHSEL = 3;//SOC6 将转换引脚 C3
    AdccRegs.ADCSOC6CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdccRegs.ADCSOC6CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdccRegs.ADCSOCPRICTL.bit.RRPOINTER = 15;
    //选择要转换的通道和转换标志结束 ADCD************************************
    //Iw过采样
    AdcdRegs.ADCSOC0CTL.bit.CHSEL = 0;//SOC0 将转换引脚 D0
    AdcdRegs.ADCSOC0CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC0CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcdRegs.ADCSOC1CTL.bit.CHSEL = 0;//SOC1 将转换引脚 D0
    AdcdRegs.ADCSOC1CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC1CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcdRegs.ADCSOC2CTL.bit.CHSEL = 0;//SOC2 将转换引脚 D0
    AdcdRegs.ADCSOC2CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC2CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //VT过采样
    AdcdRegs.ADCSOC3CTL.bit.CHSEL = 4;//SOC3 将转换引脚 D4
    AdcdRegs.ADCSOC3CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC3CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcdRegs.ADCSOC4CTL.bit.CHSEL = 4;//SOC4 将转换引脚 D4
    AdcdRegs.ADCSOC4CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC4CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcdRegs.ADCSOC5CTL.bit.CHSEL = 4;//SOC5 将转换引脚 D4
    AdcdRegs.ADCSOC5CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC5CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    //VDC2过采样
    AdcdRegs.ADCSOC6CTL.bit.CHSEL = 1;//SOC6 将转换引脚 D1
    AdcdRegs.ADCSOC6CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC6CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcdRegs.ADCSOC7CTL.bit.CHSEL = 1;//SOC7 将转换引脚 D1
    AdcdRegs.ADCSOC7CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC7CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcdRegs.ADCSOC8CTL.bit.CHSEL = 1;//SOC8 将转换引脚 D1
    AdcdRegs.ADCSOC8CTL.bit.ACQPS = 29;//示例窗口为 30 SYSCLK 周期
    AdcdRegs.ADCSOC8CTL.bit.TRIGSEL = 1;//CPU1 Timer0 SOCA/C 上的触发器
    AdcdRegs.ADCSOCPRICTL.bit.RRPOINTER = 15;
    EDIS;
}
上边是我对ADC的配置程序,CPU1 Timer0设置成1s触发一次,通过Registers观测结果寄存器,发现一部分寄存器结果一直没变化。
例如AdcaResultRegs.ADCRESULT0由ADCa的SOC0转化,如上程序ADCa的SOC0,SOC1,SOC2转化的同一端口数据,ADCRESULT1和ADCRESULT2数值均有变化但ADCRESULT0无变化,同样情况不唯一,不知问题出在哪里?请求解答,万分感谢