云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > DSP28335—CMD文件解读(映射关系) - 图文

DSP28335—CMD文件解读(映射关系) - 图文

  • 62 次阅读
  • 3 次下载
  • 2025/6/26 3:28:38

DSP28335—CMD解读(1)

在DSP28335工程文件里(不用BIOS产生CMD文件),手写CMD文件一般有两个,在RAM里调试时用的两个CMD文件分别为DSP2833x_Headers_nonBIOS.cmd和28335_RAM_lnk.cmd,烧写到flash里时用的两个CMD文件分别为DSP2833x_Headers_nonBIOS.cmd和F28335.cmd,其中

DSP2833x_Headers_nonBIOS.cmd文件可以在所有工程文件中通用,主要作用是把外设寄存器产生的数据段映射到对应的存储空间,可以跟DSP2833x_GlobalVariableDefs.c文件对照一下看看。下面通过一个简单例子,比如向CpuTimer0Regs. TIM.all写数据,来解读一下CMD文件是如何把寄存器里的值准确映射到所在存储器的位置的。

先在DSP2833x_GlobalVariableDefs.c文件里找到以下几行代码: #ifdef __cplusplus

#pragma DATA_SECTION(\#else

#pragma DATA_SECTION(CpuTimer0Regs,\#endif

volatile struct CPUTIMER_REGS CpuTimer0Regs;

由上可知CpuTimer0Regs是一个结构体变量名(其定义在DSP2833x_CpuTimers.c文件里),通过预处理命令#pragma 为这个结构体定义了一个名称为CpuTimer0RegsFile的数据段。 接着在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数据段装载到名称为CPU_TIMER0的存储空间。

同样在DSP2833x_Headers_nonBIOS.cmd文件里找到如下代码: MEMORY {

PAGE 0: PAGE 1:

DEV_EMU : origin = 0x000880, length = 0x000180 FLASH_REGS : origin = 0x000A80, length = 0x000060

CSM : origin = 0x000AE0, length = 0x000010

ADC_MIRROR : origin = 0x000B00, length = 0x000010 XINTF : origin = 0x000B20, length = 0x000020

CPU_TIMER0 : origin = 0x000C00, length = 0x000008 ...... }

CPU_TIMER0存储空间通过MEMORY伪指令指示了其起始地址和长度,也就等于间接确定了结构体CpuTimer0Regs的具体位置,所以通过以上几层映射关系,当向CpuTimer0Regs. TIM.all写数据时就可以准确的写入DSP内部寄存器所在的存储器的位置。由此看见,CMD的作用就是为程序代码和数据分配存储空间。本节先针对DSP2833x_Headers_nonBIOS.cmd文件做一下解读,后续再分别解读一下CMD用于调试和烧写时需要注意哪些问题。

另外有关volatile关键字的解读可参考http://blog.sina.com.cn/s/blog_762cf5f80101aosq.html

本文原创,与同样在努力学习DSP的你共享~

如有错,请指出~O(∩_∩)O谢谢

在nonBIOS情况下,CMD文件不外乎就三个:28335_RAM_lnk.cmd(用于仿真调

试) 、 DSP2833x_Headers_nonBIOS.cmd 、 F28335.cmd(用于flash烧写)。仿真调试时只用前两个,用于flash烧写时只用后两个,且不管在何种方式下28335_RAM_lnk.cmd和F28335.cmd不能同时用,也不能代替用。

在DSP28335—CMD文件解读(1)中,已经介绍过DSP2833x_Headers_nonBIOS.cmd 。

在用28335_RAM_lnk.cmd时,一般情况下直接用TI给的,不需要做修改即可满足调试用,模式较固定,当然你也可以做相应的修改用到哪块RAM存储空间,在CMD文件里做相应的分配即可。

MEMORY {

PAGE 0 :

BEGIN : origin = 0x000000, length = 0x000002

BOOT_RSVD : origin = 0x000002, length = 0x00004E RAMM0 : origin = 0x000050, length = 0x0003B0

RAML : origin = 0x008000, length = 0x004000

ZONE7A : origin = 0x200000, length = 0x00FC00

CSM_RSVD : origin = 0x33FF80, length = 0x000076 CSM_PWL : origin = 0x33FFF8, length = 0x000008 ADC_CAL : origin = 0x380080, length = 0x000009 RESET : origin = 0x3FFFC0, length = 0x000002 IQTABLES : origin = 0x3FE000, length = 0x000b50 IQTABLES2 : origin = 0x3FEB50, length = 0x00008c FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0

BOOTROM : origin = 0x3FF27C, length = 0x000D44 PAGE 1 :

RAMM : origin = 0x000400, length = 0x000400

RAMH : origin = 0x00C000, length = 0x004000 ZONE6B : origin = 0x13FC00, length = 0x000400

ZONE7B : origin = 0x20FC00, length = 0x000400 }

SECTIONS {

codestart : > BEGIN, PAGE = 0 ramfuncs : > RAML, PAGE = 0 .text : > RAML, PAGE = 0 .cinit : > RAML, PAGE = 0 .pinit : > RAML, PAGE = 0 .switch : > RAML, PAGE = 0

.stack : > RAMM, PAGE = 1 .ebss : > RAMH, PAGE = 1 .econst : > RAMH, PAGE = 1 .esysmem : > RAMM, PAGE = 1

IQmath : > RAML, PAGE = 0

IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD

ZONE7DATA : > ZONE7B, PAGE = 1 ZONE6DATA : > ZONE6B, PAGE = 1

.reset : > RESET, PAGE = 0, TYPE = DSECT

csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT

.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD }

而编写用于flash烧写的F28335.cmd文件时相对来说较复杂些,根据不同的情况需要做一些修改。

1 不需要把部分代码copy到RAM里,一般情况不需要外扩RAM等时直接用TI的F28335.cmd即可。

2 需要把部分代码从flash 复制到RAM里,如延时函数DSP2833x_usDelay.asm等,这时CMD文件需要做相应的修改,具体参考博文:http://blog.sina.com.cn/s/blog_762cf5f80101asmq.html

3 从时间开销方面考虑,需要把整个程序从flash复制到RAM里,这时程序及CMD文件都要做相应的修改,具体参考博文http://blog.sina.com.cn/s/blog_762cf5f80101apfx.html

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

DSP28335—CMD解读(1) 在DSP28335工程文件里(不用BIOS产生CMD文件),手写CMD文件一般有两个,在RAM里调试时用的两个CMD文件分别为DSP2833x_Headers_nonBIOS.cmd和28335_RAM_lnk.cmd,烧写到flash里时用的两个CMD文件分别为DSP2833x_Headers_nonBIOS.cmd和F28335.cmd,其中DSP2833x_Headers_nonBIOS.cmd文件可以在所有工程文件中通用,主要作用是把外设寄存器产生的数据段映射到对应的存储空间,可以跟DSP2833x_GlobalVariableDefs.c文件对照一下看看。下面通过一个简单例子,比如向CpuTimer0Regs. TIM.all写数据,来解读一下CMD文件是如何把寄存器里的值准确映射到所在存储器的位置的。

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com