DSP28335
?/p>
CMD
解读?/p>
1
?/p>
?/p>
DSP28335
工程文件里(不用
BIOS
产生
CMD
文件),手写
CMD
文件一般有两个,在
RAM
里调试时
用的两个
CMD
文件分别?/p>
DSP2833x_Headers_nonBIOS.cmd
?/p>
28335_RAM_lnk.cmd
?/p>
烧写?/p>
flash
里时?/p>
的两?/p>
CMD
文件分别?/p>
DSP2833x_Headers_nonBIOS.cmd
?/p>
F28335.cmd
,其?
DSP2833x_Headers_nonBIOS.cmd
文件可以在所有工程文件中通用?/p>
主要作用是把外设寄存器产生的数据?/p>
映射到对应的存储空间,可以跟
DSP2833x_GlobalVariableDefs.c
文件对照一下看看。下面通过一个简单例
子,
比如?/p>
CpuTimer0Regs. TIM.all
写数据,
来解读一?/p>
CMD
文件是如何把寄存器里的值准确映射到所?/p>
存储器的位置的?/p>
先在
DSP2833x_GlobalVariableDefs.c
文件里找到以下几行代码:
#ifdef __cplusplus
#pragma DATA_SECTION("CpuTimer0RegsFile")
#else
#pragma DATA_SECTION(CpuTimer0Regs,"CpuTimer0RegsFile");
#endif
volatile struct CPUTIMER_REGS CpuTimer0Regs;
由上可知
CpuTimer0Regs
是一个结构体变量?/p>
(其定义?/p>
DSP2833x_CpuTimers.c
文件里)
?/p>
通过预处理命
?/p>
#pragma
为这个结构体定义了一个名称为
CpuTimer0RegsFile
的数据段?/p>
接着?/p>
DSP2833x_Headers_nonBIOS.cmd
文件里找到如下代码:
SECTIONS
{
PieVectTableFile : > PIE_VECT, PAGE = 1
DevEmuRegsFile : > DEV_EMU, PAGE = 1
FlashRegsFile : > FLASH_REGS, PAGE = 1
CsmRegsFile : > CSM, PAGE = 1
AdcMirrorFile : > ADC_MIRROR, PAGE = 1
XintfRegsFile : > XINTF, PAGE = 1
CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1
......
}
红字体代码的作用就是,通过
SECTIONS
伪指令把
CpuTimer0RegsFile
数据段装载到名称?/p>
CPU_TIMER0
的存储空间?/p>
同样?/p>
DSP2833x_Headers_nonBIOS.cmd
文件里找到如下代码:
MEMORY
{
PAGE 0:
PAGE 1:
DEV_EMU : origin = 0x000880, length = 0x000180
FLASH_REGS : origin = 0x000A80, length = 0x000060