This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

2812与28335的AD采样时钟



看2812与28335的Datasheet,写的好几个地方都有矛盾。

2812的AD采样最快频率是25MHz吗?

28335的AD采样最快频率是12.5MHz吗?

是不是2812的AD采样速率比28335块?

是不是2812的采样带宽同样比28335快?

  • yang jin,

    它们最快采样频率是一样的,都为12.5MSPS。见F28335 datasheet p77和F2812 p63

    Fast conversion rate: 80 ns at 25-MHz ADC clock, 12.5 MSPS

    Eric

  • 我实际测试了一下,不知道是否设置正确,但是采样到数据转换最多只能达到6.2MHz

  • yang,

    不知道你是用什么测试方法?

    你可以只配置一个通道,然后采用连续采样的模式,在中断服务程序里面设一个GPIO翻转,通过GPIO翻转频率来看采样的频率。当然,还要考虑从AD转换完成到进入中断这十几个系统时钟的时间。

  • 我确实使用的是只配置一个通道,然后采用连续采样的模式,每采样一次,计数器加1,使用1us的中断周期,用一个100个成员的数组保存计数器的值,基本上是61,62

  • 不好意思,是10us的中断周期

  • yang jin,

    我感觉应该跟测试代码有关系。

    我的建议是,程序load 在RAM中,然后测试代码在做完初始化之后,就什么都不要做,进入while(1){}空循环,等待中断。

    然后在中断里面放三条语句

    首先一条是GPIO34toggle,另外两条清除ADC标志位以及PIE标志位。

    如果以上测试还没达到十几M,那就得 你把ADC的初始化代码发上来,我们一起看一下有哪些地方是不是没配置准确。

    Eric

  • AD初始化代码如下:

    void ADReal_init(void)
    {
     EALLOW;
     SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
     ADC_cal();
     EDIS;

        AdcRegs.ADCTRL3.all = 0x00E0;  // Power up bandgap/reference/ADC circuits
        DELAY_US(5000L);         // Delay before converting ADC channels

     AdcRegs.ADCTRL1.bit.ACQ_PS = 0x0;
     AdcRegs.ADCTRL3.bit.ADCCLKPS =  1;
     AdcRegs.ADCTRL3.bit.SMODE_SEL = 0;
     AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;
     AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
     AdcRegs.ADCTRL1.bit.CONT_RUN = 1;
     AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;

     AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0; //Max Conv
     AdcRegs.ADCMAXCONV.bit.MAX_CONV2 = 0; //Max Conv

     AdcRegs.ADCCHSELSEQ1.all = 0x3210;
     AdcRegs.ADCCHSELSEQ2.all = 0x7654;
     AdcRegs.ADCCHSELSEQ3.all = 0xBA98;
     AdcRegs.ADCCHSELSEQ4.all = 0xFEDC;

    }

    Main函数代码如下:

    void main(void)
    {
     InitSysCtrl();

     EALLOW;
     SysCtrlRegs.HISPCP.all = 0x0003;
     EDIS;

     DINT;

       InitPieCtrl();

       IER = 0x0000;
       IFR = 0x0000;

       InitPieVectTable();

     EALLOW;
     PieVectTable.TINT0 = &CPU_timer0_isr;

     EDIS;

     InitCpuTimers();

     // 150MHz CPU Freq, 1 second Period (in uSeconds 1000000)
     ConfigCpuTimer(&CpuTimer0, 150, 100);

     PieCtrlRegs.PIEIER1.bit.INTx7 = M_INT1;

     EnableInterrupts();
      
    // Step 3. Initialize all the Device Peripherals:
     Adreal_init();

     IER = M_INT1;
     
     AdcRegs.ADCTRL2.all = 0x2000;

     CpuTimer0Regs.TCR.all = 0x4001;

     for(;;)
     {
      while(AdcRegs.ADCST.bit.INT_SEQ1 == 0){}
      AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
      Point++;
     }
    }

    CPUTIMER0中断如下:

    interrupt void CPU_timer0_isr(void)
    {
     State[i++] = Point;

     Point = 0;

     if(i>=99)
      i = 0;
     
     // Acknowledge this interrupt to receive more interrupts from group 1
     PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
    }

     

    程序是RAM调试程序,直接在RAM中运行的,请帮助看看程序是否有问题?测试出来的结果数组中基本都是61或62.

  • 现在问题解决了吗?我现在也遇到这样的问题,我用0.5MHz的方波试的,采样结果显示,一个周期10个点,即采样率5MHz。  我的QQ:290094668多交流啊!

  • 现在问题解决了吗?我现在也遇到这样的问题,我用0.5MHz的方波试的,采样结果显示,一个周期10个点,即采样率5MHz。  我的QQ:290094668多交流啊!

  • LZ你这里设置的有点乱呀,我这里有一个HELLODSP的例程,这个可以实现,你参考研究一下吧,大家共同学习,我已经下面个哥们QQ,大家有机会多交流一下。

    05_ADC01.rar