工具/软件:Code Composer Studio
我接管了在 Piccolo 上运行的大量传统代码。 我尝试将代码移植到具有200MHz 频率的 Delfino。 对于120MHz 的旧频率、一切似乎都很好、但当升至200MHz 时、ADC 至少在一个特定通道上提供垃圾值。
这是初始化。
EALLOW; // TI 上电序列 //最大 ADCCLK:50MHz AdcaRegs.ADCCTL2.bit.prescale = 14;//输入时钟分频器= 8 -> 120MHz/8 = 15MHz。 AdcbRegs.ADCCTL2.bit.prescale = 14;//输入时钟分频器= 8 -> 120MHz / 8 = 15MHz CpuRegs.PCLKCR13.all = 0x0003;//启用 ADC A 和 ADC B 的时钟 AdcSetMode (ADC_ADCA、ADC_resolution_12bit、ADC_SYSADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADSCALE_ADC12BIT、ADC_ADC_ADC_ADC_ADC_ADC_ADC_ADC_SESHOLUTION、ADC_ADC_SEST_ADCK_ ADC_SIGNALMODE_SINGLE); AdcRegs.ADCCTL1.bit.ADCPWDNZ = 1;//为 ADC A 电路加电 AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;//为 ADC B 电路加电 DELAY_US (1000); uint32 cpufreq = CquadtruencyTM = 1;(uquetInquale= UcpuF )= 1);(uqualeInqualuF = 1) 0x57:0x93; //ADCA AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 0x07;// ePWM2、ADCSOCA 作为触发 AdcaRegs.ADCSO0CTL.bit.CHSEL = 0x0;AdcaRegs.ADCCO0CTL.bit.ADCSOCSRG=0x07 ;ADCSOC1ADCADCADCCORegs.ADCCOL.ADCADCADCCOL.ADCADCADCADCADCADCADCADCADCADCADCCOL.TCL.ADCADCADCADCADCADCADCADCADC1CL.ADCADCADCADCADCADCADCADCADCADCCOL.TCL.ADCADCADCADCADCADCADCADCADCADCADCADCADCADCADCADCADCCOL.TL.TCL.ADCADCADCADCADCADCADCADCADCADCADCADCADCADCADCADCADCADC // ePWM2、ADCSOCA 作为触发 器 AdcRegs.ADCSO3CTL.bit.CHSEL = 0x3; AdcRegs.ADCSO3CTL.bit.ACQPS = acqWindow;Adcoc3CTL.bit.ADCCORegs.ADCSOC.ADCSRC.07.ADCSOC.ADCSRC.ADC5TRS.ADCSOC.ADCADCCOL.ADCADCADCCOL.TCL.ADCADCADCADCCOL.ADCADCADCADCCOL.ADCADCADCCOL.TCCS.ADCADCADCADCADCADCADCADCADCADCADCTRL.TC.TRS.ADCCP.ADCCPS.ADCCP.ADCCPS.ADCCPS.ADCCP.ADCCP.ADCCP.ADCCP.ADCCP.ADCCP.ADCCP.ADCCP.ADCCP.ADCCP.ADCADCCP.ADCCP.ADCADCADCADCADCADCADCADCADCTR AdcRegs.ADCSOC6CTL.bit.ACQPS = acqWindow; // ADCB AdcbRegs.ADCSOC0CTL.bit.TRIGSEL = 0x13;// ePWM8、ADCCOCA 作为触发 器 Adcb Regs.ADCCO0CTL.bit.CH8 = 0x0;ADCCOCL.ADCSRC.ADC1ADCSRC.ADC1ADCCOM.ADCTRL = 0xADCCOM.ADCCOM.ADCSRC.ADC1ADCTRL.ADCCOM.ADCSRC.ADCSRC.ADCTRL = 0xbADC1ADCSOC.ADCTRL.ADCTRL.ADCSRC.ADC1ADCTRL.ADCCOM.ADCSRC.ADCSRC.ADCTRS.ADC1ADCTRL.ADCTRS.ADCTRS.ADCTRS.ADCTRS.ADCCP.ADCCP.ADCCP.ADCCP.ADCCP.ADCTRS.ADCCP.ADCTRS.ADCTRS.ADCTRS.ADCTRL.ADCTRS.AD // ePWM8、ADCSOCA 作为触发 器 AdcbRegs.ADCSOC3CTL.bit.CHSEL = 0x3; AdcRegs.ADCSO3CTL.bit.ACQPS = acqWindow;Adcoc3CTL.bit.ADCSRG=0x13 ;// eCCCRC.ADCSRG=0xCCS.ADC5CCS.ADCTRL.ADCADCTRL.ADCADCADCTRL.ADCADCADCCR.ADCCOM.ADCTRS.ADCTRS.ADCCPS.ADCADCTRS.ADCTRS.ADCADCTRS.ADCTRS.ADCCPS.ADCTRS.ADCTRS.ADCTRS.ADCTRS.ADCCPS.ADCTRS.ADCTRS.ADCCPS.ADCADCADCADCADCADCADCTRL.ADCTRS.ADCTRS.ADCTRS.ADCCPS.ADCCPS.ADCTRS.ADCADCTRS.ADCCPS.ADCTRS.ADCADCADCADCADCADCTRL.ADCTR PieCtrlRegs.PIEIER1.bit.INTx1 = 1;//在 PIE 组1中启用 ADCA_INT1 //在 CPU 中断门 IER 中启用 PIE 组1 |= M_INT1; EDIS;
要触发的 PWM 将被操作、并且在 ISR 之外连续等待转换、如所示
while (AdcaRegs.ADCCTL1.bit.ADCBSY = 1 || AdcbRegs.ADCCTL1.bit.ADCBSY = 1) { m_busyWait++; }
之后、寄存器被读取、中断标志被清除。 由于某种原因、在200MHz 下、该寄存器中的值
//... M_ADCA.OutCh[5]= AdcaResultRegs.ADCRESULT5; AdcaRegs.ADCINTFLGCLR.ALL = 0x0003; //清除 ADCINT1和 ADCINT2标志 AdcbRegs.ADCINTFLGCLR.ALL = 0x0003; //清除 ADCINT1和 ADCINT2标志
是垃圾。 更具体地说:我知道值必须是多少(范围)、但它会关闭大约50 %(掷一枚硬币同样准确)。 在120 MHz 下工作正常。 此处应重新评估哪些 ADC 配置参数?
