关于DSP的AD周期等知识求解答

2019-07-23 13:59发布

大家好。最近刚学到DSP2812的AD部分,学着AD有些不懂得的问题,请求给与开导。
1、AD的ADCLK也就是AD的时钟吧,这个和AD的转换周期是一样的吗?AD的转换周期是指一个通道的转换还是所有通道都转换完的周期?
2、AD的采样和AD的周期。采用频率,是啥意思。
3、AD进入中断一次的时间如何计算。
4、AD采样时候,在同一通道采用好几次,度数据时候需要延迟吗?延时时间如何计算】
这个程序的采用周期如何计算的
void Init_adc()
{

        int i;
//用的20M外部晶振
        EALLOW;
        SysCtrlRegs.HISPCP.all = 0x05;        //预定标时钟
        // HSPCLK = SYSCLKOUT/ADC_MODCLK=100/(2*5)=10M  ADC的基准时钟
        EDIS;
        AdcRegs.ADCTRL1.bit.RESET=1;//使ADC模块复位
        delay_ms=5;
        while(delay_ms!=0);
        //adcclkps 内核时钟分频器,连续采样

        AdcRegs.ADCTRL3.all = 0x00E0;//0111 0000/  // Power up bandgap/reference/ADC circuit
        //ADCCRTL3 有采样方式选择,是第0位。0表示顺序采样
        //【1:4】ADCLKPS-内核时钟分频器 HSPCLK被2*ADCCLKPS分频,当为0时HSPCLK直接输出  8分频
        //ADCLK=HSPCLK/【16*(ADCTRL1[7]+1)】=10/1
        //[5]ADC电源控制。0表示除带隙和参考电路外的ADC其他模拟电路掉电

        delay_ms=5;
        while(delay_ms!=0);
        AdcRegs.ADCTRL1.bit.CPS=0;//内核时钟预定标器,对外设高速HSPCLK分频ADCLK=HSPCLK/CPS+1=10Mhz

        AdcRegs.ADCTRL1.bit.ACQ_PS = 0x03;  //采集窗口大小3,用于控制采样过程中SOC脉冲宽度SOC=(ACQ_PS+1)*ADCLK


        // Sequential mode: Sample rate   = 1/[(2+ACQ_PS)*ADC clock in ns]
        //                     = 1/(2+3) =HSPCLK/5 MHz//顺序采样10/5=2MHz====0.5um 采样频率
        // If Simultaneous mode enabled: Sample rate = 1/[(3+ACQ_PS)*ADC clock in ns]并发采样

        if(fren)           AdcRegs.ADCTRL3.bit.ADCCLKPS = 500/(unsigned char)fren;
        //级联方式seq1和seq2作为一个16状态序列发生器seq   
        AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;        // 1  Cascaded mode级联系列发生器工作方式
        //  AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0;
        AdcRegs.ADCTRL1.bit.CONT_RUN = 1;       // Setup continuous run连续工作方式

        AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0;       // Enable Sequencer override feature//不用关心

        if(soft_switch[DEBUG])//如果在诊断下就4个通道都采样
        {
                AdcRegs.ADCCHSELSEQ1.all = 0x09b8a;     // Initialize all ADC channel selects to A0
//选择八个通道                                                0000 1001 1011 1000 1010
//                                                                                   1   3        0         2
        }

        else //其他时候只有两个通道  A通道信号值和B通道信号值
        {
                AdcRegs.ADCCHSELSEQ1.all = 0x08a8a;//第四位为1时选择B通道采样
                //六个通道                 //0000 1000 1010 1000 1010
                                   //      0     2     0脚  2脚
        }
        AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x03;  // convert and store in 8 results registers最大转换通道

        AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;//seq1中断使能
        AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0; //中断方式,每个序列转换完结束时置位中断
        for (i=0; i<BUF_SIZE; i++)
        {
                SampleTableb0[i] = 0;
                SampleTableb1[i] = 0;
                SampleTableb2[i] = 0;
                SampleTableb3[i] = 0;

        }

        msg=" Init adc OK! ";
        buf_FIFO(&sci_send_fifo,msg,16);

}
这个程序的采用周期如何计算的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。