最近在学28335的AD模块,根据网上找的视频和资料对照着编程,但是结果却一直为0,希望各位能过帮忙解决一下问题。个人觉得是初始化出现了问题,但是看了很多遍了还是不行,所以请大家帮助一下。
void Init_ADC_control(void)//ADC的初始化
{
extern void DSP28x_usDelay(Uint32 Count);//声明延迟函数
EALLOW;
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;//开启ADC时钟
ADC_cal();//校准时钟
EDIS;
AdcRegs.ADCTRL1.bit.RESET = 1;//复位ADC模块
DSP28x_usDelay(1);//复位模块需要2个时钟模块才能生效
AdcRegs.ADCTRL1.bit.RESET=0;//然后恢复使能状态
AdcRegs.ADCTRL1.bit.SUSMOD = 3;//仿真的设置
//当设置断点时,SUSMOD为10时,完成转换后停止
AdcRegs.ADCTRL1.bit.CONT_RUN = 1; // Setup continuous run
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; // Enable Sequencer override feature
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;//级联模式
AdcRegs.ADCTRL3.bit.SMODE_SEL = 0;//顺序采样模式
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x6;//开7个通道
/*采样 ADCINA0*/
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;
/*采样 ADCINA1*/
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;
/*采样 ADCINA2*/
AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2;
/*采样 ADCINA3*/
AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3;
/*采样 ADCINA4*/
AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4;
/*采样 ADCINA5*/
AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5;
/*采样 ADCINA6*/
AdcRegs.ADCCHSELSEQ2.bit.CONV06=0x0;
AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;
//bandgap/reference/ADC circuits is POWER ON
DSP28x_usDelay(5000);//需要至少7MS时间
AdcRegs.ADCTRL3.bit.ADCPWDN=1;//others is POWER ON
DSP28x_usDelay(5000);
AdcRegs.ADCTRL1.bit.CPS = 1;//2分频高速时钟
AdcRegs.ADCTRL3.bit.ADCCLKPS = 1;//ADCLK=HSPCLK/(2*(CPS+1));此程序中,CPS为1
AdcRegs.ADCTRL1.bit.ACQ_PS = 3;//Sequential mode: Sample rate = 1/[(2+ACQ_PS)*ADC clock in ns]
//ACQ_PS为采样窗口的时间,ADCLK=6.25MHZ, //= 1/(3*40ns) =8.3MHz (for 150 MHz SYSCLKOUT)
//sampling time=ADCCLK*(3+1);
Delay_us(1000);//稳定时钟
}
//start SEQ1
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
while(1)
{
if(array_index>512)
array_index = 0;
while(AdcRegs.ADCST.bit.INT_SEQ1 == 0);
SampleTable[array_index] = ((AdcRegs.ADCRESULT1)>>4);
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
array_index++;
AdcRegs.ADCTRL2.bit.RST_SEQ1 =1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;[img]C:\Users\Administrator\Desktop
//Delay_us(10);
}
//这个是采集ADC,虽然是7路采集,但是我只把通道0的数据存入数组中了别的没做处理。
C:\Users\Administrator\Desktop
|