【“要利用AD 模块,就要给AD 的内核,带隙电路上电,要准确的采集
信号也要对AD 的参考电路进行上电”】
请问这句话是什么意思呢?具体是怎么操作实施的呢!?
1.我的程序里不加如如下程序,能采样成功,加了下面的程序,反而不成功?!不知道是为什么?
2.【总复位Reset】加进去不能采样,不加采样正常。。
//初始化AD模块配置
void initadc(void)
{
//AdcRegs.ADCTRL1.bit.RESET = 1; /* 复位片内ADC外设 */
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;//复位采样序列
//AdcRegs.ADCTRL1.bit.SUSMOD = 0; /* 忽略仿真挂起 */
//AdcRegs.ADCREFSEL.bit.REF_SEL = 0; /* 采用内部基准电压处理 */
//AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; /* 能带隙电路和参考电路上电 */
//DELAY_US(10000);
//AdcRegs.ADCTRL3.bit.ADCPWDN = 1; /* ADC内核中模拟电路上电 */
//DELAY_US(2000);
AdcRegs.ADCTRL1.bit.CPS=0;//ADCCLK=HSPCLK/1
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; // Sequential mode(顺序模式):
//【采样率】Sample rate= 1/[(2+ACQ_PS)*ADC clock in ns]=1/(3*40ns)=8.3MHz
//如果使用[同步采样]模式:采样率=1/[(3+ACQ_PS)*ADC clock in ns)]
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; //预分频用,核心时钟分频,此处为25MHz
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; //启动停止模式Setup continuous run
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; //不(覆盖由MAX_CONV1设置的最大通道数,在整个模块通道内循环转换 )
AdcRegs.ADCCHSELSEQ1.all = 0x0; //初始化所有的ADC通道到A0
AdcRegs.ADCTRL3.bit.SMODE_SEL=0; //顺序采样模式
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //级联模式Cascaded mode (0 双排序模式)
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0; //转换并存储到1个结果寄存器里
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0; //采样ADCINA0通道,采样ADCINA0(引脚)
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // 使能中断Enable SEQ1 interrupt
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;// 清除中断标志
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 =0 ;// 在每一个SEQ1序列的结束设置INT_SEQ1中断标志位
}
