|
这是我写的一个AD采样的程序,目的是采样NUM个点之后停止,但是结果有一些问题,想请教问题出在什么地方。
#include "DSP28_Device.h"
#define NUM 1800
interrupt void adc_isr(void);
float fIn[NUM];
int count=0;
int k;
int flag=0;
void main(void)
{
InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
InitPeripherals();
EvaRegs.T1CNT=0;
EvaRegs.T1PR=18;
EvaRegs.GPTCONA.bit.T1TOADC=1; //下溢中断启动AD
EvaRegs.T1CON.all=0x1242; //TMODE=10,TCLKS=00,TPS=2,EVACLK=75M/4=18.75MHz,装载条件计数器值为0,使能定时器比较操作,定时器使能
InitAdc();
AdcRegs.ADCTRL3.bit.SMODE_SEL=0;
AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
AdcRegs.MAX_CONV.all=0x0;
AdcRegs.CHSELSEQ1.bit.CONV00=0x2;
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1; //使能EVASOC启动SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1; //使能SEQ1中断
EALLOW;
PieVectTable.ADCINT=&adc_isr;
EDIS;
PieCtrl.PIEIER1.bit.INTx6=1;
IER|=0x0001; //CPU级中断
EINT;
ERTM;
while ( 1 )
{
if(flag==1)
{
for(k=0;k
{
fIn[k]=fIn[k]*3/4095.0/16.0;
}
flag=0;
}
}
}
interrupt void adc_isr(void)
{
fIn[count]=AdcRegs.RESULT0;
PieCtrl.PIEACK.all=PIEACK_GROUP1;
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
count++;
if(count==NUM)
{
flag=1;
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=0;
}
}
|
|