首页 第4课 2812的片内资源、存储器映射以及CMD文件的编写

第4课 2812的片内资源、存储器映射以及CMD文件的编写

举报
开通vip

第4课 2812的片内资源、存储器映射以及CMD文件的编写 Measuring our success is your success ! 1 HELLODSP版权所有 请勿用于商业用途 违者必究 第 4课 F2812片内资源、存储器映射以及 CMD文件的编写 作者:顾卫钢 谢芬(HELLODSP资深会员) 从今天开始,我们的课程终于进入 F2812的核心了,呵呵。在今天的课程中,我们将带领大家一起学 习 2812 的片内资源,初步了解它...

第4课 2812的片内资源、存储器映射以及CMD文件的编写
Measuring our success is your success ! 1 HELLODSP版权所有 请勿用于商业用途 违者必究 第 4课 F2812片内资源、存储器映射以及 CMD文件的编写 作者:顾卫钢 谢芬(HELLODSP资深会员) 从今天开始,我们的课程终于进入 F2812的核心了,呵呵。在今天的课程中,我们将带领大家一起学 习 2812 的片内资源,初步了解它究竟有哪些本事,能拿来干些什么,然后一起了解 2812 存储器的结构, 统一编址的方式、存储器映射关系,并重点 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 CMD文件,以期望消除大家对 CMD文件的迷惑,在自己编 写程序的时候会修改 CMD文件中的部分内容,从而满足自己 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 时的需求。 1. F2812的片内资源 我们知道,TMS320F2812是 32位的定点 DSP,它既具有数字信号的处理能力,又具有强大的事件管理 能力和嵌入式控制功能,特别适合用于需要大批量数据处理的测控领域,例如自动化控制、电力电子技术、 智能化仪表、电机伺服控制。下面是 F2812的内部资源框图。 图 1 TMS320F2812内部资源框图 2812 采用了高性能的静态 CMOS 技术,时钟频率可达 150MHZ(6.67ns),其核心电压为 1.8V,I/O 口 电压 3.3V,Flash编程电压也为 3.3V,所以我们在设计 2812电源部分的时候,需要将常用的 5V电压转换 成 1.8V和 3.3V的电压之后,才能供给 2812。具体的设计我们将会在以后的硬件设计内容里进行探讨。 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Measuring our success is your success ! 2 HELLODSP版权所有 请勿用于商业用途 违者必究 让我们一起来看看图 1,最左边的 A(18-0)和 D(15-0)是表示 2812外扩存储器的能力,2812外扩的 存储空间最大是 219*16 bit,就是说最多只能扩 512K个存储单元,每一个存储单元的位数为 16位。 从图中我们也可以看到,F2812支持 JTAG边界扫描(Boundary Scan),这也是为什么我们的仿真器都 是采用 JTAG口的原因了,在这里,提醒大家一点的就是,仿真的时候,JTAG口的方向不能插反,如果插 反的话会将仿真器烧坏。我们所使用的 14针 JTAG口的第 6针是空脚,所以一般情况下仿真器 JTAG线的 第 6针是填针的,同时在板子上的第 6脚是拔空的,这样可以防止您插反 JTAG口,以避免不必要的损失。 这一点,在我们自己设计板子的时候尤其需要注意。 在图 1中,我们可以看到连接整个芯片各个模块的两条黑色的线,从英文单词上我们可以看到一条是 Program Bus,另一条是 Data Bus,就是程序总线和数据总线。这个概念讲的还是比较笼统的,下面我们 详细分析这两天总线,并结合图中总线上的各个箭头来理解这些概念。 我们首先需要知道 2812 的存储器空间被分成了 2 块,一块是程序空间,一块是数据空间,而无论是 那一块的内容,我们都需要借助于两种总线来进行传送相关的内容——地址总线和数据总线,用地址总线 来传送存储单元的地址,而用数据总线来传送存储单元内的内容。2812的存储器接口具有 3条地址总线和 3条数据总线。了解了这些基本的内容之后我们接下来一一讲述 2812内部的总线结构。 先来讲地址总线,顾名思义,这类总线的作用就是来传送存储单元的地址的。 1. PAB (Program Address Bus)程序地址总线,它是一个 22位的总线,用于传送程序空间的读写地址。 程序在运行的时候,假如执行到了某一个指令,那么需要去找到这段代码的地址,就是用 PAB来传送。 2. DRAB(Data-Read Address Bus)数据读地址总线,它是个 32位的总线,用于传送数据空间的读地址。 假如要读取数据空间某一个单元的内容,那么这个单元的地址就是通过 DRAB来传送。 3. DWAB(Data-Write Address Bus)数据写地址总线,它也是个 32位的总线,用于传送数据空间的写地 址。类似的,如果我要对数据空间的某一个单元进行写操作,那么这个单元的地址就是通过 DWAB来传 送。 了解了地址总线后,我们再来看看数据总线,这类总线传送的就是数据了,也就是各个存储单元内的 具体内容了。 1. PRDW(Program-Read Data Bus)程序读数据总线,它是一个 32 位的总线,用于传送读取程序空间时 的指令或者数据。我们在执行代码的时候,首先是通过 PAB 传送并找到了存放该指令的存储单元,但 是这个存储单元下的具体内容就要由我们的 PRDW来传送了。 2. DRDB(Data-Read Data Bus)数据读数据总线,它是一个 32位的总线,在读取数据空间时用来传送数 据。我们在进行读操作时,先通过 DRAB总线确定了需要进行读操作的数据单元的地址,接下来传送这 个数据单元下面的具体内容时就需要 DRDB了。 3. DWDB(Data/Program-Write Data Bus)数据写数据总线,它是一个 32 位的总线,在进行写操作时, Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Measuring our success is your success ! 3 HELLODSP版权所有 请勿用于商业用途 违者必究 向数据空间/程序空间传送相应的数据。也就是假如我们要对数据空间的某一个单元进行写操作,我们 通过 DWAB传送了这一个单元的地址,同时我们需要 DWDB来传送写入的内容。 看了这么多总线,大家是不是有些晕乎乎的呢,呵呵。又是程序空间,数据空间,又是地址总线,数 据总线,看的乱了。或许有的朋友就要问了,刚才讲了这么多地址总线和数据总线,那图 1 中标注的是 Program Bus和 Data Bus,不是什么地址总线和数据总线啊,怎么会这么混乱呢?不急,呵呵,请大家一 起来看看我们的图 2吧,2812内部的总线结构。 大家在比较上面的内容和图 2 时,是不是对 2812 的总线有了豁然开朗的感觉呢?呵呵,希望有,如 果没有的话,请反复阅读一下,这个内容虽然不是什么重点,但是对于理解 2812 内部的存储结构也是有 帮助的。从图 2我们也可以看到,我们不能同时对程序空间进行读写,因为 PAB是复用的,读写操作会同 时使用到 PAB。同样的,我们也不能同时对程序空间和数据空间进行写操作,因为 DWDB也是复用的,对程 序空间进行写操作或者对数据空间进行写操作,都要用到 DWDB。 图 2 2812内部的总线结构 呵呵,用了很长的篇幅来介绍了 2812 内部的总线结构,一是帮助大家看懂图 1 中的总线,二是为后 面学习存储器方面的内容打下一个伏笔,既然讲到了存储器,我们就接着讲 2812内部的存储器资源。CPU 本身没有存储器,但是 2812片内集成了 RAM、ROM和 FLASH,具体的存储器资源如下表所示: 名称 大小 FLASH 128K*16位 H0(RAM) 8K*16位 Administrator 线条 Administrator 矩形 Measuring our success is your success ! 4 HELLODSP版权所有 请勿用于商业用途 违者必究 L0(RAM) 4K*16位 L1(RAM) 4K*16位 M0(RAM) 1K*16位 M1(RAM) 1K*16位 Boot Rom 4K*16位 OTP(One time Programmable ROM) 1K*16位 我们通常在调试程序的时候把程序 load到 RAM里,而固化程序的时候才会把程序烧写到 FLASH里。 结束这些看了头晕的内容吧,来了解一下稍微轻松些的 CPU资源和外设资源吧。2812有 3个 32位的 CPU定时器,支持动态的改变锁相环的频率,有片内振荡器和看门狗定时器模块。2812具有 3个外部中断, 但是 2812 具有外部中断的扩展模块(PIE),它可支持 96 个外部中断,不过当前仅仅使用了 45 个外部中 断,其他为保留,将来 2812功能扩展之后说不定会用到哦。具有 128位的密钥,用于保护 FLASH、OTP和 L0、L1中的内容不被盗读。 接下来,主要看一下 2812有哪些外围设备,这些外围设备大概的情况,可以参看图 1: 1. 2个事件管理器 EVA、EVB,这个应该是使用 2812必用的外设了,PWM波形就是需要这个外设来产生的。 2. 2个串行通信接口 SCI, 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 的 UART(SCIA SCIB)。 3. 1个串行外围接口 SPI。 4. 改进的 CAN通信 ECAN。 5. 多通道缓冲串行接口 McBSP。 6. 12位的 ADC,一共有 16个通道,实现 AD转换的功能 7. 最多有 56个可独立编程的,多功能复用的 GPIO引脚。 在这里,我们只需要了解这些就可以了,后面我们会一个外设、一个外设的去详细学习。 2. 存储器映射 通过前面的内容我们已经知道,2812具有 32位的数据地址和 22位的程序地址,总地址空间可以达到 4M的数据空间和 4M的程序空间。读到这一句话的时候,我不知道大家会不会产生疑问,一个是 32位的数 据地址,一个是只有 22 位的程序地址,那么为什么其可寻址的空间却是一样大的呢?这时候,您可能会 算一下,32位的数据地址,就是能访问 2的 32次,是 4G,而 22位的程序地址,就是能访问 2的 22次, 是 4M。不对呀,可寻址的数据空间应该是 4G而不是 4M,难道 TI的文档出错了吗?其实,2812可寻址的 数据空间最大确实是 4G,但是实际线性地址能达到的只有 4M,原因是 2812的存储器分配采用的是分页机 制,分页机制采用的是形如 0xXXXXXXX的线性地址,所以数据空间能寻址的只有 4M,但也足足您够用啦, 呵呵。 存储器就像一个仓库,用来存放很多的货物,只不过存储器是用来存放指令和数据的。2812的存储器 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Measuring our success is your success ! 5 HELLODSP版权所有 请勿用于商业用途 违者必究 被划分成了下面的几个部分: 1. 程序空间和数据空间。2812 所具有的 RAM、ROM 和 FLASH 都被统一编址,映射到了程序空间和数据空 间,这些空间的作用就是存放指令代码和数据变量。 2. 保留区。数据空间里面某些地址被保留了,作为 CPU的仿真寄存器使用,这些地址是不向用户开放的。 3. CPU中断向量。在程序空间里也保留了 64个地址作为 CPU的 32个中断向量。通过 CPU的一个寄存器 ST1中的 VMAP位来将这一段地址映射到程序空间的底部或者顶部。 这里,我们还得讲一下什么是映射,其实大家在中学的数学里应该学过映射这一个概念。曾经看过一 个网友是这么解释映射的,很有趣,大家不妨一读。 关于映射的解释 例如,本来我每次去买 DSP芯片,都是去找 ti的,所以我从 0x00000000路口进去,这样就可以找到 likyo 的家了。可是某一天,ti 说,这样太慢了,他就先把一些芯片放在了 hellodsp 的家里,然后偷偷的把 0x00000000这条路给改了!这条路通到了 hellodsp的家里(例如 0x40000000),但是我是不知道的,我 还是每次都沿着原路走,而且同样也可以买到芯片!但是等我买回来时发现,还没到吃中午饭的时间! 而原来回来时,刚好可以吃中午饭的!这样我不得不在公司多做点事了,哎,郁闷…………(我想 DSP也 会有同样的郁闷,因为它不得不多帮你做点事,不过你应该是高兴的)。 也许这样的比方不大合适,不过大概意思就是这样了,映射就是将一个地址,指到了另一个地址。 对于映射和空间的统一编址,我们用一个通俗的例子来帮助大家进行理解,请大家看图 3。假设一个 物流公司,它有储藏货物的仓库若干个,每天来来往往成千上万的货物要发送到全国各地,如果拿回来的 货物乱七八糟的堆放的话,发货的时候麻烦可大了,不仅仅是一个仓库一个仓库去找,而且要一个货架一 个货架的翻,这样效率可是及其低下,匆忙之下也有可能将货物搞错。为了提高效率,老板肯定要进行改 革,首先把各个仓库分类,例如仓库 1是发往江苏和上海的货物,仓库 2是发往北京的货物,仓库 3是发 往深圳的货物,仓库 4 是发往西安的。其次,货物进来前要根据目的地贴上统一规格的标签,例如 HD1000-HD2009的货物放在仓库 1内。这样,发货的时候,只要根据标签就能方便的分辨出货物在哪个仓 库的哪个货架,应该装上发往哪个地区的货车,一切井然有序。 Administrator 线条 Administrator 线条 Measuring our success is your success ! 6 HELLODSP版权所有 请勿用于商业用途 违者必究 图 3 映射和空间统一编址的理解 类似的,各个存储空间就像物流公司的仓库一样,有的是存放程序代码的,有的是用来存放数据的。 而且我们对各个存储单元进行了统一的编址,确定了各个存储单元所在的位置,在放置代码或者数据的时 候,根据他们的类型进行分配究竟放在那个区域,并记录下了它们的地址,这样需要用到的时候只要根据 这些地址就能很方便的找到我们所需要的内容。而记录下如何分配存储空间内容的就是我们的 CMD文件了。 我们会在稍后详细介绍 CMD文件的内容以及编写方法。大家可以比对着图 3来加深对于这部分内容的理解。 接下来,让我们看看 F2812内部的映射空间,如图 4所示。其存储空间分布如下表所示: 低地址空间 0x0000 0000 M0矢量 RAM(VMAP=0) 0x0000 0040 M0 SARAM(1K*16) 0x0000 0400 M1 SARAM(1K*16) 0x0000 0800 外设帧 Frame0 (2K*16) 0x0000 0D00 PIE向量(256*16,VMAP=1) 0x0000 1000 保留空间 0x0000 6000 外设帧 Frame2(4K*16) 0x0000 7000 外设帧 Frame1(4K*16) Administrator 线条 Measuring our success is your success ! 7 HELLODSP版权所有 请勿用于商业用途 违者必究 0x0000 9000 L1 SARAM(4K*16) 0x0000 A000 保留空间 高地址空间 0x003D 7800 OTP(1K*16并保留 1K) 0x003D 8000-0x003F 7FF7 FLASH(128K*16) 0x003F 7FF8-0x003F 7FFF 128位密钥 0x003F 8000 H0 SARAM(8K*16) 0x003F A000 保留空间 0x003F F000 Boot Rom(4K*16 MP/MC=0) 0x003F FFC0 BROM向量(VMAP=1 MP/MC=0 ENPIE=0) 图 4 F2812内部的存储器映射 3.CMD文件的认识(由谢芬编写) 对于大多数初学者而言,在运行程序的过程中,直接运用的是程序本身自带的 SRAM.CMD 或者是 FLASH.CMD。对于其中的内容,大家并没有做过多的了解,但是一旦当外扩了 SRAM 等的时候,用原来的 Administrator 线条 Measuring our success is your success ! 8 HELLODSP版权所有 请勿用于商业用途 违者必究 CMD文件就编译通过不了,这时需要我们对 CMD文件大体结构了解的基础上,作修改,接下来,我就根 据自己的经历来谈谈对于 CMD文件的认识。 CMD:command 命令,顾名思义就是命令文件指定存储区域的分配.2812 的 CMD 采用的是分页制,其中 PAGE0用于存放程序空间,而 PAGE1用于存放数据空间。 我们以大家最常用的 SRAM.CMD文件我们开始说开: SRAM.CMD MEMORY { PAGE 0 : PRAMH0 : origin = 0x3f8000, length = 0x001000 PAGE 1 : /* SARAM */ RAMM0 : origin = 0x000000, length = 0x000400 RAMM1 : origin = 0x000400, length = 0x000400 /* Peripheral Frame 0: */ DEV_EMU : origin = 0x000880, length = 0x000180 FLASH_REGS : origin = 0x000A80, length = 0x000060 CSM : origin = 0x000AE0, length = 0x000010 XINTF : origin = 0x000B20, length = 0x000020 CPU_TIMER0 : origin = 0x000C00, length = 0x000008 CPU_TIMER1 : origin = 0x000C08, length = 0x000008 CPU_TIMER2 : origin = 0x000C10, length = 0x000008 PIE_CTRL : origin = 0x000CE0, length = 0x000020 PIE_VECT : origin = 0x000D00, length = 0x000100 /* Peripheral Frame 1: */ ECAN_A : origin = 0x006000, length = 0x000100 ECAN_AMBOX : origin = 0x006100, length = 0x000100 /* Peripheral Frame 2: */ SYSTEM : origin = 0x007010, length = 0x000020 SPI_A : origin = 0x007040, length = 0x000010 Administrator 线条 Administrator 线条 Measuring our success is your success ! 9 HELLODSP版权所有 请勿用于商业用途 违者必究 SCI_A : origin = 0x007050, length = 0x000010 XINTRUPT : origin = 0x007070, length = 0x000010 GPIOMUX : origin = 0x0070C0, length = 0x000020 GPIODAT : origin = 0x0070E0, length = 0x000020 ADC : origin = 0x007100, length = 0x000020 EV_A : origin = 0x007400, length = 0x000040 EV_B : origin = 0x007500, length = 0x000040 SPI_B : origin = 0x007740, length = 0x000010 SCI_B : origin = 0x007750, length = 0x000010 MCBSP_A : origin = 0x007800, length = 0x000040 /* CSM Password Locations */ CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* SARAM */ DRAMH0 : origin = 0x3f9000, length = 0x001000 } SECTIONS { /* Allocate program areas: */ .reset : > PRAMH0, PAGE = 0 .text : > PRAMH0, PAGE = 0 .cinit : > PRAMH0, PAGE = 0 /* Allocate data areas: */ .stack : > RAMM1, PAGE = 1 .bss : > DRAMH0, PAGE = 1 .ebss : > DRAMH0, PAGE = 1 .const : > DRAMH0, PAGE = 1 .econst : > DRAMH0, PAGE = 1 .sysmem : > DRAMH0, PAGE = 1 /* Allocate Peripheral Frame 0 Register Structures: */ DevEmuRegsFile : > DEV_EMU, PAGE = 1 Measuring our success is your success ! 10 HELLODSP版权所有 请勿用于商业用途 违者必究 FlashRegsFile : > FLASH_REGS, PAGE = 1 CsmRegsFile : > CSM, PAGE = 1 XintfRegsFile : > XINTF, PAGE = 1 CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1 CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1 CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1 PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 PieVectTable : > PIE_VECT, PAGE = 1 /* Allocate Peripheral Frame 2 Register Structures: */ ECanaRegsFile : > ECAN_A, PAGE = 1 ECanaMboxesFile : > ECAN_AMBOX PAGE = 1 /* Allocate Peripheral Frame 1 Register Structures: */ SysCtrlRegsFile : > SYSTEM, PAGE = 1 SpiaRegsFile : > SPI_A, PAGE = 1 SciaRegsFile : > SCI_A, PAGE = 1 XIntruptRegsFile : > XINTRUPT, PAGE = 1 GpioMuxRegsFile : > GPIOMUX, PAGE = 1 GpioDataRegsFile : > GPIODAT PAGE = 1 AdcRegsFile : > ADC, PAGE = 1 EvaRegsFile : > EV_A, PAGE = 1 EvbRegsFile : > EV_B, PAGE = 1 ScibRegsFile : > SCI_B, PAGE = 1 McbspaRegsFile : > MCBSP_A, PAGE = 1 /* CSM Password Locations */ CsmPwlFile : > CSM_PWL, PAGE = 1 } 上述文件中,MEMORY和 SECTIONS是命令文件中最常用的两伪指令。MEMORY伪指令用来表示实际 存在目标系统中的可以使用的存储器范围,在这里每个存储器都有自己的名字,起始地址和长度。SECTIONS 伪指令是用来描述输入端是如何组合到输出端内的。 Administrator 线条 Administrator 线条 Administrator 线条 Measuring our success is your success ! 11 HELLODSP版权所有 请勿用于商业用途 违者必究 由于 DSP281X系列的独特性(片内存在 SRAM和 FLASH)所以必须创建一个用户链接命令文件,以便 在运行程序时,每个块都能对号入座。 在 CMD 文件里有两个基本的段:初始化段和非初始化段。初始化段包含代码和常数等必须在 DSP 上 电之后有效的数。故初始化块必须保存在如片内 FLASH等非遗失性存储器中,非初始化段中含有在程序运 行过程中才像变量内写数据进去,所以非初始化段必须链接到易失性存储器中如 RAM。 在上述文件中,已初始化的段:.text,.cinit,.const,.econst,..pinit和.switch.. 每个小段里面存储的量说明如下: .text:所有可以执行的代码和常量 .cinit:全局变量和静态变量的 C初始化记录 .const:包含字符串常量和初始化的全局变量和静态变量(由 const)的初始化和说明 .econst:包含字符串常量和初始化的全局变量和静态变量(由 far const)的初始化和说明 .pinit:全局构造器(C++)程序列表 .switch:包含转换语气声明的列表 总而言之上述所要的存储器内性 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 如下: 段 存储类型 页 .text ROM OR RAM (FLASH) 0 .cinit ROM OR RAM(FLASH) 0 .const ROM OR RAM(FLASH) 1 .econst ROM OR RAM(FLASH) 1 .pinit ROM OR RAM(FLASH) 0 .switch ROM OR RAM(FLASH) 0,1 非初始化的段:.bss,.ebss,.stack,.sysmem,和 esysmem.(更好的理解就是,这些段就是存储空间而已) 每个小段里面存储的量说明如下: .bss: 为全局变量和局部变量保留的空间,在程序上电时,cinit空间中的数据复制出来并存储在.bss空间中。 .ebss:为使用大寄存器模式时的全局变量和静态变量预留的空间,在程序上电时,cinit空间中的数据复制 出来并存储在.ebss中。 .stack:为系统堆栈保留的空间,主要用于和函数传递变量或为局部变量分配空间。 .sysmem:为动态存储分配保留的空间。如果有宏函数,此空间被宏函数占用,如果没有的话,此空间保留 为 0 .esysmem:为动态存储分配保留的空间。如果有 far函数,此空间被相应的占用,如果没有的化,此空间保 留为 0. Administrator 线条 Administrator 线条 Measuring our success is your success ! 12 HELLODSP版权所有 请勿用于商业用途 违者必究 总而言之上述所有的存储空间占的寄存器的类型总结如下: 段 存储器类型 页 .const RAM 1 .econst RAM 1 .stack RAM 1 .sysmem RAM 1 .esysmem RAM 1 弄懂了伪指令和各个段的含义之后,我们再来看 CMD文件的各个细节。我们根据 F28X系列 DSP存储 器映射图可以知道: 数据空间起始地址是 0x0000,程序空间的起始地址是 0x3D8000, 在程序空间中,M0SRAM和M1SRAM各有 1K*16位 所以有 RAMM0 起始地址:0x0000 长度:0x0400(2的 10次为 1K) RAMM1 起始地址:0x0400(0x0000+0x0400) 长度:0x0800(2的 10次方为 1K) 同理从 0x000800到 0x000D00这段地址里面装的是 2K*16位的外围结构,映射表中很清楚的可以看出 从 0x002000到 0x006000地址被保留,所以另一部分的外设地址定义是从 0x00700开始。掌握一个机构的 起始来源,那么无论是 SRAM还是 FLASH里面的 CMD文件我们参照存储器映射图我们都能看懂。 这样对于不开扩的存储器我们能读懂,这些一般情况下,我们对 CMD 文件不用修改,直接拿个现成 的过来用就可以,现在在这解释下外扩 SRAM时我们该如何修改存储器的地址。 拿个外扩 256K 的 SRAM 来说,对照 DSPF2812 的存储器映射来看,我们可以定义外扩存储器的地址在 0X100000,那么链接的时候直接就链接到外部 SRAM中,至于长度,设置小于 256K或者等于 256K就好了, 一般我设置为 0x011000. 对于程序在 FLASH中运行时,需要注意的: 大家都知道,DSP在 150M时钟频率下,FLASH中只能提供大约 120M的时钟频率,所以有时候我们希 望在 RAM中运行时间敏感或计算量很大的子程序(比如 AD采样)。但是我们所有代码都放在 FLASH中, 这就必须在上电后将 FLASH中的这段敏感程序复制到 RAM中运行,加快速度。这是在.CMD文件就必须划 分一段用来设置 RAM的载入和运行地址。 程序代码如下: SECTIONS {……… adcpage: LOAD=FLASHD,PAGE=0 RUN=RAMH0,PAGE=0 RUN_START(_adcpage_runstart), LOAD_START(_adcpage_loadstart), Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Administrator 线条 Measuring our success is your success ! 13 HELLODSP版权所有 请勿用于商业用途 违者必究 LOAD_END(_adcpage_loadend) } 以上就是在 CMD(SRAM或者 FLASH程序在里面运行时所需要注意的),一般情况下,我们都是在原 有的 CMD文件做修改,一旦成形之后,此文件不需在修改,直接拿出来用即可。 以上有什么不对,希望那个大家提出来,我们一起讨论,共同进步。 欢迎仿真中国DSP开发服务平台:http://www.hellodsp.com。 HDSP-XDS510 USB仿真器+2812开发板仅需 1180元,实惠不容错过!
本文档为【第4课 2812的片内资源、存储器映射以及CMD文件的编写】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_920611
暂无简介~
格式:pdf
大小:1MB
软件:PDF阅读器
页数:13
分类:工学
上传时间:2011-04-27
浏览量:12