请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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;
}