请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:TMS320F280023C “线程:C2000WARE”中讨论的其它部件
您好,
我在 微控制器上设置了 SOC2,以触发 ePWM1 SOCA 输出信号。
我的输入引脚(A2)上有不同的电压,但尽管 ISR 经常被输入(使用计数器变量检查),ADC 结果寄存器的值不会改变。 它只在2045-2046时保持固定状态。
这是我的初始化代码和 ISR 代码。 请帮我弄清楚我错过了什么。
void init_adc(void)
{
EALLOW;
CpuSysRegs.PCLKCR13.bit.ADC_A=1;
EDIS;
ADC_setVREF(ADCA_BASE, ADC_REFERENCE_INTERNAL, ADC_REFERENCE_3_3V);
EALLOW;
AdcaRegs.ADCCTL1.bit.ADCPWDNZ=1; // Power on the ADC
AdcaRegs.ADCCTL2.bit.PRESCALE = 2; // ADCCLK=50MHz for SYSCLK=100MHz
//SOC2: triggered by EPWM1-SOCA, 270ns acquisition window, sampling on channel 2
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 0x5;
AdcaRegs.ADCSOC2CTL.bit.ACQPS = 26;
AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;
AdcaRegs.ADCCTL1.bit.INTPULSEPOS=1; // Interrupt pulse generation occurs at the end of conversion, 1 cycle before result latching on to the result reg
AdcaRegs.ADCINTSEL1N2.bit.INT2SEL=2; // Set EOC2 as interrupt trigger for ADCINT2
AdcaRegs.ADCINTSEL1N2.bit.INT2CONT=0;
AdcaRegs.ADCINTSEL1N2.bit.INT2E=1;
EDIS;
DEVICE_DELAY_US(5000);
}
__interrupt void ADC2_ISR(void)
{
adcval_raw = AdcaResultRegs.ADCRESULT2;
adcval = 3.3*(((float)adcval_raw)/4096);
soaCurrent = ((1.65-adcval)/(20*0.004));
EPwm1Regs.ETCLR.bit.SOCA=1;
AdcaRegs.ADCINTFLGCLR.bit.ADCINT2=1;
PieCtrlRegs.PIEACK.bit.ACK10=1;
}
请提前感谢。
此致,
维什努