DSP2812 AD转换的问题,欢迎指教
我写了一个AD采样的程序,用定时器1的周期中断启动ADC,可是结果寄存器就是读不出来数据,ADC的中断函数已经进入,这是ADC中断函数
interrupt void ADCINT_ISR(void)
{
i=i+1;
a=((float)AdcRegs.ADCRESULT0)*3.0/65520.0;
b=((float)AdcRegs.ADCRESULT1)*3.0/65520.0;
c=((float)AdcRegs.ADCRESULT2)*3.0/65520.0;
d=((float)AdcRegs.ADCRESULT3)*3.0/65520.0;
e=((float)AdcRegs.ADCRESULT4)*3.0/65520.0;
f=((float)AdcRegs.ADCRESULT5)*3.0/65520.0;
g=((float)AdcRegs.ADCRESULT6)*3.0/65520.0;
h=((float)AdcRegs.ADCRESULT7)*3.0/65520.0;
u=((float)AdcRegs.ADCRESULT8)*3.0/65520.0;
j=((float)AdcRegs.ADCRESULT9)*3.0/65520.0;
k=((float)AdcRegs.ADCRESULT10)*3.0/65520.0;
l=((float)AdcRegs.ADCRESULT11)*3.0/65520.0;
m=((float)AdcRegs.ADCRESULT12)*3.0/65520.0;
n=((float)AdcRegs.ADCRESULT13)*3.0/65520.0;
o=((float)AdcRegs.ADCRESULT14)*3.0/65520.0;
p=((float)AdcRegs.ADCRESULT15)*3.0/65520.0;
PieCtrlRegs.PIEACK.all=0x0001;
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
EINT; //使能全局中端
}
这是初始化ADC的函数
void InitAdc(void)
{
unsigned int i;
AdcRegs.ADCTRL1.bit.RESET=1;
for(i=0;i<100;i++);
AdcRegs.ADCTRL1.bit.RESET=0;
AdcRegs.ADCTRL1.bit.SUSMOD=3; //仿真暂停时,序列发生器和其他数字电路辑立即停止1
AdcRegs.ADCTRL1.bit.ACQ_PS=0; //采样窗口大小,soc脉冲宽度为一个ADCLK AdcRegs.ADCTRL1.bit.CPS=0;
AdcRegs.ADCTRL1.bit.CPS=0; //核时钟预定标器,等于0,未将时钟进行二分频
AdcRegs.ADCTRL1.bit.CONT_RUN=0; //运行于启动/停止模式
AdcRegs.ADCTRL1.bit.SEQ_CASC=1; //0:双序列发生器模式1:级联模式
AdcRegs.ADCTRL3.bit.ADCBGRFDN=3;
for(i=0;i<5000;i++);
AdcRegs.ADCTRL3.bit.ADCPWDN=1;
for(i=0;i<10000;i++);
AdcRegs.ADCTRL3.bit.ADCCLKPS=15; //ADCLK=HSPCLK/30
AdcRegs.ADCTRL3.bit.SMODE_SEL=0; //采用顺序采样模式
AdcRegs.ADCMAXCONV.all=0x0077; //总共采样16路
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01=1;
AdcRegs.ADCCHSELSEQ1.bit.CONV02=2;
AdcRegs.ADCCHSELSEQ1.bit.CONV03=3;
AdcRegs.ADCCHSELSEQ2.bit.CONV04=4;
AdcRegs.ADCCHSELSEQ2.bit.CONV05=5;
AdcRegs.ADCCHSELSEQ2.bit.CONV06=6;
AdcRegs.ADCCHSELSEQ2.bit.CONV07=7;
AdcRegs.ADCCHSELSEQ3.bit.CONV08=8;
AdcRegs.ADCCHSELSEQ3.bit.CONV09=9;
AdcRegs.ADCCHSELSEQ3.bit.CONV10=10;
AdcRegs.ADCCHSELSEQ3.bit.CONV11=11;
AdcRegs.ADCCHSELSEQ4.bit.CONV12=12;
AdcRegs.ADCCHSELSEQ4.bit.CONV13=13;
AdcRegs.ADCCHSELSEQ4.bit.CONV14=14;
AdcRegs.ADCCHSELSEQ4.bit.CONV15=15;
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; //清除SEQ1中的中端标志位INT_SEQ1
AdcRegs.ADCST.bit.INT_SEQ2_CLR=1; //清除SEQ2中的中端标志位INT_SEQ2
AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=0; //0:不起作用1:允许事件管理器B的信号启动级联的序列发生器,可以通过对事件管理器EVB进行编程,实现EVB的多种事件转换启动
AdcRegs.ADCTRL2.bit.RST_SEQ1=0; //不起作用
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1; //使能SEQ1的中断请求
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0; //每个SEQ1序列转换结束时,置位SEQ1中断标志位
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1; //允许EVA触发启动SEQ1
AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1=0;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=0;
AdcRegs.ADCTRL2.bit.RST_SEQ2=0;
AdcRegs.ADCTRL2.bit.SOC_SEQ2=0;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0;
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0;
AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0;
}
仿真查看结果寄存器,一直没有数据。显示0.请问为什么读不出数据呢? 还有接上信号线给ADC,ADC有些发热,怀疑ADC某个部分是不是烧了,我给的信号低于2.5V 代码好多啊,看得眼疼,建议楼主先采一个通道看看结果,别整这么复杂,都不好调试了 定点的F2812,你在中断里面用浮点运算,1,2,3,。。。哥都数不过来了。只能说,楼主奇人,膜拜!
页:
[1]