您好,
我正在尝试初始化ADC1的所有ADC信道以读取cconcto的模拟信号,为了开始转换,我使用PWM SOCA和SOCB。我参考了ADC_SoC示例代码来执行此操作。但在读取ADC1B 8信道时遇到了问题。 任何人都可以提供帮助
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.
您好,
我正在尝试初始化ADC1的所有ADC信道以读取cconcto的模拟信号,为了开始转换,我使用PWM SOCA和SOCB。我参考了ADC_SoC示例代码来执行此操作。但在读取ADC1B 8信道时遇到了问题。 任何人都可以提供帮助
您好,Veena,
下面是代码,此处不写入主要功能,仅写入ADC配置,ADC启用和ADC ISR。 同样在下面的代码中,对于ADC1的15个通道,我配置了相同的PWM触发器SOCA。 运行此示例后,我只能在ADC1A通道中获取数据。从通道8到15,我没有获得任何值。我在 这些模拟输入上应用了从0到3.3 的电压。如果我在初始化时出错,请告诉我。
UINT16转换计数;
UINT16 adc1Voltage_ChannelA0[10];
UINT16 adc1Voltage_ChannelA2[10];
UINT16 adc1Voltage_ChannelA3[10];
UINT16 adc1Voltage_ChannelA4[10];
UINT16 adc1Voltage_ChannelA6[10];
UINT16 adc1Voltage_ChannelA7[10];
UINT16 adc1Voltage_ChannelB0[10];
UINT16 adc1Voltage_ChannelB3[10];
UINT16 adc1Voltage_ChannelB4[10];
UINT16 adc1Voltage_ChannelB7[10];
void adcConfig()函数
{
// GPIO配置
GpioG1CtrlRegs.GPADIR.bit.GPIO0 = 1;//设置为输出
GpioG1CtrlRegs.GPADIR.bit.GPIO8 = 1;//设置为输出
GpioG1CtrlRegs.GPAMUX1.bit.GPIO0 = 1;//将mux设置为EPWM1A
GpioG1CtrlRegs.GPAMUX1.bit.GPIO8 = 3;//将mux设置为ADCSOCAn
//分配给饼图向量表的中断
PieVectorTable.ADCINT1 =&ADC1_ISR;
// ADC1启用
EALLOW;
ADc1Regs.ADCCTL1.bit.ADCBGPWD = 1;//电源ADC1 BG
Adc1Regs.ADCCTL1.bit.ADCREFPWD = 1;//电源参考
ADc1Regs.ADCCTL1.bit.ADCPWDN = 1;//电源ADC1
ADC1Regs.ADCCTL1.bit.ADCENABLE = 1;//启用ADC1
Adc1Regs.ADCCTL1.bit.ADCREFSEL = 0;//选择内部BG
EDIS;
DELAY_US (ADC_USDELAY);
// PIE和CPU中断启用
PieCtrlRegs.PIEIER1.bit.INTx1 = 1; //在PIE中启用INT 1.1
IER |= M_INT1; //启用CPU中断1
//配置ADC
EALLOW;
Adc1Regs.ADCCTL2.bit.ADCNONOVERLAP = 1; //启用非重叠模式,即
Adc1Regs.ADCCTL1.bit.INTPULSEPOS = 1; // ADCINT1在 AdcResults锁定后跳闸
//已启用ADCINT1
Adc1Regs.INTSEL1N2.bit.INT1E = 1;//已启用ADCINT1
Adc1Regs.INTSEL1N2.bit.INT1CONT =0;//禁用ADCINT1连续模式
Adc1Regs.INTSEL1N2.bit.INT1SEL = 15;//设置EOC15以触发ADCINT1
//选择ADC输入通道
Adc1Regs.ADCSOC0CTL.bit.CHSEL = 0;
Adc1Regs.ADCSOC1CTL.bit.CHSEL = 1;
Adc1Regs.ADCSOC2CTL.bit.CHSEL = 2;
Adc1Regs.ADCSOC3CTL.bit.CHSEL = 3;
Adc1Regs.ADCSOC4CTL.bit.CHSEL = 4;
Adc1Regs.ADCSOC5CTL.bit.CHSEL = 5;
Adc1Regs.ADCSOC6CTL.bit.CHSEL = 6;
Adc1Regs.ADCSOC7CTL.bit.CHSEL = 7;
Adc1Regs.ADCSOC8CTL.bit.CHSEL = 8;
Adc1Regs.ADCSOC9CTL.bit.CHSEL = 9;
Adc1Regs.ADCSOC10CTL.bit.CHSEL = 10;
Adc1Regs.ADCSOC11CTL.bit.CHSEL = 11;
Adc1Regs.ADCSOC12CTL.bit.CHSEL = 12;
Adc1Regs.ADCSOC13CTL.bit.CHSEL = 13;
Adc1Regs.ADCSOC14CTL.bit.CHSEL = 14;
Adc1Regs.ADCSOC15CTL.bit.CHSEL = 15;
AnalogSysctrlRegs.TRIG1sel.all = 5; //将EPWM1SOCA分配给ADC模块的ADC触发器1
Adc1Regs.ADCSOC0CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC1CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC2CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC3CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC4CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC5CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC6CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC7CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC8CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC9CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC10CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC11CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC12CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC13CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC14CTL.bit.TRIGSEL = 5;
Adc1Regs.ADCSOC15CTL.bit.TRIGSEL = 5;
//设置7个ADC时钟周期的S/H窗口
adc1Regs.ADCSOC0CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
adc1Regs.ADCSOC1CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC2CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC3CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC4CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC5CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC6CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC7CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC8CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC9CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC10CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC11CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC12CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC13CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC14CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
Adc1Regs.ADCSOC15CTL.bit.ACQPS = 6; // S/H = ACQPS + 1
EDIS;
////假定ePWM1时钟已在InitSysCtrl()中启用;
//为ADC SOC1设置事件触发器(SOCA)
EPwm1Regs.ETSEL.bit.SOCAEN = 1;//在组上启用SOC
EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTRU_CMPA;//在计数增加时从CMPA中选择SOC
EPwm1Regs.etps.bit.SOCAPRD =3;//每三次//事件生成脉冲
//时基寄存器
EPwm1Regs.TBPRD = 1000; //设置定时器周期,PWM频率=1/周期
EPwm1Regs.TBPHS.ALL = 0; //时基相位寄存器
EPwm1Regs.TBCTR = 0; //时基计数器寄存器
EPwm1Regs.TBCTL.bit.PRDLD = TB_immediate; //立即设置负载
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; //计数模式:用于非对称PWM
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
//将阴影寄存器加载设置为零
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//在CTR上加载=零
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;//在CTR上加载=零
//设置比较值
EPwm1Regs.CMPA.Halt.CMPA = 500; //初始设置占空比50 %
EPwm1Regs.CMBB =500; //初始设置占空比50 %
////设置操作
EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; //将PWM2A设置为零
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; //清除事件A上的PWM2A,运行计数
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR; //将PWM2B设置为零
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET; //在事件上清除PWM2B
}
__interrupt void ADC1_ISR(void)
{
adc1Voltage_ChannelA0[ConversionCount]= adc1Result.ADCRESULT0;
adc1Voltage_ChannelA2[ConversionCount]= Adc1Result.ADCRESULT2;
adc1Voltage_ChannelA3[ConversionCount]= adc1Result.ADCRESULT3;
adc1Voltage_ChannelA4[ConversionCount]= adc1Result.ADCRESULT4;
adc1Voltage_ChannelA6[ConversionCount]= adc1Result.ADCRESULT6;
adc1Voltage_ChannelA7[ConversionCount]= adc1Result.ADCRESULT7;
adc1Voltage_ChannelB0[ConversionCount]= adc1Result.ADCRESULT8;
adc1Voltage_ChannelB3[ConversionCount]= adc1Result.ADCRESULT11;
adc1Voltage_ChannelB4[ConversionCount]= adc1Result.ADCRESULT12;
adc1Voltage_ChannelB7[ConversionCount]= adc1Result.ADCRESULT15;
IF (ConversionCount == 9)
{
ConversionCount = 0;
}
Else ConversionCount++;
adc1Regs.ADCINTFLGCLL.bit.ADCINT1 = 1;//清除ADCINT1标志重新初始化
//用于下一个SOC
PIECtrlRegs.PIEACK/ALL = PIEACK_Group1;//确认中断到PIE
返回;
}
Sandeep,
啊,好的! 您使用 的是180到100针DIMM适配器吗? 较新的180引脚版本的controlCARD坞站已修订此标签。
我们无法更新DIMM 100坞站上的标签,因为它对于许多DIMM 100 controlCARD仍然是准确的。 不过,我会看到是否可以在文档中添加一些内容,以便更清楚地说明这一点。
感谢您的反馈!
科迪