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的作用就是为程序代码和数据分配存储空间。