TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28035 的 ADC模块求助

InitAdc();

EALLOW;

AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;

AdcRegs.INTSEL1N2.bit.INT1E = 1;

AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
AdcRegs.INTSEL1N2.bit.INT1SEL = 1;

AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
EDIS;

EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm1Regs.CMPA.half.CMPA = 0x0080; // Set compare A value
EPwm1Regs.TBPRD = 0xFFFF; // Set period for ePWM1
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start

以上是ADC_SOC的例程,想请教,

1.为什么只用了一个ADC_INT1中断来读取两个AD信号,这个中断只对应了SOC1,为什么还能读取SOC0通道的模拟量?

2.可不可以不用中断的方式读取AD?直接在主循环里不停的读取?

3.为什么28035的ADC与28335的ADC结构完全不一样?

4.28035的AD是不是有SOC中断和EOC中断,SOC中断可以映射到(TIMER、XINT、ePWM中断),EOC中断映射到ADCINT1~9,不知道我这样理解对不对?

Brian Wang0:

1 代码中adc_int1进入中断是由EOC信号触发的,而不是由SOC1触发的这是需要注意的。

2 可以在主循环里读取,这个要看具体的应用。

3 二者工作原理还是有很多类似之处的。

4 soc的主要功能是触发AD转换的开始,EOC则会映射到映射到ADCINT1~9。需要注意的是EOC的触发事件可以设定在转换的开始或者结束时,通过AdcRegs.ADCCTLX.bit.INTPULSEPOS J进行设定。

InitAdc();

EALLOW;

AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;

AdcRegs.INTSEL1N2.bit.INT1E = 1;

AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
AdcRegs.INTSEL1N2.bit.INT1SEL = 1;

AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
EDIS;

EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm1Regs.CMPA.half.CMPA = 0x0080; // Set compare A value
EPwm1Regs.TBPRD = 0xFFFF; // Set period for ePWM1
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start

以上是ADC_SOC的例程,想请教,

1.为什么只用了一个ADC_INT1中断来读取两个AD信号,这个中断只对应了SOC1,为什么还能读取SOC0通道的模拟量?

2.可不可以不用中断的方式读取AD?直接在主循环里不停的读取?

3.为什么28035的ADC与28335的ADC结构完全不一样?

4.28035的AD是不是有SOC中断和EOC中断,SOC中断可以映射到(TIMER、XINT、ePWM中断),EOC中断映射到ADCINT1~9,不知道我这样理解对不对?

user4539168:

回复 Brian Wang0:

Weiqi Wang3

1 代码中adc_int1进入中断是由EOC信号触发的,而不是由SOC1触发的这是需要注意的。

2 可以在主循环里读取,这个要看具体的应用。

3 二者工作原理还是有很多类似之处的。

4 soc的主要功能是触发AD转换的开始,EOC则会映射到映射到ADCINT1~9。需要注意的是EOC的触发事件可以设定在转换的开始或者结束时,通过AdcRegs.ADCCTLX.bit.INTPULSEPOS J进行设定。

InitAdc();

EALLOW;

AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1;

AdcRegs.INTSEL1N2.bit.INT1E = 1;

AdcRegs.INTSEL1N2.bit.INT1CONT = 0;
AdcRegs.INTSEL1N2.bit.INT1SEL = 1;

AdcRegs.ADCSOC0CTL.bit.CHSEL = 0;
AdcRegs.ADCSOC1CTL.bit.CHSEL = 1;
AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;
AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;
AdcRegs.ADCSOC1CTL.bit.ACQPS = 6;
EDIS;

EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
EPwm1Regs.CMPA.half.CMPA = 0x0080; // Set compare A value
EPwm1Regs.TBPRD = 0xFFFF; // Set period for ePWM1
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start

以上是ADC_SOC的例程,想请教,

1.为什么只用了一个ADC_INT1中断来读取两个AD信号,这个中断只对应了SOC1,为什么还能读取SOC0通道的模拟量?

2.可不可以不用中断的方式读取AD?直接在主循环里不停的读取?

3.为什么28035的ADC与28335的ADC结构完全不一样?

4.28035的AD是不是有SOC中断和EOC中断,SOC中断可以映射到(TIMER、XINT、ePWM中断),EOC中断映射到ADCINT1~9,不知道我这样理解对不对?

user4539168:

回复 Brian Wang0:

Weiqi Wang3

两个通道都是通过同一路EPWM触发转换的,在pwm信号到来时,MCU��按照SOC0~15的顺序进行转换,并将结果对应存在0~15的结果寄存器中。

所以说soc的设置本质就是对转换顺序的设置。

因此程序只需要在最后一个信号转换完成之后,再进入中断读取就可以了。

以这程序为例,PWM到来后,会按soc0-soc1的顺序转换,因此当eoc1被触发,两路的转换就都完成了,所以程序只要等到所有转换之后读取一次就可以了。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28035 的 ADC模块求助
分享到: 更多 (0)