问题是这样的,我需要用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; } } } }