| 
 
| 大家好。最近刚学到DSP2812的AD部分,学着AD有些不懂得的问题,请求给与开导。 1、AD的ADCLK也就是AD的时钟吧,这个和AD的转换周期是一样的吗?AD的转换周期是指一个通道的转换还是所有通道都转换完的周期?
 2、AD的采样和AD的周期。采用频率,是啥意思。
 3、AD进入中断一次的时间如何计算。
 4、AD采样时候,在同一通道采用好几次,度数据时候需要延迟吗?延时时间如何计算】
 这个程序的采用周期如何计算的
 void Init_adc()
 {
 
 int i;
 
 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="\r\nInit adc OK!\r\n";
 buf_FIFO(&sci_send_fifo,msg,16);
 
 }
 
 
 | 
 |