第三章F2812片内资源、存储器映射以及CMD文件的编写

合集下载

hello第四课(二)f2812存储器映射及cmd详解-日志-eyes417-

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是命令文件中最常用的两伪指令。

3.3 F2812主要功能简介-事件管理器

3.3  F2812主要功能简介-事件管理器

PWM输出对,之间的死区时间可编程设置 最小死区宽度 = 1个CPU时钟周期 最小脉宽 = 最小调整量 = 1个CPU时钟周期 PWM最大分辨率 = 16bit 可快速改变PWM的载波频率 可快速改变PWM的脉宽 功率驱动保护中断 可编程产生非对称/对称/空间矢量PWM波形 比较寄存器、周期寄存器可自动装载,减小CPU开销
PWM输出逻辑
连续增/减计数模式
周期内 第一次 比较匹配前 比较输出 不变 GPTCONA/B设置 X PWM输出 不变
第一次 比较匹配时
第二次 比较匹配时 第二次 比较匹配后
Active
Inactive
高有效 低有效 高有效 低有效 X 强制高 强制低
高 低 低 高 不变 立即高 立即低
不变
PWM输出高阻
条件

软件禁止比较输出:清GPTCONA/B[6]
功率保护中断请求: 引脚PDPINTx有效,且中断未屏蔽 任何一个复位信号

软件禁止比较器:
清TxCON[1]
问题
功率保护中断有什么作用? 两个“软件禁止比较……”,差别?
GP Timer Active时间计算
连续增计数模式

1 增计数 0 减计数
GP Timer Clock
可采用内部时钟或外部时钟TCLKINA/B引脚输入 外部时钟频率≤1/4 CPU时钟 定向增/减计数模式:

T2、T4为QEP电路使用 QEP电路为定时器提供时钟、方向输入
基于QEP电路的时钟输入

QEPCLK为T1的时钟输入 预标定阐述≡1 计数器在上升/下降沿均计数 QEP产生的时钟频率是每个QEP输入通道的4倍 QEP时钟频率应≢1/4 CPU时钟

第3章TMS320F2812驱动程序设计学习要点

第3章TMS320F2812驱动程序设计学习要点

第3章 TMS320F2812驱动程序设计【本章要点】了解TMS320F2812驱动程序的特点了解TMS320F2812位字段的描述方法掌握TMS320F2812驱动程序的框架结构掌握CCS集成开发环境的应用1.驱动程序的概念:TMS320F2812处理器的驱动程序在这里实际上就是指一段能让CPU控制片内各种功能模块正常工作的程序代码。

如果我们不对片内的功能模块进行编程驱动,那么时钟系统、定时器、片内外设等硬件就无法工作,这个芯片就不能发挥其特有的功效了。

换言之,TMS320F2812处理器驱动程序的开发就是通过设置片内的各功能模块,将其本身的功能激发出来,从而保证芯片能正常地工作。

2.TI公司C28x DSPs常用代码库文件(了解)库 名 文档编号 说 明C281xC/C++头文件和外设示例SPRC097外设API驱动程序TMS320F2812闪存API SPRC125对Flash进行操作的APIC28x 定点数学函数库SPRC085包含常用的基本数学函数C28x IQMath库(虚拟浮点引擎)SPRC087将浮点算法无缝地连接到定点代码中 C28x 快速傅立叶变换程序库SPRC081提供可供调用的FFT函数C28x 滤波器库SPRC082提供FIR及IIR模块C28x 软件测试台库SPRC084提供基于实时应用的密集计算模块C28x 通信驱动程序库SPRC183虚拟的IIC总线及SPI总线驱动C28x 信号发生器库SPRC083包含正弦波、锯齿波、梯形脉冲发生器 F281x 数字电机控制程序库SPRC080帮助开发数字电机控制,比如空间矢量发生器PFC Software SPRC307帮助开发数字控制电源S V2.2版本开发环境下的TMS320F2812处理器驱动程序开发包,这个开发包的名称是“C281x C/C++ 头文件及片内外设应用示例(C281x C/C++ Header Files and Peripheral Examples)”,安装后的文件结构如图所示。

对于TMS320F2812的CMD文件的理解分解

对于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(函数名或者全局变量名,“用户自定义在程序空间的段名”);必须注意:不能在函数体内声明,必须在定义和使用前声明。

F2812 CMD文件理解

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存储器映射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文件配置详解

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,为全局变量和静态变量保留空间。

2812DSP-03DSP流水线及存储器配置

2812DSP-03DSP流水线及存储器配置

计算机信息工程学院
DSP技术及应用
281x流水线及存储器映射
指令流水线
虽然每一条指令都有经过8个阶段,但是,对于具 体的指令来说并不是每一个阶段都有效。一些指 令在译码2阶段就完成了,其他的在执行阶段,还 有一些在写阶段
执行(E) 读2(R2)
2
写(W)
读1(R1)
• CPU执行所有 的乘法、移位 • 如果数据已经在 和ALU操作 R1阶段被寻址,
4个地址作为CPU的32个中断向量。通过CPU的ST1 寄存器中的VMAP位来将这一段地址映射到程序空 间的底部或者顶部。
2 F2812的Reserved(保留)空间,可以用来进行外部存 ◆
储器扩展。其中数据空间里面某些地址被保留作为 CPU的仿真寄存器使用,这些地址是不向用户开放 的。
计算机信息工程学院
W W W
8-stage pipeline
W W W
F1 F2 D1 D2 R1 R2 X
F1 F2 D1 D2 R1 R2 X
F1 F2 D1 D2 R1 R2 X
F1 F2 D1 D2 R1 R2 X
E & G Access same address
F1 F2 D1 D2 R1 R2 X
F1 F2 D1 D2 R X2 W R11 R2 R X W F1 F2 D1 D X2 W D R X W 22 R1 R 21 R Protected Pipeline
DSP技术及应用
281x流水线及存储器映射
Code Security Module
• 保护知识产权
0x00 8000 LO SARAM (4K) 0x00 9000 0x00 A000 0x3D 7800 0x3D 7C00 0x3D 8000

DSP 学习系列三_F2812 flash搬移到RAM里运行

DSP 学习系列三_F2812 flash搬移到RAM里运行

基于TMS320F2812 flash搬移到RAM里运行实现去年在论坛上了“28335 学习系列__FLASH 搬移到RAM 运行实现方法”之后,很多网友提问有没有F2812 FLASH 搬移到RAM 运行实现方法。

其实,TI 28系列DSP目前用的很广泛的,关于FLASH搬移到RAM里运行文章也很多,但还有很多人不清楚如何实现,说明这些资料当中很多讲解的不够透彻,或者讲了很多,但没有告诉大家如何去做,如何去实现搬移。

很多附件里面的程序,大部分是没法运行的程序。

另外,对于初学DSP的人来说,搬移也是很令人费神的,往往调试半天一天的,程序就是不搬,然后就灰心丧气,然后就觉得DSP让人头疼。

其实,DSP作为一个工具,它不像我们学的很多专业理论知识。

有时候我们不能正常使用DSP,问题往往在于一些很细节的地方,或者是操作失误等等。

在写了一个“F28335 学习系列__FLASH 搬移到RAM 运行实现方法”,之后网友也收到了很多网友的回复。

回复中网友提出了很多问题,我将其归为3大类:第一:关于FLASH搬移到RAM运行的方法比较问题;第二:如何判断程序已经从FLASH搬移到RAM中;第三:如何实现F2812 FLASH搬移到RAM里运行;对于第一问题,实现FLASH搬移到RAM主要有两种方法,一种是部分搬移,另一种是全部搬移。

部分搬移即将程序代码中部分函数放到RAM中运行,使用这种搬移方法,主要是考虑到程序代码比较多,而DSP RAM空间有限,当全部搬移运行时,可能会产生数据空间调用冲突问题,反而降低了程序执行效率。

全部搬移即将程序中代码段,初始化段,常量段,变量定义段等等全部搬移到RAM中运行。

二者主要区别在于,前者在mian函数里面操作,通过MEMRYCOPY函数,在CMD中增加“ramfuncs”段,只要程序中放在“ramfuncs”里面便可实现搬移。

后者在CMD里实现搬移配臵,将“.cinit ,.const,.econst,.pinit ,.switch,.text”全部配臵成搬移。

TMS320F2812的CMD文件的编写经验总结

TMS320F2812的CMD文件的编写经验总结

TMS320F2812的CMD文件的编写经验总结CMD文件里包含三部分内容:1)输入/输出定义:.obj文件:链接器要链接的目标文件;.lib文件:链接器要链接的库文件;.map文件:链接器生成的交叉索引文件;.out文件:链接器生成的可执行代码;链接器选项2)MEMORY命令:描述系统实际的硬件资源3)SECTIONS命令:描述“段”如何定位F2812的CMD文件只包含后两部分,现对它的编写做一下总结:(一)用于调试时用,取名为SRAM.CMD这里有个比较标准的F2812的CMD文件,可以供大家借鉴使用:MEMORY{PAGE 0:ZONE0 : origin = 0x002000, length = 0x002000ZONE1 : origin = 0x004000, length = 0x002000RAML0 : origin = 0x008000, length = 0x001000ZONE2 : origin = 0x080000, length = 0x080000ZONE6 : origin = 0x100000, length = 0x080000OTP : origin = 0x3D7800, length = 0x000800FLASHJ : origin = 0x3D8000, length = 0x002000FLASHI : origin = 0x3DA000, length = 0x002000FLASHH : origin = 0x3DC000, length = 0x004000FLASHG : origin = 0x3E0000, length = 0x004000FLASHF : origin = 0x3E4000, length = 0x004000FLASHE : origin = 0x3E8000, length = 0x004000FLASHD : origin = 0x3EC000, length = 0x004000FLASHC : origin = 0x3F0000, length = 0x004000FLASHA : origin = 0x3F6000, length = 0x002000BEGIN_H0 : origin = 0x3F8000, length = 0x000002BEGIN_FLASH : origin = 0x3F7FF6, length = 0x000002PRAMH0 : origin = 0x3F8002, length = 0x001FFEZONE7 : origin = 0x3FC000, length = 0x003FC0ROM : origin = 0x3FF000, length = 0x000FC0 // boot ROM available if MP/MCn=0 RESET : origin = 0x3FFFC0, length = 0x000002VECTORS : origin = 0x3FFFC2, length = 0x00003EPAGE 1 : // Data MemoryRAMM0 : origin = 0x000000, length = 0x000400RAMM1 : origin = 0x000400, length = 0x000400DEV_EMU : origin = 0x000880, length = 0x000180FLASH_REGS : origin = 0x000A80, length = 0x000060CSM : origin = 0x000AE0, length = 0x000010XINTF : origin = 0x000B20, length = 0x000020CPU_TIMER0 : origin = 0x000C00, length = 0x000008PIE_CTRL : origin = 0x000CE0, length = 0x000020PIE_VECT : origin = 0x000D00, length = 0x000100ECAN_A : origin = 0x006000, length = 0x000100ECAN_AMBOX : origin = 0x006100, length = 0x000100SYSTEM : origin = 0x007010, length = 0x000020SPI_A : origin = 0x007040, length = 0x000010SCI_A : origin = 0x007050, length = 0x000010XINTRUPT : origin = 0x007070, length = 0x000010GPIOMUX : origin = 0x0070C0, length = 0x000020GPIODAT : origin = 0x0070E0, length = 0x000020ADC : origin = 0x007100, length = 0x000020EV_A : origin = 0x007400, length = 0x000040EV_B : origin = 0x007500, length = 0x000040SCI_B : origin = 0x007750, length = 0x000010MCBSP_A : origin = 0x007800, length = 0x000040RAML1 : origin = 0x009000, length = 0x001000FLASHB : origin = 0x3F4000, length = 0x002000CSM_PWL : origin = 0x3F7FF8, length = 0x000008DRAMH0 : origin = 0x3f9000, length = 0x001000}SECTIONS{// Compiler Required Sections.text : > PRAMH0, PAGE = 0.cinit : > PRAMH0, PAGE = 0.stack : > RAMM1, PAGE = 1.bss : > RAMM0, PAGE = 1.ebss : > RAMM0, PAGE = 1.const : > RAMM0, PAGE = 1.econst : > RAMM0, PAGE = 1.sysmem : > RAMM1, PAGE = 1.reset : > RESET, PAGE = 0, TYPE = DSECT // we are not using the .reset // section//Peripheral Frame 0 Register StructuresDevEmuRegsFile : > DEV_EMU, PAGE = 1FlashRegsFile : > FLASH_REGS, PAGE = 1CsmRegsFile : > CSM, PAGE = 1XintfRegsFile : > XINTF, PAGE = 1CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1PieCtrlRegsFile : > PIE_CTRL, PAGE = 1PieVectTable : > PIE_VECT, PAGE = 1//Peripheral Frame 1 Register StructuresSysCtrlRegsFile : > SYSTEM, PAGE = 1SpiaRegsFile : > SPI_A, PAGE = 1SciaRegsFile : > SCI_A, PAGE = 1XIntruptRegsFile : > XINTRUPT, PAGE = 1GpioMuxRegsFile : > GPIOMUX, PAGE = 1GpioDataRegsFile : > GPIODAT PAGE = 1AdcRegsFile : > ADC, PAGE = 1EvaRegsFile : > EV_A, PAGE = 1EvbRegsFile : > EV_B, PAGE = 1ScibRegsFile : > SCI_B, PAGE = 1McbspaRegsFile : > MCBSP_A, PAGE = 1//Peripheral Frame 2 Register StructuresECanaRegsFile : > ECAN_A, PAGE = 1ECanaMboxesFile : > ECAN_AMBOX PAGE = 1//Code Security Password LocationsCsmPwlFile : > CSM_PWL, PAGE = 1}(二)用于烧写到FLASH中时用,取名为FLASH.CMDFLASH.CMD与SRAM.CMD基本一样,只是有两处改动:一是MEMORY中将你的程序代码部分映射到FLASH空间里;二是在SECTIONS中添加一个用户定义的起始段,起始段的代码如下://User Defined Sections , Used by file DSP28_CodeStartBranch.asmcodestart : > BEGIN, PAGE = 0其中DSP28_CodeStartBranch.asm中的关键代码为:.ref _c_int00.sect “codestart”Code_start:LB _c_int00.end(三)SECTIONS中段的含义与用户自定义段的方法1、各个段的含义以下是TI公司的技术文档中对一些段的说明,现截个图给大家参考:除此外还有一些段的含义如下(这仅是我见过的,有漏下的还请提示,大家一起学习):.reset 复位中断向量表.vectors 中断向量表.data 已初始化数据,常数数据(比如对变量的初始化数据).pvecs 外围模块中断向量表.ref 引用外部定义的变量或函数名.global 引用全局变量或函数.space 定义要保留的空间.def 定义变量,与#define功能相同.end 段的结束标识.sect 用户自定义的已初始化段.asect 比.sect多了绝对地址定位功能,一般不用.usect 用户自定义的未初始化段已初始化的段:.text, .cinit, .const, .econst, .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:为动态存储分配保留的空间。

F2812存储器映射及CMD详解

F2812存储器映射及CMD详解

2812存储器映射及CMD2812存储器映射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伪指令用来表示实际存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。

F2812 DEMO 板 说明书

F2812 DEMO 板 说明书

F2812 DEMO板使用说明书F2812 DEMO板是为学习、熟悉TMS320F2812芯片而开发的演示板。

一.F2812 DEMO板上的资源:1. TMS320F2812●静态CMOS、主频可达150MHz、低功耗(核电压1.8V、I/O电压3.3V);●128K×16位片上FLASH、18K×16位片上SRAM、4K×16位片上ROM;●外部存储空间接口:最多可达1M×16位、提供3个独立的片选信号、读/写时序可编程●动态PLL,主频可由软件编程修改、片上看门狗电路●3个外部中断源●外设中断扩展模块,最多支持45个外部中断●具有加密功能,密钥长度128位●3个32位CPU定时器●用于电机控制的外设:2个事件管理器(与C240x器件兼容)●多种标准串口外设:1个SPI同步串口、2个UART异步串口、1个增强型CAN总线接口、1个McBSP同步串口●12位A/D转换器:16通道、双采/保、2×8多路切换器●56个独立可编程、复用型、通用I/O口2.电源采用TPS767D318,将外部提供的+5VDC转换为TMS320F2812所需的+3.3VDC和+1.8VDC。

3.时钟板上提供30MHz晶振,由软件将PLLCR寄存器设置为1010,系统时钟为外部时钟的5倍频,即系统时钟为150MHz。

PLLCR寄存器参看《TMS320F28x Control and Interrupts Peripheral Reference Guide》。

4. JTAG仿真接口SEED-XDS仿真器与JTAG仿真接口相联,即可对TMS320F2812进行仿真、调试。

5. MP/MC方式设置板上J3跳针用于设置MP/MC方式,当跳针开路时为MC方式,短路时为MP方式。

6. TMS320F2812引脚F2812 DEMO板上已将TMS320F2812上的所有引脚引至对应的焊盘,并将引脚名标在相应的焊盘处,以便用户作简单的实验。

TMS320f2812地址映射以及CMD文件详解

TMS320f2812地址映射以及CMD文件详解

S
CIRXEMU; // Recieve emulation buffer register
union SCIRXBUF_REG SCIRXBUF; // Recieve data buffer
Uint16
rsvd1; // reserved
Uint16
SCITXBUF; // Transmit data buffer
extern volatile struct SCI_REGS SciaRegs;
extern volatile struct SCI_REGS ScibRegs; 大家可以看到,这里定义了两个结构体,一个是 SciaRegs ,一个是 ScibRegs,因为 DSP 内部有两个串行通信, A 和 B,这两个都是结构体,而类型就是前面的 SCI_REGS 的,这个结构体类型是这样定义的:
EVA : origin = 0x007400, length = 0x000040
EVB : origin = 0x007500, length = 0x000040
SCIB : origin = 0x007750, length = 0x000010
MCBSPA : origin = 0x007800, length = 0x000040
#pragma CODE_SECTION(funcA,“codeA ”); char funcA(int i); //对函数 funcA 的声明 上面中,funcA 函数一定是外部声明或者定义的函数,CODE_SECTION 为 funcA 在一个名为 codeA 的块中指 定空间。如果你有一个代码对象并想将其链接到不同于.txt 的空间时,该语法就非常有用。而 codeA 在.cmd 文件中指定了物理地址。 #pragma DATA_SECTION(bufferB,“my_sect”); char bufferB [512]; // 对 bufferB 的定义放在 pragma 的后面 DATA_SECTION 为 bufferB 在一个名为 my_sect 的块中指定空间。如果你有一个数据对象并想将其链接到不同 于.bss 的空间时,该语法就非常有用. 数据块 bufferB 被定位于 my_sect 段中,my_sect 段在 .cmd 文件中规定 了物理地址。 看完上面的一段解释,估计您会对#pragma 有了很好的了解了吧 。我们使用的结构体是数据而不是函 数,所以我们使用 DATA_SECTION。其实就是把 SciaRegs 和 ScibRegs 分别在块 SciaRegsFile 和 ScibRegsFile 中 指定空间,而块 SciaRegsFile 和 ScibRegsFile 在.cmd 文件中指定了物理地址。这样一来,是不是结构体 SciaRegs 和 ScibRegs 的起始地址就知道了?答案是肯定的。我们在看分析.cmd 文件。.cmd 文件的源代码如下:

DSP2812实验指导书第三部分

DSP2812实验指导书第三部分

第4章实验内容实验一编写一个以C语言为基础的DSP程序一.实验目的1.学习用标准C语言编制程序;了解常用的C语言程序设计方法和组成部分。

2.学习编制连接命令文件,并用来控制代码的连接。

3.学会建立和改变map文件,以及利用它观察DSP内存使用情况的方法。

4.熟悉使用软件仿真方式调试程序。

二.实验设备PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000),安装Code Composer Studio 2.0软件。

三.实验原理1.标准C语言程序CCS支持使用标准C语言开发DSP应用程序。

当使用标准C语言编制的程序时,其源程序文件名的后缀应为.c (如:volume.c)。

CCS在编译标准C语言程序时,首先将其编译成相应汇编语言程序,再进一步编译成目标DSP 的可执行代码。

最后生成的是coff格式的可下载到DSP中运行的文件,其文件名后缀为.out。

由于使用C语言编制程序,其中调用的标准C的库函数由专门的库提供,在编译连接时编译系统还负责构建C运行环境。

所以用户工程中需要注明使用C的支持库。

2.命令文件的作用命令文件(文件名后缀为cmd)为链接程序提供程序和数据在具体DSP硬件中的位置分配信息。

通过编制命令文件,我们可以将某些特定的数据或程序按照我们的意图放置在DSP所管理的内存中。

命令文件也为链接程序提供了DSP外扩存储器的描述。

在程序中使用CMD文件描述硬件存储区,可以只说明使用部分,但只要是说明的,必须和硬件匹配,也就是只要说明的存储区必须是存在的和可用的。

3.内存映射(map)文件的作用一般地,我们设计、开发的DSP程序在调试好后,要固化到系统的ROM中。

为了更精确地使用ROM空间,我们就需要知道程序的大小和位置,通过建立目标程序的map文件可以了解DSP 代码的确切信息。

当需要更改程序和数据的大小和位置时,就要适当修改cmd文件和源程序,再重新生成map文件来观察结果。

TMS320F2812开发板 说明书

TMS320F2812开发板 说明书

F2812的外部存储器接口XINTF的详细说明和编程操作请参考《TMS320F28X External Interface(XINTF) Reference Guid》 4. 外部扩ቤተ መጻሕፍቲ ባይዱ的控制/状态寄存器
开发板上配置有HOST USB接口,Ethernet接口,LCD接口,输入输出等控制 寄存器和状态寄存器等,它映射在F2812的Zone0 和 Zone1存储空间中,具体的 定义如下:
功能/名称 扩展的输出接口控制寄存器
寄存器 名称 OutRegs
发光二极管控制寄存器
LedRegs
网卡复位、485接收使能等控制寄存器
Led8Reg
键盘输入寄存器
KeyReg
扩展的输入接口控制寄存器
InReg
扩展的外部可屏蔽中断EXINT1—EXINT5状态寄存器 IFReg1
扩展的外部非屏蔽中断EXNMI1—EXNMI2状态寄存器 IFReg2
2.本板卡的平面图如下: 平面图上的标号和板卡的标号一一对应,详细的说明请看后面章节的说明。
第二章 入门
1. 1特点 采用32位定点DSP TMS320F2812(150M),方便电机控制,电力设备控制及工业控 制等。 片上存储器 FLASH 128K X 16位 SRAM 18K X 16位 BOOT ROM 4K X 16 位 OPT ROM 1K X 16位
IFReg2 LcdDat LcdCom AddrPort DataPort BaseAddr
0X0033FF Zone0 0X0039FE Zone0 0X0039FF Zone0 0x0035FE Zone0 0x0035FF Zone0 0x003700 Zone0
2位只读

DSP 学习系列三_F2812 flash搬移到RAM里运行

DSP 学习系列三_F2812 flash搬移到RAM里运行

基于TMS320F2812 flash搬移到RAM里运行实现去年在论坛上了“28335 学习系列__FLASH 搬移到RAM 运行实现方法”之后,很多网友提问有没有F2812 FLASH 搬移到RAM 运行实现方法。

其实,TI 28系列DSP目前用的很广泛的,关于FLASH搬移到RAM里运行文章也很多,但还有很多人不清楚如何实现,说明这些资料当中很多讲解的不够透彻,或者讲了很多,但没有告诉大家如何去做,如何去实现搬移。

很多附件里面的程序,大部分是没法运行的程序。

另外,对于初学DSP的人来说,搬移也是很令人费神的,往往调试半天一天的,程序就是不搬,然后就灰心丧气,然后就觉得DSP让人头疼。

其实,DSP作为一个工具,它不像我们学的很多专业理论知识。

有时候我们不能正常使用DSP,问题往往在于一些很细节的地方,或者是操作失误等等。

在写了一个“F28335 学习系列__FLASH 搬移到RAM 运行实现方法”,之后网友也收到了很多网友的回复。

回复中网友提出了很多问题,我将其归为3大类:第一:关于FLASH搬移到RAM运行的方法比较问题;第二:如何判断程序已经从FLASH搬移到RAM中;第三:如何实现F2812 FLASH搬移到RAM里运行;对于第一问题,实现FLASH搬移到RAM主要有两种方法,一种是部分搬移,另一种是全部搬移。

部分搬移即将程序代码中部分函数放到RAM中运行,使用这种搬移方法,主要是考虑到程序代码比较多,而DSP RAM空间有限,当全部搬移运行时,可能会产生数据空间调用冲突问题,反而降低了程序执行效率。

全部搬移即将程序中代码段,初始化段,常量段,变量定义段等等全部搬移到RAM中运行。

二者主要区别在于,前者在mian函数里面操作,通过MEMRYCOPY函数,在CMD中增加“ramfuncs”段,只要程序中放在“ramfuncs”里面便可实现搬移。

后者在CMD里实现搬移配臵,将“.cinit ,.const,.econst,.pinit ,.switch,.text”全部配臵成搬移。

DSP4系统与实验教程_2812存储器

DSP4系统与实验教程_2812存储器

2812的存储器配置本堂课我们来介绍存储器映像及CMD文件的编写,这部分内容较多,也是DSP区别于单片机的主要表现之一。

尤其是CMD文件的编写,工作中很多DSP的工作都是要围绕这个部分的内容进行,编写好的CMD文件也是衡量一个工程师水平高低的最好的体现。

那么我们现在就开始今天的课程。

第一节Memory简介在我们买计算机的时候,硬盘空间的大小是衡量计算机性能指标之一,在嵌入式DSP的工作时,存储器同样也是衡量的标准之一。

1.1What’s the memory?存储器是存放DSP运行过程中指令、代码、数据的地方,存储器的大小也直接影响到我们所编写的程序。

如果我们的程序量较大但选择了存储空间小的DSP时候,(工作中也经常遇到这样的问题,解决的方式之一就是充分的分析代码,看看能否压缩;第二就是将C语言改写成汇编语言)。

1.22812的memory的结构下面我们来看一下2812存储器的结构,是由那几部分组成的。

2812的CPU是不含有存储器的,但他可以访问片内也可访问片外的存储器。

2812的存储器分为这几个方面:1.程序或数据存储器1)单口随机存储器SRAM2)只读存储器ROM3)FLASH(3D 8000~3F 7FFF)共划分为ABCDEFGHIJ.A端地址(3F 6000~3F 7FFF)【注:FlashA】为Flash的高地址段最高的部分用于其他的功能【注:The difference between RAM & FLASH】平时先调试程序的时候,先将程序存放在RAM空间,限电丢失,一方面执行速度较快,另一方面下载速度较快;等到程序调试完毕后,程序下载到FLASH空间中。

他们可以被映射到程序空间或数据空间。

有同学会问“映像”是什么意思,英文“map”,意思是可以被分配用于程序空间(指令代码)或数据空间(数据资源)。

【注:the memory map in 2812】【注:Symbol】我们存储器的容量大小通常使用多少K*16位来表示。

F2812操作笔记

F2812操作笔记

目录一、如何开始DSP的学习 (2)二、完整工程的构成 (4)三、CCS的操作 (7)1、CCS的布局和结构 (7)2、开始调试程序 (8)3、统计代码运行时间 (10)四、F2812的资源 (15)1、F2812的片内资源 (16)2、地址总线和数据总线 (16)3、内部的存储器资源 (18)4、存储器映射 (18)5、映射和空间的统一编址 (20)6、2812CMD详解 (21)五、中断系统 (25)1、F2812的中断系统 (25)2、2812中断程序模板 (29)六、F2812的时钟系统 (32)1、振荡器OSC和锁相环PLL (32)2、2812芯片中各种时钟信号的产生情况 (33)3、看门狗(Watch Dog) (34)4、系统初始化函数 (34)七、IO口控制 (37)八、F2812的EV模块 (39)1、事件管理器的功能 (39)2、通用定时器 (40)3、通用定时器初始化程序 (43)九、F2812的PWM (46)1、通用定时器产生的PWM波 (46)2、三相全桥电路桥理想驱动波形 (49)十、F2812的SCI模块 (53)1、2812 SCI模块 (54)2、SCI模块的特点 (55)3、SCI模块发送和接收数据的工作原理 (55)4、SCI数据格式 (56)5、SCI通信波特率设置 (56)6、SCI发送和接收数据的机制 (57)7、多处理器通信 (58)一、如何开始DSP的学习以下为各网友学习DSP的一些经验fxw451:大家先大体上看一遍书,把大体的知识了解一下。

其次就是看例子了,例子是关键,例子里有你学的所有的东西,这次你再拿出一本书来看,这次是有针对性的看,比如你做的spi的,你就直接看sp i那张,一边看例子一边看书,这样你就可以把一些重要的寄存器给记住了。

对于初学者来说,一直好奇的就是ccs的使用,拿我第一次使用ccs来说,当我把ccs和板子连载一起时,我相当高兴,成功感油然升起,接下来就是用ccs里的看自带的例子了,看完后你就会发现,这些是什么东东哦,什么都不会,这就对了,你要是看一开始看会了你就是神仙了,dsp不像单片机那么容易上手,所以你要花费点功夫吃透它,好东西不是那么容易就可以搞定的。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7
3.2 F2812的存贮器映射
8
让我们看看F2812内部的映射空间,如图4所示。其存储空间 分布如下表所示
9
10
11
3.3.CMD文件的认识
CMD:command命令,顾名思义就是命令文件指定存储区域的分配, 2812的CMD采用的是分页制,其中PAGE0用于存放程序空间,而 PAGE1用于存放数据空间。 MEMORY伪指令用来表示实际存在目 标系统中的可以使用的存储器范围,在这里每个存储器都有自己的 名字,起始地址和长度。SECTIONS伪指令是用来描述输入端是如 何组合到输出端内的。
4
5
先来讲地址总线,顾名思义,这类总线的作用就是 来传送存储单元的地址的。 1. PAB(Program Address Bus)程序地址总线,它是 一个22位的总线,用于传送程序空间的读写地址。程序 在运行的时候,假如执行到了某一个指令,那么需要去 找到这段代码的地址,就是用PAB来传送。 2. DRAB(Data-Read Address Bus)数据读地址总线 ,它是个32位的总线,用于传送数据空间的读地址。假 如要读取数据空间某一个单元的内容,那么这个单元的 地址就是通过DRAB来传送。 3. DWAB(Data-Write Address Bus)数据写地址总线 ,它也是个32位的总线,用于传送数据空间的写地址。 类似的,如果我要对数据空间的某一个单元进行写操作 ,那么这个单元的地址就是通过DWAB来传送。
DSP技术
电气自动
1. 2个事件管理器EVA、EVB,这个应该是使用2812必用的外设 了,PWM波形就是需要这个外设来产生的。 2. 2个串行通信接口SCI,标准的UART(SCIA SCIB)。 3. 1个串行外围接口SPI。 4. 改进的CAN通信ECAN。 5. 多通道缓冲串行接口McBSP。 6. 12位的ADC,一共有16个通道,实现AD转换的功能 7. 最多有56个可独立编程的,多功能复用的GPIO引脚。
6
了解了地址总线后,我们再来看看数据总线,这类总线 传送的就是数据了,也就是各个存储单元内的具体内容了。 1. PRDB(Program-Read Data Bus)程序读数据总线,它 是一个32位的总线,用于传送读取程序空间时的指令或者数 据。我们在执行代码的时候,首先是通过PAB传送并找到了 存放该指令的存储单元,但是这个存储单元下的具体内容就 要由我们的PRDB来传送了。 2. DRDB(Data-Read Data Bus)数据读数据总线,它是 一个32位的总线,在读取数据空间时用来传送数据。我们在 进行读操作时,先通过DRAB总线确定了需要进行读操作的 数据单元的地址,接下来传送这个数据单元下面的具体内容 时就需要DRDB了。 3. DWDB(Data/Program-Write Data Bus)数据写数据总 线,它是一个32位的总线,在进行写操作时,向数据空间/ 程序空间传送相应的数据。
13
12
大家都知道,DSP在150M时钟频率下,FLASH 中只能提供大约120M的时钟频率,所以有时候 我们希望在RAM中运行时间敏感或计算量很大 的子程序(比如AD采样)。但是我们所有代码 都放在FLASH中,这就必须在上电后将FLASH 中的这段敏感程序复制到RAM中运行,加快速 度。这是在.CMD文件就必须划分一段用来设置 RAM的载入和运行地址。
3
3.1.1 2812内部的总线结构
我们首先需要知道2812的存储器空间被分成了2块,一 块是程序空间,一块是数据空间,而无论是那一块的内容, 我们都需要借助于两种总线来进行传送相关的内容—地址总 线和数据总线,用地址总线来传送存储单元的地址,而用数 据总线来传送存储单元内的内容。2812的存储器接口具有3 条地址总线和3条数据总线。了解了这些基本的内容之后我 们接下来一一讲述2812内部的总线结构。
相关文档
最新文档