DSP28377 -CMD文件(一)

DSP28377 -CMD文件(一)

DSP2837x_Headers_nonBIOS.cmd,该文件无论是烧写到Flash或是RAM中都可以用,在所有工程中也是通用的,其重要的作用是把外设寄存器的数据映射到对应的存储空间中,例如在F2837xD_GlobalVariableDefs.c中,一ADCA寄存器为例。

#ifdef __cplusplus

#pragma DATA_SECTION("AdcaRegsFile")

#else

#pragma DATA_SECTION(AdcaRegs,"AdcaRegsFile");

#endif

volatile struct ADC_REGS AdcaRegs;

用volatile定义变量告诉编译器该变量是变化的,该关键字的详解

由上可知AdcaRegs是一个结构体变量名其定义在F2837xD_Adc.h中,通过预处理命令#pragma为该结构体定义一个名为AdcaRegsFile的数据段。F2837x_Headers_nonBIOS_cpu1.cmd,定义如下:

MEMORY

{

 PAGE 0:    /* Program Memory */

 

 PAGE 1:    /* Data Memory */

 

   ADCA_RESULT   : origin = 0x000B00, length = 0x000020

   ADCB_RESULT   : origin = 0x000B20, length = 0x000020

   ADCC_RESULT   : origin = 0x000B40, length = 0x000020

   ADCD_RESULT   : origin = 0x000B60, length = 0x000020

 

   ADCA          : origin = 0x007400, length = 0x000080

   ADCB          : origin = 0x007480, length = 0x000080

   ADCC          : origin = 0x007500, length = 0x000080

   ADCD          : origin = 0x007580, length = 0x000080

 

   ANALOG_SUBSYS : origin = 0x05D180, length = 0x000080

  };   

SECTIONS

{

/*** PIE Vect Table and Boot ROM Variables Structures ***/

  UNION run = PIE_VECT, PAGE = 1

   {

      PieVectTableFile

      GROUP

      {

         EmuKeyVar

         EmuBModeVar

         FlashCallbackVar

         FlashScalingVar

      }

   }

 

   AdcaResultFile        : > ADCA_RESULT,  PAGE = 1

   AdcbResultFile        : > ADCB_RESULT,  PAGE = 1

   AdccResultFile        : > ADCC_RESULT,  PAGE = 1

   AdcdResultFile        : > ADCD_RESULT,  PAGE = 1

 

   AdcaRegsFile          : > ADCA,         PAGE = 1

   AdcbRegsFile          : > ADCB,         PAGE = 1

   AdccRegsFile          : > ADCC,         PAGE = 1

   AdcdRegsFile          : > ADCD,         PAGE = 1

 

}

 

在MEMORY中定义一个存储空间ADCA,它的起始地址和长度,SECTIONS伪指令把AdcaRegsFile数据段装载到名称为ADCA的存储空间中。结构体AdcaRegs的具体位置就确定了,所以通过这几层映射的关系,当向AdcaRegs写数据时即可准确的写入DSP内部寄存器所在的存储器的位置。由此看见,CMD的作用就是为程序代码和数据分配存储空间。

 

你可能感兴趣的:(dsp)