DSP28335学习笔记-CMD文件

配置了寄存器的参数就能让DSP运行起来,DSP是如何运转起来的呢?

说到底,让一个单片机运行起来,就是在相应的空间上写上1或者0。我找了一个寄存器的设置,引发了对DSP是怎么运行起来的思考,并介绍CMD文件。

1.  GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;   该语句是配置GPIO0是否复用,配置为0代表不复用。查阅使用手册,该寄存器位于0x6f86,

去翻阅说明书查阅0x6f86在片上的位置。就不得不提这个经典的内存映射图。

0x6f86就位于0x00 6000和0x00 7000之间。名称是Peripheral Frame1(Protected),外设帧1(受保护)。那就明白了,就是TI给分配好了寄存器配置时放置的位置,分别放置在0x00 0800起始的外设帧0,0x00 E000起始的外设帧0,0x00 5000起始的外设帧1、2、3.具体的映射位置需要查看手册。那么我们是怎么映射的呢?依靠的是cmd文件。

2.   DSP28335有三个cmd文件,分别是F28335.cmd、28335_RAM_Lnk.cmd、DSP2833x_Headers_nonBIOS.cmd,在调试时,只使用28335_RAM_Lnk.cmd,程序调试完成,需要下载到DSP芯片时,使用F28335.cmd,这两个cmd文件只能使用一个,不然编译不通过。

F28335.cmd编译下载慢,28335_RAM_Lnk.cmd编译下载快,且可以在线debug。DSP2833x_Headers_nonBIOS.cmd分配寄存器的位置,这个文件是必要文件,不然无法编译通过,编译器经过这个文件,把程序中涉及的程序和数据写到片上的存储空间。那么先研究一下DSP2833x_Headers_nonBIOS.cmd。

上面两张图片是截的DSP2833x_Headers_nonBIOS.cmd,可以查到

 GpioCtrlRegsFile  : > GPIOCTRL     PAGE = 1

就是把GpiooCtrlRegFile文件上的数据寄存器内容映射到GPIOCTRL 上,PAGE = 1。

在MEMORY上,GPIOCTRL位于

GPIOCTRL    : origin = 0x006F80, length = 0x000040     /* GPIO control registers */

这个正好和说明书上的地址对应上。

在c文件中有一个DSP2833x_GlobalVariableDefs.c文件,这个文件构成了cmd文件和外设寄存器配置的c文件之间的桥梁。

#pragma DATA_SECTION是伪代码,如#pragma DATA_SECTION(CpuTimer0Regs,"CpuTimer0RegsFile");将CpuTimer0Regs“指向”CpuTimer0RegsFile,在DSP2833x_Headers_nonBIOS.cmd中,CpuTimer0RegsFile映射到CPU_TIMER0,  PAGE = 1,CPU_TIME0, PAGE = 1在MEMORY中,CPU_TIMER0  : origin = 0x000C00, length = 0x000008,在配置寄存器就完成了定时器的配置。

那么我们认为,我们按照要实现的功能,编辑好C语言,编译器将各个文件中涉及的寄存器,指向存储器对应的空间,完成芯片各种外设寄存器设置,在DSP工作时,驱动各个外设功能。

3.  除了DSP2833x_Headers_nonBIOS.cmd,还有F28335.cmd、28335_RAM_Lnk.cmd

这两个文件区别在于,28335_RAM_Lnk.cmd用于调试,F28335.cmd用于下载到Flash。如果查看两个文件的MEMORY,都是裁剪了芯片的程序(PAGE0)和数据(PAGE1)空间。依据都是内存映射图。都可以看的懂,主要介绍一下SECTIONS部分。

文件区别:

         F28335.cmd                                                                        28335_RAM_Lnk.cmd

区别就在于F28335.cmd把一些数据写到RAM中,28335_RAM_Lnk.cmd把一些数据写道FLASHB中。那么这些都是什么含义?摘录一段CSDN上博主的介绍如下:

1、已初始化的段
.text 编译C语言中的语句时,生成汇编指令代码存放于此。
.cinit 存放用来对全局和静态变量初始化的常数。
.const 包含字符串常量和全局变量、静态变量(由const声明)的初始化及说明。
.econst 包含字符串常量和全局变量、静态变量(由far const声明)的初始化及说明。
.pinit 全局构造器(C++)程序列表。
.switch 存放switch语句产生的常数表格。
2、未初始化的段
.bss 为全局变量和局部变量保留的空间。在程序上电时,.cinit空间中的数据复制出来并存储在.bss空间。
.ebss 为使用大寄存器莫实时的全局变量和静态变量保留的空间。在程序上电时,.cinit空间中的数据复制出来并存储在.ebss空间。
.stack 为系统堆栈保留的空间,主要用于与函数传递变量或为局部变量分配空间。
.system 为动态存储分配包保留的空间。如果有宏函数,此空间被宏函数占用;如果没有此空间保留0。
.esystem 为动态存储分配包保留的空间。如果有far函数,此空间被宏函数占用;如果没有此空间保留0。

CMD文件详解--基于TI DSP F28335_28335 cmd文件-CSDN博客

有时候在编译程序时会报一些有关这些东西的报错,意思是空间不足,我们可以通过修改空间大小和映射来解决问题。这种操作相当于扩展内存,因为DSP的FLASH是连着的,我们对FLASHB进行了映射,对FLASHC、FLASHD、FLASHE、FLASHF、FLASHG、FLASH并没有进行映射,因此可以作为扩展。同时在数据的存储时,也可以利用这些空间。

以上就是我对CMD文件的介绍。

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值