主题中讨论的其他部件:controlSUITE,
当我在2.8377万D上配置ADC模块时,我希望将A端口配置为16位模式,将B端口配置为12位模式,它能实现吗?
如上所述,我可以从端口结果读取数据...但无法从B端口读取。在这种情况下,AdcbRegs.RESULT0.-15都是零。但为什么?
配置代码如下所示:
void InitADC(void)(无效)
{
无符号int I;
EALLOW;
//part1:将ADCCLK除法器设置为/4
AdcaRegs.ADCCTL2.bit.prcale =6;
AdcbRegs.ADCCTL2.bit.prcale =6;
ADccRegs.ADCCTL2.bit.prcale =6;
AdcdRegs.ADCCTL2.bit.prescale =6;
//part2:16位差动ADC模式。
AdcSetMode (ADC_ADCA,ADC_Resolution _16BIT,ADC_SIGNALMODE_DIFFERENTIAL);
AdcSetMode (ADC_ADCC,ADC_Resolution _16BIT,ADC_SIGNALMODE_DIFFERENTIAL);
AdcSetMode (ADC_ADCB,ADC_Resolution _12位,ADC_SIGNALMODE_SINGLE);
AdcSetMode (ADC_ADCD,ADC_Resolution _12位,ADC_SIGNALMODE_SINGLE);
//part3:转换ADC后,将有关INTFlag的脉冲位置设置为晚期。
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
ADccRegs.ADCCTL1.bit.INTPULSEPOS = 1;
AdcdRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//part4:打开ADC的电源
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
ADcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
ADccRegs.ADCCTL1.bit.ADCPWDNZ = 1;
AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//part5:延迟时间> 1毫秒,以使ADC有时间开机
对于(i = 0;i < 1000;i++){ASM (" RPT#255 || NOP");}
//part6:为A/B/C/D端口配置SOCx。
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0将转换adcina0/A1
AdcaRegs.ADCSOC0CTL.bit.ACQPS = ADCACQPS;//采样和保持时间窗口为100个SYSCLK周期
ADcaRegs.ADCSOC0CTL.bit.TRIGSEL = ADCTRIGSEL;
//A4/5->VoltageUdc
AdcaRegs.ADCSO1CTL.bit.CHSEL = 4;//SOC1将转换adcina2/A3
AdcaRegs.ADCSOC1CTL.bit.ACQPS = ADCACQPS;//采样和保持时间窗口为100个SYSCLK周期
ADcaRegs.ADCSOC1CTL.bit.TRIGSEL = ADCTRIGSEL;
//B:B0/1/2/3->SPD
AdcbRegs.ADCSOC0CTL.bit.CHSEL = 0;//SOC0将转换adcinb0
AdcbRegs.ADCSOC0CTL.bit.ACQPS = ADCACQPS2;//采样和保持时间窗口为100个SYSCLK周期
ADcbRegs.ADCSOC0CTL.bit.TRIGSEL = ADCTRIGSEL;
//C:C2/3->CurrentW
ADccRegs.ADCSOC0CTL.bit.CHSEL = 2;//SOC0将转换adcin14/15
ADccRegs.ADCSOC0CTL.bit.ACQPS = ADCACQPS;//采样和保持时间窗口为100个SYSCLK周期
ADccRegs.ADCSOC0CTL.bit.TRIGSEL = ADCTRIGSEL;
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 1;//SOC1结束时将设置INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用INT1标志
AdcaRegs.ADCINTFLGCLL.bit.ADCINT1 =1;//确保INT1标志已清除
EDIS;