This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

2812采样正弦波求助

使用2812对正弦波进行采样,从通道A0输入1KHZ的正弦波,用EV周期中断启动AD转换,采样频率设为100KHZ,但是得出的波形类似脉冲,望大侠帮助啊,哪儿有问题。。。

#include "DSP281x_Device.h"
float
a1[100];                //存储转换后的值;
//本程序只针对了ADCINA0信道

unsigned int a2=0;
//采样次数的统计
float
adclo=0.0;   
//0位调整
unsigned int i=0;

interrupt void ad(void);        //AD中断子程序

main()
{

    InitSysCtrl();


DINT;

IER = 0x0000;

IFR = 0x0000;


InitPieCtrl();

    InitPieVectTable();




EALLOW;
                    

PieVectTable.ADCINT=&ad;     //中断向量表中的ADCINT中断指向AD中断函数

EDIS;                       

   
InitAdc();
   
InitEv();


IER |= M_INT1;
//使能中断第一组

PieCtrlRegs.PIEIER1.bit.INTx6=1;            //第一组的第6位正好ADINT



EINT;  

ERTM;




EvaRegs.T1CON.bit.TENABLE=1;


for(;;);
}



/*void delay(unsigned int t)
{

while(t>0)
   
t--;
}*/


interrupt void ad(void)
{

    adclo=0;
//每块板的零位不一样,在这儿设一个合适的数以扣掉零位

IFR=0x0000;


PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;

a2++;



a1[i]=((AdcRegs.ADCRESULT0>>4)*3)/4095.0+adclo;

if(i>=100)

{

EvaRegs.T1CON.bit.TENABLE=0; //关定时器1

i=0;                         //在这儿设一断点,程序执行到这儿停下后,查看变量数组a1即可看到ADC各通道的采样值。

}

else

i++;

AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;

AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;

EINT;
}

void InitEv(void)
{


EvaRegs.T1PR=750;                          

EvaRegs.GPTCONA.bit.T1TOADC=2;  //周期中断启动AD;

EvaRegs.T1CON.bit.TMODE=2;      //连续增模式;

EvaRegs.T1CON.bit.TPS=0;

EvaRegs.T1CON.bit.TCLKS10=00;   //使用内部时钟;

EvaRegs.T1CON.bit.TCLD10=2;

EvaRegs.T1CNT=0x00;



EvaRegs.EVAIMRA.bit.T1PINT=1;

}


#define ADC_usDELAY  8000L
#define ADC_usDELAY2 20L

void InitAdc(void)
{
    extern void DSP28x_usDelay(Uint32 Count);

        AdcRegs.ADCTRL1.bit.RESET=1;
//ADC模块软件复位

DELAY_US(ADC_usDELAY2);

AdcRegs.ADCTRL1.bit.RESET=0;
//无影响




AdcRegs.ADCTRL3.bit.ADCBGRFDN=3; //0表示带限和参考电源关,3表示带限和参考电源开

DELAY_US(ADC_usDELAY);

AdcRegs.ADCTRL3.bit.ADCPWDN=1;
//ADC内核的模拟电路的电源开

DELAY_US(ADC_usDELAY2);



AdcRegs.ADCTRL1.bit.SUSMOD=3;
//仿真挂起方式

AdcRegs.ADCTRL1.bit.ACQ_PS=3;
//采样窗的宽度,范围0-15。

AdcRegs.ADCTRL1.bit.CPS=1;
//ADC内核时钟定标,

AdcRegs.ADCTRL1.bit.CONT_RUN=0;
//0表示启动/停止模式,写1表示连续转换模式

AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
//1为级联(单排序)模式,0为双排序模式

AdcRegs.ADCTRL3.bit.ADCCLKPS=15; //内核时钟定标。配合AdcRegs.ADCTRL1.bit.CPS

AdcRegs.ADCTRL3.bit.SMODE_SEL=0; //0为顺序采样模式,1为同时采样模式



AdcRegs.ADCMAXCONV.all=0x0000; //一次自动转换时的最大转换数



AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;

//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;//写1清SEQ1中断标志位,写0无影响

//AdcRegs.ADCST.bit.INT_SEQ2_CLR=1;//写1清SEQ2中断标志位,写0无影响



AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=0;



AdcRegs.ADCTRL2.bit.RST_SEQ1=0;

AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;        //EQ1中断使能;

AdcRegs.ADCTRL2.bit.SOC_SEQ1=0;


AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;

AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;           //EVa触发SEQ1

AdcRegs.ADCTRL2.bit.EXT_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;
}