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.

有关ADC程序的移植

Other Parts Discussed in Thread: CONTROLSUITE

问题是这样的,我需要用28335的ADC模块建立一个可以对电机电流进行检测的工程。我这有ADC的现成的程序,想通过将这个程序移植到新的工程中得到。对新建的工程文件进行配置之后,将ADC文件复制后放到了主函数中,详细的程序内容在附件中

main.c
	/*
	 * 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;
	}
	 }
	}
}
,因为刚接触28335,还有好多不理解的地方,我把程序编译完成后出现了几个错误,对于ccs中的错误是完全看不懂,一头雾水,想让大家帮我看看如何解决这一问题。谢谢

  • 关于flash搬移ram运行的问题可以参考controlsuite中的f28335_flash例程:
    如果您定义了RAM函数,如TI公司头文件中自带InitFlash函数,这些函数会以CODE_SECTION申明。如下
    #pragma CODE_SECTION(InitFlash, "ramfuncs");
    在CMD文件中的SECTIONS段中应该有下面这样的说明
    ramfuncs : LOAD = FLASHD,
    RUN = RAML0,
    LOAD_START(_RamfuncsLoadStart),
    LOAD_END(_RamfuncsLoadEnd),
    RUN_START(_RamfuncsRunStart),
    PAGE = 0
    在您的C文件中应该有外部变量的申明。如下
    extern Uint16 RamfuncsLoadStart;
    extern Uint16 RamfuncsLoadEnd;
    extern Uint16 RamfuncsRunStart;
    最重要的下面的函数调用
    InitFlash();
    MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);

  • 出现未定义的了 应该是头文件没包含对 或者函数什么与定义的顺序不对
    等原因