问题是这样的,我需要用28335的ADC模块建立一个可以对电机电流进行检测的工程。我这有ADC的现成的程序,想通过将这个程序移植到新的工程中得到。对新建的工程文件进行配置之后,将ADC文件复制后放到了主函数中,详细的程序内容在附件中
/*
* ADC.c
*
* Created on: 2015-10-8
* Author: Gene
*/
// $Boot_Table:
//
// GPIO87 GPIO86 GPIO85 GPIO84
// XA15 XA14 XA13 XA12
// PU PU PU PU
// ==========================================
// 1 1 1 1 Jump to Flash
// 1 1 1 0 SCI-A boot
// 1 1 0 1 SPI-A boot
// 1 1 0 0 I2C-A boot
// 1 0 1 1 eCAN-A boot
// 1 0 1 0 McBSP-A boot
// 1 0 0 1 Jump to XINTF x16
// 1 0 0 0 Jump to XINTF x32
// 0 1 1 1 Jump to OTP
// 0 1 1 0 Parallel GPIO I/O boot
// 0 1 0 1 Parallel XINTF boot
// 0 1 0 0 Jump to SARAM <- "boot to SARAM"
// 0 0 1 1 Branch to check boot mode
// 0 0 1 0 Boot to flash, bypass ADC cal
// 0 0 0 1 Boot to SARAM, bypass ADC cal
// 0 0 0 0 Boot to SCI-A, bypass ADC cal
//
#include "DSP28x_Project.h"
//#define ADC_MODCLK 0x3 //������ʱ��Ԥ��������ֵ
#define ADC_KPS 0x1 //ADC�ں�ʱ�ӷ�Ƶ��
#define ADC_SHCLK 0xf //����SOC������
#define AVG 100
//#define ZOFFSET 0x00
#define BUF_SIZE 100
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
#endif
#if (CPU_FRQ_100MHZ)
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
#endif
// ���ADC0-ADC3������
Uint16 SampleTable[BUF_SIZE];
Uint16 SampleTable1[BUF_SIZE];
Uint16 SampleTable2[BUF_SIZE];
Uint16 SampleTable3[BUF_SIZE];
Uint16 SampleTable4[BUF_SIZE];
float32 result=0.0;
Uint32 sum=0;
float32 result1=0.0;
Uint32 sum1=0;
float32 result2=0.0;
Uint32 sum2=0;
float32 result3=0.0;
Uint32 sum3=0;
float32 result4=0.0;
Uint16 sum4=0;
/*
* main.c
*/
int main(void) {
{
Uint16 i,m;
InitSysCtrl(); //��ʼ��PLL, WatchDog, enable Peripheral Clocks
//���ø���ʱ��Ԥ��������ֵ
EALLOW;
SysCtrlRegs.HISPCP.all=ADC_MODCLK; //����ʱ��Ƶ������Ϊ25MHz
EDIS;
DINT;
InitPieCtrl(); //��ʼ��PIE���ƼĴ�����ȱʡ״̬��Ĭ��״̬����Ĭ��ȱʡ״̬�������е�PIE�ж϶��ǽ�ֹ״̬�����еı�־λ������
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();
InitAdc();
AdcRegs.ADCTRL1.bit.ACQ_PS=ADC_SHCLK;
AdcRegs.ADCTRL1.bit.CPS=0;
AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
AdcRegs.ADCTRL1.bit.CONT_RUN=1;
AdcRegs.ADCTRL3.bit.ADCCLKPS=ADC_KPS;
AdcRegs.ADCMAXCONV.all=0x04;
AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;
AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2;
AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3;
AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4;
result=0;result1=0;result2=0;result3=0;result4=0;
sum=0;sum1=0;sum2=0;sum3=0;sum4=0;
for(i=0;i<BUF_SIZE;i++)
{
SampleTable[i] = 0;
SampleTable1[i] = 0;
SampleTable2[i] = 0;
SampleTable3[i] = 0;
SampleTable4[i] = 0;
// result[i]=0.0;
}
while(1)
{
AdcRegs.ADCTRL2.all=0x2000;
for (i=0; i<AVG; i++)
{
// while(AdcRegs.ADCST.bit.INT_SEQ1);
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
SampleTable[i]=(AdcRegs.ADCRESULT0>>4);
SampleTable1[i]=(AdcRegs.ADCRESULT1>>4);
SampleTable2[i]=(AdcRegs.ADCRESULT2>>4);
SampleTable3[i]=(AdcRegs.ADCRESULT3>>4);
SampleTable4[i]=(AdcRegs.ADCRESULT4>>4);
// result[i]=((float32)SampleTable[i])*3/4095;
}
// ����ƽ����
if(i==100)
{
sum=0;
sum1=0;
sum2=0;
sum3=0;
sum4=0;
for(m=0;m<AVG;m++)
{
sum+=SampleTable[m];
sum1+=SampleTable1[m];
sum2+=SampleTable2[m];
sum3+=SampleTable3[m];
sum4+=SampleTable4[m];
}
result=((float32)sum)*3/409500;
result1=((float32)sum1)*3/409500;
result2=((float32)sum2)*3/409500;
result3=((float32)sum3)*3/409500;
result4=((float32)sum4)*3/409500;
}
}
}
}