请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28376S 你好
我们固件上的 DAC 在120MHz 的 CPU 时钟频率下工作正常。 但是、当我通过在 cfg 文件中将 SPLLIMULT 从12设置为16并将 CPU_RATE 从8.333L 更改为6.250L 来将时钟切换为160MHz 时、结果(readADC 的输出参数、请参阅下面的代码)始终为 ADCINC2零、而不是正确的值。 ADCIN0和 ADCIND1的结果在大约30%的时间内为零。
我尝试更改采集窗口、更改发生频率、但问题仍然存在。
我还尝试使用 ADCINTFlG.bit.ADCINT1 代替 ADCCTL1.bit.ADCBSY 进行轮询、从而更好地适应 TI 示例(adc_ppb_offset_cpu01.c)、 然后固件崩溃。
我以10MHz 的步长检查了120至200MHz 之间的所有时钟频率。 错误 从150MHz 开始、 高于160MHz 时、错误 频率降低。
此致
1月
编译器 V16.9.5 LTS
SYS/BIOS V6.51.0.15
静态空 readADC (uint16& chC2、uint16& chD0、uint16& chD1) { EALLOW; AdccRegs.ADCSOCFRC1.ALL = 0x0001;//强制 SOC0启动转换 AdcdRegs.ADCSOCFRC1.ALL = 0x0003;//强制 SOC0-SOC1开始转换 EDIS; DELAY_US (200); uint32 busyWait=0; //等待 ADC 转换完成 while (AdccRegs.ADCCTL1.bit.ADCBSY = 1 || AdcdRegs.ADCCTL1.bit.ADCBSY = 1) { busyWait++; DELAY_US (100); } chC2 = AdcResultRegs.ADCRESULT0; chD0 = AdcdResultRegs.ADCRESULT0; CHD1 = AdcdResultRegs.ADCRESULT1; AdccRegs.ADCINTFLGCLR.ALL = 0x0003; //清除 ADCINT1和 ADCINT2标志 AdcdRegs.ADCINTFLGCLR.ALL = 0x0003; //清除 ADCINT1和 ADCINT2标志 } 静态空 configureADC() { EALLOW; AdccRegs.ADCCTL2.bit.prescale = 14; // InputClock 分频器= 8 -> 120MHz/8 = 15MHz。 AdcdRegs.ADCCTL2.bit.prescale = 14; CpuSysRegs.PCLKCR13.ALL = 0x000C; //为 ADC C 和 D 启用时钟 AdcSetMode (ADC_ADCC、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE); AdcSetMode (ADC_ADCD、ADC_Resolution、12位、ADC_SIGNALMODE_SINGLE); AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1; //为 ADC C 电路加电 AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 1; //为 ADC D 电路加电 DELAY_US (1000); // ADCC AdccRegs.ADCSOC0CTL.bit.CHSEL = 2; // ADCINC2 AdccRegs.ADCSOC0CTL.bit.ACQPS = 43; //采集窗口 // ADCD AdcdRegs.ADCSOC0CTL.bit.CHSEL = 0; // ADCIND0 AdcdRegs.ADCSOC0CTL.bit.ACQPS = 43; //采集窗口 AdcdRegs.ADCSOC1CTL.bit.CHSEL = 1; // ADCIND1 AdcdRegs.ADCSOC1CTL.bit.ACQPS = 43; //采集窗口 EDIS; }