F2812存储器映射及CMD详解
CMDSPF2812电路使用说明书

中国电科第五十八研究所电路使用说明书产品型号: CMDSPF2812 产品名称: 32位定点数字信号处理器中国电科第五十八研究所一、 概述 (3)二、 功能、性能介绍 (3)三、 结构概况 (13)四、 外设 (45)五、 推荐使用环境 (74)版本修改说明修改人时间Rev.01 初始创建张猛华 2010.07.20一、 概述CMDSPF2812是高性能32位定点数字信号处理器,主时钟工作频率150MHz,单周期指令执行时间6.67ns。
该电路集成了多种先进的外设,为电机及其他运动控制领域应用的实现提供了良好的平台。
同时代码和指令与F24x系列数字信号处理器完全兼容,从而保证了项目或产品设计的可延续性。
CMDSPF2812数字信号处理器集成了256KB的Flash存储器,8KB的引导ROM,数字运算表以及2KB的OTP ROM,大大改善了应用的灵活性。
128位的密码保护机制有效地保护了产品的知识产权。
两个事件管理器模块为电机及功率变换控制提供了良好的控制功能。
16通道高性能12位ADC模数转换单元提供了两个采样保持电路,可以实现双通道信号同步采样。
CMDSPF2812使用先进TSMC 0.18微米 N阱 双多晶六层金属嵌入式Flash 工艺制造,正反向结合的设计方法完成设计,芯片最终面积为6705×6502 平方微米,设计规模达180万门。
二、功能、性能介绍2.1 功能概述2.2 CMDSPF2812主要技术特点2.3管脚及引脚说明2.1 功能概述CMDSPF2812是一种低功耗的32位定点数字信号处理器,它集中了了数字信号处理器的诸多优秀特性,它具备精简指令集计算(RISC)功能,微型控制器结构,固件及工具装置等。
数字信号处理器的特性包括改进型的哈佛结构和循环寻址方式等。
RISC特性是指单周期执行指令,寄存器到寄存器的操作以及改进型的哈佛结构(能够在冯诺依曼模式中可用)等等。
微型控制器结构则包括直观指令集操作简化、压缩和非压缩的字节应用以及的对位的操作等等。
F2812寄存器速查手册介绍

11
T1CTRIPE
当 EXTCON=0 时该位保留。 0 禁 止 T1CTRIP , T1CTPIR 不 影 响 定 时 器 1 的 比 较 输 出 、 GPTCDN(4) 或 PDPINTA(EVIFRA(0))标志。 1 使能 T1CTRIP,定时器 1 变为高阻状态,GPTCON ( 4 )变为 0, PDPINTA(EVIFRA(0)) 标志置 1。 10~ 9 8~7 T2TOADC 定时器 2 事件启动 ADC 00 不启动 ADC 01 下溢中断启动 ADC 10 周期中断启动 ADC 11 比较中断启动 ADC 定时器 1 事件启动 ADC 00 不启动 ADC 01 下溢中断启动 ADC 10 周期中断启动 ADC 11 比较中断启动 ADC 比较输出使能位,禁止或使能定时器比较输出。只有当 EXTCON ( 0 ) =1 时才激活 该位,当 EXTCON(0)=0 时该位保留。当 PDPIN/T1CTRIP 为低电平且 EVIMRA(0) =1 时激活该位,它会变为 0 0 定时器比较输出 T1/2PWM_T1/2CMPR 为高阻: 1 定时器比较输出 T 1/2PWM_T1/2CMPR 由各自的定时器比较逻辑驱动。 定时器 2 比较输出使能位,使能或禁止定时器 2 的比较输出 T2PWM_T2CMP。 EXTCON(0)=1 时激活该位, EXTCON(0)=0 时该位保留。 如果 T2CMPOE 有效, T2CTRIP 为低电平且被使能,则 T2CMPOE 变为 0 0 定时器 2 比较输出 T2PWM_T2CMP 为高阻。 1 定时器 2 比较输出 T2PWM_T2CMP 由定时器 2 比较逻辑驱动 定时器 1 比较输出使能位,使能或禁止定时器 1 的比较输出 T1PWM_T1CMP。 EXTCON(0)=1 时激活该位, EXTCON(0)=0 时该位保留。 如果 T1CMPOE 有效, T1CTRIP 为低电平且被使能,则 T1CMPOE 变为 0 0 定时器 2 比较输出 T1PWM_T1CMP 为高阻。 1 定时器 2 比较输出 T1PWM_T1CMP 由定时器 1 比较逻辑驱动 定时器 2 比较输出极性。 00 强制低 01 低有效 01 高有效 11 强制高 定时器 2 比较输出极性。 00 强制低 01 低有效 01 高有效 11 强制高
hello第四课(二)f2812存储器映射及cmd详解-日志-eyes417-

hello第四课(二):f2812存储器映射及cmd详解-日志-eyes417-...2812存储器映射2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。
32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。
其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。
 2812的存储器被划分成了下面的几个部分:1. 程序空间和数据空间。
2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。
2. 保留区。
数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。
3. CPU中断向量。
在程序空间里也保留了64个地址作为CPU 的32个中断向量。
通过CPU的一个寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。
映射和空间的统一编址 F2812内部的映射空间 2812CMD详解CMD:command 命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。
1.)#pragma ,CODE_SECTION和DATA_SECTION伪指令#pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明将funcA数据块定位于用户自定义的段"dataA"中------ 需要在CMD中指定dataA段的物理地址2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。
对于TMS320F2812的CMD文件的理解分解

对于TMS320F2812的CMD文件的理解1.COFF格式要谈CMD文件,首先不可避免的要谈下COFF格式,COFF格式是通用目标文件格式(Common Object File Format)的缩写,它是一种流行的二进制可执行文件格式,在DSP里二进制可执行文件包括库文件(.lib)、目标文件(.obj)和最终可执行文件(.out)。
详细的COFF格式文件包括段头、可执行代码、初始化数据、可重定位信息、行号入口、符号表、字符串。
对于DSP的C语言编程我们只需要了解定义段和给段分配空间即可。
采用COFF格式更利于我们对其进行模块化编程,我们可以自由的把哪些段分配到哪些空间。
2.Section(1)其次,在编写CMD文件得时候要碰到SectionS命令,SectionS命令的英文理解就有区域的意思,我们利用SectionS来将目标文件的代码放到指定的区域中。
SectionS目标文件中最小的单位我们称之为块,一个块就是最终在存储器映像中占据连续空间的一段代码或者数据。
COFF文件格式默认有三个块:.text 存放可执行代码;.data 存放已初始化数据;.bss 为未初始化数据留下的保留空间。
(2)汇编器对块的处理和设置未初始化块的设置:.bss 变量存放空间;.usect 用户自定义的未初始化段;初始化块的设置:.text 汇编指令代码.data 常数数据(比如对变量的初始化数据).sect 用户自定义的已初始化段.asect 类似于.sect,多了绝对地址定位功能,一般不用(3)C语言对块得的设置和处理未初始化块(data).bss 存放全局和静态变量.ebss 长调用的.bss(超过了64K地址限制).stack 存放C语言的栈.sysmem 存放C语言的堆.esysmem 长调用的.sysmem(超过了64K地址限制)初始化块.text 可执行代码和常数(program).switch switch语句产生的常数表格(program/低64K数据空间).pinit Tables for global constructors (C++)(program).cinit 用来存放对全局和静态变量的初始化常数值(program).const 全局和静态的const变量初始化值和字符串常数,(data).econst 长.const(可定位到任何地方)(data)(4)C语言自定义块#pragma DATA_SECTION(函数名或者全局变量名,“用户自定义在数据空间的段名”);#pragma CODE_SECTION(函数名或者全局变量名,“用户自定义在程序空间的段名”);必须注意:不能在函数体内声明,必须在定义和使用前声明。
TMS320F2812DSP学习

TMS320F28121 上电注意1)TMS320LF24xx:TPS7333QD,5V变3.3V,最大500mA2)JTAG中有四条地线,和P1(哈丁48输入ADC)中5v的地是联通的说明是由5v 供电的3)JTAG中的两条TCK是相同的4)P1中的每个输入有一个备用的5)电源连接后一定要检测,确保正、负极正确连接6)上电后不用示波器或者万用表点测,否则极易短路,如需,则上电之前用线焊上连出,将示波器探头连好7)送电之前一定用万用表测量电源和地是否短路8)连线务必焊接牢固,防止虚焊,否则易有过冲9)确保连出的线头不会短路,操作过程中不会互相碰触10)所有线头挂锡,否则相连太近的线头毛刺易短路10)仿真器不能热插拔11)加入的信号一定要确保在板子的额定之内,如AD电压不超过3V等2 仿真器驱程安装和ccs设置仿真器型号:USB2.0操作系统:WIN98,WINNT,WIN2000CPU:C2000,C5000,C6000口地址:0x240安装过程如下:1.首先安装USB驱动,与安装其它硬件类似。
2. 安装其它程序,运行SETUP即可。
1)仿真器作用:主要是通过仿真器将DSP开发板与电脑连接,这样所编写的程序才能写入DSP芯片,以及在计算机上通过软件(CCS软件)调试DSP开发板,没有仿真器几乎做不了什么(高手可能出外),现在仿真器一般都是USB接口的,比如XDS510DSP仿真器等等,可以对各种系列DSP使用。
开发板按照板上的DSP芯片信号又分为:2000系列(一般自动控制用),5000系列(一般数字信号处理用),6000系列(一般图像处理用)2)USB 仿真器的安装及设置(1)点击光盘中文件Techusb USB 仿真器安装“USB——SETUP.EXE”.(2)点击下一步;(3)点击下一步;(4)USB驱动安装了,再检测USB与计算机连接是否正常,点击“USB20EMURST.EXE”按“RESET(R)”键,出现如上图标则表示正确。
F2812 CMD文件理解

F2812内部的映射空间:2812的CMD采用分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间;在CMD文件里有两个基本的段:初始化段和非初始化段。
初始化段包含代码和常数等必须在DSP上电之后有效的数。
故初始化块必须保存在片内FLASH等非易失性存储器,非初始化段中含有在程序运行过程中才像变量内写数据进去,所以非初始化段必须链接到非易失性存储器中如RAM。
已初始化段包括:.text,.cinit,.const,.pinit和.switch.text:所有可以执行的代码和常量.cinit:全局变量和静态变量的C初始化记录.const:包含字符串常量和初始化的全局变量和静态变量(由const)的初始化和说明.econst:包含字符串常量和初始化的全局变量和静态变量(由far const)的初始化和说明.pinit:全局构造器(C++)程序列表.switch:包含转换语气声明的列表非初始化的段:.bss,.ebss,.stack,.sysmem,.esysmem(即存储空间).bss:为全局变量和局部变量保留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.bss空间.ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.ebss中.stack:为系统堆栈保留的空间,主要用于和函数传递变量或为局部变量分配空间.sysmem:为动态存储分配保留的空间。
若有宏函数,此空间被宏函数占用,如果没有的话,此空间保留为0.esysmem:为动态存储分配保留的空间。
若有far函数,此空间被相应占用,如果没有的话,此空间保留为0存储类型总结:#pragma是标准C中保留的预处理命令,程序员可以通过#pragma来定义自己的段,#pragma的语法:#pragma CODE_SECTION (symbol,"section name”);#pragma CODE_SECTION (symbol,"section name”);说明:1. symbol是符号,可以上函数名也可以是全局变量;section name是用户自己定义的段名。
2812存储器映射

2812存储器映射2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。
32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。
其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。
2812的存储器被划分成了下面的几个部分:1. 程序空间和数据空间。
2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。
2. 保留区。
数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。
3.CPU中断向量。
在程序空间里也保留了64个地址作为CPU的32个中断向量。
通过CPU 寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。
映射和空间的统一编址F2812内部的映射空间低地址空间高地址空间2812CMD详解CMD:command命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。
1.)#pragma ,CODE_SECTION和DA TA_SECTION伪指令#pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明将funcA数据块定位于用户自定义的段"dataA"中 ------ 需要在CMD中指定dataA段的物理地址2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。
MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。
TMS320F2812的CMD文件配置详解

TMS320F2812的CMD文件配置详解1存储空间的配置dsp交流网dsp学习第一论坛dsp技术应用与推广平台dsp开发服务平台\TMS320F2812的DSP内存分为三个独立选择的空间——程序空间、数据空间和I/O空间。
程序存储器存储要执行的指令和执行中使用的系数(常数),可以由片内或片外ram、ROM或EPROM组成;数据存储器存储指令执行期间生成的数据,这些数据可以在芯片内或芯片外使用的ram和rom来构成;i/o存储器存放与映象外围接口相关的数据,也可以作为附加的数据存储空间使用。
表1是tms320f2812的存储空间分布。
#p5r)e7[*e!s2cmd文件的分配方法TI新的汇编程序和链接器创建的目标文件采用coff(通用目标文件格式),这更有利于模块化编程,并为管理代码段和目标系统内存提供了强大而灵活的编程方法。
用户可以编写一个链接命令文件(.CMD文件),将链接信息放在一个文件中,以便在多次使用同一链接信息时调用它。
在命令文件中,使用了两条非常有用的伪指令“内存”和“内存”部分来指定实际应用中的内存结构和地址映射。
内存用于指定目标内存结构。
在内存下,可以通过页面选项配置地址空间。
链接器将每个页面视为独立的存储空间。
通常,Page0表示用于存储程序的程序内存,page1表示用于存储数据的数据内存。
编译器生成的可重定位代码和数据块称为被初始化的“sections”(包括数据表和可执行代码).text它包括所有的可执行代码和常数,必须放在程序页;.cinit它包括初始化的变量和常量表,要求放在程序页;.econst在使用大内存模式时使用,包括字符串、声明和显式初始化的全局和静态变量,这些变量可以放在数据页的任何位置。
DSP交流开关,包括用于转换声明的表格集,可以放在低地址的程序页或数据页上。
h2_u$?;d9e$l:o5k(2)未被初始化的“sections”(为程序运行中创建和存放的变量在存储器中保留空间)9d3a.\\'x7e)m;a'c.BSS,为全局变量和静态变量保留空间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2812存储器映射及CMD
2812存储器映射
2812具有32位的数据地址和22位的程序地址,总地址空间可以达到4M的数据空间和4M的程序空间。
32位的数据地址,就是能访问2的32次,是4G,而22位的程序地址,就是能访问2的22次,是4M。
其实,2812可寻址的数据空间最大是4G,但是实际线性地址能达到的只有4M,原因是2812的存储器分配采用的是分页机制,分页机制采用的是形如0 xXXXXXXX的线性地址,所以数据空间能寻址的只有4M。
2812的存储器被划分成了下面的几个部分:
1. 程序空间和数据空间。
2812所具有的RAM、ROM和FLASH都被统一编址,映射到了程序空间和数据空间,这些空间的作用就是存放指令代码和数据变量。
2. 保留区。
数据空间里面某些地址被保留了,作为CPU的仿真寄存器使用,这些地址是不向用户开放的。
3.CPU中断向量。
在程序空间里也保留了64个地址作为CPU的32个中断向量。
通过CPU寄存器ST1中的VMAP位来将这一段地址映射到程序空间的底部或者顶部。
映射和空间的统一编址
F2 812内部的映射空间
低地址空间
高地址空间
2812CMD详解
CMD:command命令,顾名思义就是命令文件指定存储区域的分配.2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而PAGE1用于存放数据空间。
1.)#pragma ,CODE_SECTION和DATA_SECTION伪指令
#pragma DATA_SECTION(funcA,"dataA"); ------ 函数外声明
将funcA数据块定位于用户自定义的段"dataA"中 ------ 需要在CMD中指定dataA段的物理地址
2.)MEMORY和SECTIONS是命令文件中最常用的两伪指令。
MEMORY伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。
SECTIONS伪指令是用来描述输入端是如何组合到输出端内的。
以常用的F2812_nonBIOS_RAM.cmd F2812_nonBIOS_Flash.cmd 和 DSP281x_Heade rs_nonBIOS.cmd为例
F2812_nonBIOS_RAM.cmd ----- 用于仿真,无BIOS系统,片外SRAM配置
CMD文件里有两个基本的段:初始化段和非初始化段。
初始化段包含代码和常数等必须在D SP上电之后有效的数。
故初始化块必须保存在如片内FLASH等非遗失性存储器中,非初始化段中含有在程序运行过程中才像变量内写数据进去,所以非初始化段必须链接到易失性存储器中如RAM。
已初始化的段:.text,.cinit,.const,.econst,..pinit和.switch..
.text:所有可以执行的代码和常量
.cinit:全局变量和静态变量的C初始化记录
.const:包含字符串常量和初始化的全局变量和静态变量(由const)的初始化和说明
.econst:包含字符串常量和初始化的全局变量和静态变量(由far const)的初始化和说明
.pinit:全局构造器(C++)程序列表
.switch:包含switch声明的列表
非初始化的段:.bss,.ebss,.stack,.sysmem,和esysmem.(更好的理解就是,这些段就是存储空间而已)
.bss: 为全局变量和局部变量保留的空间,在程序上电时.cinit空间中的数据复制出来并存储在.bss空间中。
.ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,cinit 空间中的数据复制出来并存储在.ebss中
.stack:为系统堆栈保留的空间,用于和函数传递变量或为局部变量分配空间。
.sysmem:为动态存储分配保留的空间。
如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留为0
.esysmem:为动态存储分配保留的空间。
如果有far函数,此空间被相应的占用,如果没有的化,此空间保留为0.
F2812_nonBIOS_Flash.cmd --- 用于无BIOS,从片内FLASH引导
对于程序在FLASH中运行时,需要注意的: DSP在150M时钟频率下,FLASH中只能提供大约120M的时钟频率,所以有时候我们希望在RAM中运行时间敏感或计算量很大的子程序(比如AD采样)。
但是我们所有代码都放在FLASH中,这就必须在上电后将FLASH中的这段敏感程序复制到RAM中运行,加快速度。
这是在.CMD文件就必须划分一段用来设置RAM的载入和运行地址。
程序代码如下:
SECTIONS {………
ramfuncs : LOAD = FLASHD,
RUN = RAML0,
LOAD_START(_RamfuncsLoadStart),
LOAD_END(_RamfuncsLoadEnd),
RUN_START(_RamfuncsRunStart),
PAGE = 0
}
DSP281x_Headers_nonBIOS.cmd ----- 用于无BIOS,外设寄存器产生的数据段映射至对应的存储器空间
cmd小技巧:
如果.text文件很大将其放在一段放不下,需将其放到两个程序段中 最长的一个length=0x002000,也放不下时.可以这样处理:
PAGE 0 :
PRAMH0 : origin = 0x3F8002, length = 0x0014FE L0RAM : origin = 0x008000, length = 0x001000
SECTIONS
.text:{*(.text)} >>PRAMH0|L0RAM
这样就可以将.text文件放在两个定义段中。
查看段的分配及使用情况.map的链接器(存储器)分配映射文件,链接器的map文件描述以下内容:通过map文件可以查看各段的分配情况,包括段的起始地址,使用的字节数等配合cmd文件的使用,可确定各个段的使用情况,从而保证程序的正常运行和最小的空间使用。
VisualLinker可视化链接器TI公司出品的DSP软件开发环境CCS还提供了一种可视化生成存储器配置文件的工具:VisualLinker可视化链接器。
如果程序原来包含了一个链接器命令文件(.cmd文件),则当创建可视化链接文件的时候,原来cmd文件中的内存配置仍然会被使用。
如果读者想修改内存配置,双击.rcp文件就会在CCS中打开可视化链接器的图形界面,调整每个内存模块的大小,直到认为合适,然后只需要重新连编,程序即可生成新的输出文件,重复上面的步 骤,直到出现满意的结果。