工具/软件:Code Composer Studio
我在将 ADC 设置为2MSPS 方面遇到了一些困难。 根据我在数据表中看到的内容、为了实现最佳性能、必须为 ADC 提供32MHz 的时钟。
因此、我以这种方式配置 ADC
void CONFIG_ADC0 (void) { ROM_GPIOPinTypeADC (GPIO_PORTK_base、GPIO_PIN_0); ROM_ADCReferenceSet (ADC0_BASE、ADC_REF_INT); ROM_ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_TIMER、0); ROM_ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH16 | ADC_CTL_IE | ADC_CTL_END); ROM_ADCHardwareOversampleConfigure (ADC0_BASE、0); //480MHz PLL / 15 = 32MHz = 2MSPS ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、15); ROM_ADCSequenceEnable (ADC0_BASE、3); ROM_IntDisable (INT_ADC0SS3); ROM_ADCIntDisable (ADC0_BASE、3); ROM_IntPendClear (INT_ADC0SS3); ROM_ADCIntClear (ADC0_BASE、3); ROM_IntEnable (INT_ADC0SS3); ROM_ADCIntEnable (ADC0_BASE、3); }
并将 Timer0配置为触发(以2MHz 的速度计数)。 但 ADC 速度上限为1MHz、即使我改用 ADC_TRIGGER_Always。 系统时钟为120MHz、PLL 为480MHz。
我将使用这些函数和逻辑分析仪来查看实际速度:
void ADC0SS3IntHandler (void) { ROM_ADCIntClear (ADC0_BASE、3); //rom_ADCSequenceDataGet (ADC0_BASE、3、g_adc0Reading); ROM_GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_4、g_flagAdc0? GPIO_PIN_4:0x00); G_flagAdc0 =!g_flagAdc0; }
ADC 频率是输出引脚频率的2倍。 我实现略高于1MSPS (~1.2MSPS 不稳定)的唯一方法是将 PLL 频率除以7 (导致 ADC 为68MHz)、但这毫无意义。 我该如何实现2MSPS?