版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、tms320f28xx dsp中内部flash的应用研究tms320f28xx 片内有128 k×16 bit字的flash、两块4 k x16bit字的单周期拜访ram(saram)lo和l1、一块8 kxl6 bit字的单周期拜访ram(saram)ho、两块1 kxl6 bit字的单周期拜访ram(saram)m0和m1。因为存储器种类多、容量大,所以从系统的高度来配置各个存储器必需有合适的办法,而这些办法普通都与片内flash有关。另外,tms320f28xx dsp片内有定时器模块(wdt)、引导rom(rom bootloader)模块、代码平安模块(csm),要合理地用
2、法这些模块为囫囵系统服务,必然也要用到flash。由此可以看出,flash的地位和作用比较显著所以本文就flash的几种使用作了讨论。2 从flash拷贝段到ram21拷贝中断向量在tms320f28xx器件中,外设扩展中断(pie)模块管理中断哀求。上电时,全部中断向量必需位于非易失性存储器(如 flash)中,但是要把中断向量拷贝到pievect ram中,这是用户代码中器件初始化程序的一部分。 pievect ram是一个特定的ram块,它在当前tms320f28xx器件中是一个256×16的块在数据空间中的起始地址为 ox000d00。把中断向量衔接到flash,然后在运行时
3、把中断向量拷贝到pievect ram中,有许多办法可以实现。一个办法是创建包含函数指针的常量c结构体,该结构体包括128个32-bit向量。假如用法dsp281x或者 dsp280x外设的结构体这个结构体叫做pievecttableinit,它已经在dsp281x_pievectc或者 dsp280x_pievect.c创建(参看ti提供的例程)。由于这个结构体用法const类型关键词,所以它将会被编译器放置在.econst段中。运行时只需要把这个结构体拷贝到pievect ram中。c编译器运行时支持库包含名为memcpy的存储器拷贝函数,该函数可以被用来完成拷贝任务,其使用如下所示:以上
4、这个例子为pie ram起始地址用法的硬编码地址(hard coded address),明确指定为0x000d00。但是硬编码地址并不是较好的编程方式,用户可以用法data_section命令创建一个非初始化的假变量(dummy variable),并把这个变量衔接到pie ram然后用这个假变量的名字来代替硬编码地址。例如,当用法dsp281x或者dsp280x外设结构体时,创建一个名为pievecttable的非初始化结构体,并把该结构体衔接到pievect ram。前面例子中的memcpy()函数可以被替换为:memcpy(&pievecttable,&pievectt
5、ableinit,256);注重拷贝长度是256个16-bit字对应为128个32-bit字。22初始化flash控制寄存器flash控制寄存器fopt、fpwr、:fstdby-wait、factivewait、fbankwait、 fotpwait的初始化代码不能从flash存储器当中运行否则就会有不行预料的结果浮现。所以,flash控制寄存器的初始化函数在运行时必需从 flash(它的装载地址)拷贝到ram(它的运行地址)。flash控制寄存器由code security module(csm)庇护。假如csm被庇护起来了,那么必需从被庇护的ram(例如:l0或者l1 saram)运行f
6、lash控制寄存器的初始化代码,否则flash控制寄存器的初始化代码无法拜访flash控制寄存器。要注重的是,当器件复位的时候 csm普通都是被庇护起来的,虽然用法假密码0xffff时rom bootload-er会把它解锁。c编译器的code_section命令可以用来为flash控制寄存器的初始化函数创建自立的可衔接段。例如:假定flash控制寄存器的配置在c函数initflash()中实现,并且想把这个函数放置在名为secureramfuncs的可衔接段当中。下列的c代码例程显示了 code_section指令在flash存储器配置中的正确使用:secureramfuncs段可以用法用户
7、衔接指令文件(.cmd)举行衔接。这个段需要自立的装载和运行地址。另外,还想让生成一些全局符号,这些全局符号可以用来打算装载地址、运行地址、段长度。在实现把这个段从装载地址拷贝到它的运行地址时需要这些信息。用户衔接指令文件如下所示:在这个例子中,假定存储器flash和secure_ram都已经在用户衔接指令文件中的memory段中定义。这些存储器的page标识符要与它们的存储器定义相匹配。在上面的例程中假定两个存储空间都已经在page 0(程序存储空间)中声明过了。run_start、load_start、load_end命令将生成全局符号,这些全局符号有特定的名称,对应着相应的地址。最后,这
8、个段必需在运行时从flash拷贝到ram,可以用到编译器运行支持库里面的函数 memcpy()。23性能最优化常数是那些用的const类型关键词声明的数据结构。编译器把全部的常数放置在.econst段中(假定为大存储模式)。当前tms320f28xx器件上的特别管道(special pipelining)提高flash上运行代码的性能时每次拜访位于片上flash中的数据常数会占用许多周期。特殊是在150 mhz tms320f281x dsp上flash等待状态要达到5个周期100 mhz tms320f280x dsp达到3个周期。所以,拜访片上ram中的常数与常数表则成为沉重的负担。然而,
9、分立式系统要求全部的初始化数据(如常数)最初都是位于非易失性存储器中,所以,必需为想拜访的ram中的常数建立自立的装载和运行地址在运行时把这些常数从片上flash中拷贝到ram中。这里介绍两种不同的实现办法。办法一:在ram中运行全部的常数阵列。这种办法是为囫囵.econst段指定自立的装载和运行地址。其益处是简单用法,而坏处是ram的用法量十分大(可能惟独少量常数需要迅速拜访,但是用这种办法全部的常数都位于ram)。在用户衔接指令文件中容易地为囫囵.econst段指定自立的装载和运行地址,然后在运行时通过拷贝囫囵.econst段的方式往工程中添加代码。例如:办法二:在ram中运行特定的常数阵
10、列。这种办法是在运行时有挑选性地从flash拷贝常数到ram。与办法一相像,这个流程能够完成预期功能,不同点是惟独在命名段中被挑选了的常数才会被拷贝到ram中(而不是把全部的常数都拷贝到ram 中)。假定想创建在ram中运行的5个字的常数阵列,并命名为table。data_section命令用来把table放置在名为ramconsts的用户自定义段中。相应的c源程序如下所示:用法用户衔接指令文件衔接ramconsts段,装载到flash而从ram中运行,生成全局符号来协助存储器拷贝。用户衔接指令文件如下所示:最后,在运行时必需把table从装载地址拷贝到运行地址:3 csm密码的编程tms32
11、0f28xx器件上的代码平安模块csm提供了庇护,防止非法的程序拷贝。在当前的tms320f28xx器件中,囫囵 flash、otp存储器,lo和l1都被csm庇护(flash配置寄存器同样被庇护)。当器件被庇护的时候,惟独从被庇护的存储空间运行的代码可以拜访(读或写)其他被庇护存储空间中的数据。从非庇护的存储空间运行的代码不行以拜访被庇护存储空间中的数据。csm用法128-bit密码组成8个单独的16-bit字。在当前的tms320f28xx器件上,这些密码被存储在flash 的最高8个字中(如地址:ox3f7ff8-ox3f7fff)。在开发过程中,建议在密码位置放入假密码0xffff。用
12、法假密码时,对csm解庇护只需假读密码位置。把假密码放在密码位置是很简单的由于在flash编程过程中flash被清除后这些位置的状态将会是0xffff。用户只需要在自己的代码工程中避开衔接任何段到密码地址,密码将保持为oxffff。在开发完成以后可能想把真正的密码放在密码位置中。另外,为了正确地庇护csm模块,当前tms320f28xx器件上的csm 模块需要编写值ox0000到flash的地址0x3f7f80-ox3f7ff5。完成这两个任务的最容易的办法是用少量汇编语言举行编程。下面是一个汇编代码例子,这个例子指定了想要的密码值,并且把它们放在一个名为pass-words的初始化段中。另外
13、创建了一个名为csm_rsvd的初始化段,这个段的值所有是0x0000并且这个段有适当的长度以适合地址ox3f7f80-0x3f7ff5。注重,这个例子显示的是假密码值0xffff用户可以用自己的密码代替这些假密码。在这里必需警告用户:不要把8个密码的值所有设为ox0000,这样做会永远地锁定csm模块!passwords和csb_rsvd段要由用户衔接指令文件放置在存储器中。下面的例子适用于当前tms320f28xx器件(对于其他器件,请参考器件数据手册以确定密码和csm保留位置的地址)。4 在dsp复位以后从flash运行代码tms320f28xx具有引导rom(rom bootloade
14、r),器件复位以后rom bootloader能把代码运行转到flash中。当引导模式挑选引脚被配置为"跳转到flash"时rom bootloader将跳转到flash中位于地址ox3f7ff6处的命令。用户需要在这个地址上支配一条命令,这条命令跳转到用户代码。因为csm密码从地址ox3f7ff8开头,所以刚好有2个字可用于存放这个跳转命令。并非巧合的是,长跳转命令(在汇编代码中为lb)刚好占用2个字。普通状况下,跳转命令将会跳转到c编译器运行支持库中c环境初始化程序的起始位置。这个程序的人口标号是_c_int00。在这个程序没有运行的时候c代码就不能运行。同样地,有时候
15、在开头运行用户的c应用程序之前需要执行少量的汇编代码(例如:禁止看门狗时钟外设)。这样,跳转命令需要跳转到用户汇编代码的起始位置,需要在flash中正确定位跳转命令。能达到这个目的的最容易的办法是用法汇编代码。在下面的例子中创建了一个名为codestart的已命名初始化段这个段包含了一个长跳转可以跳转到c环境初始化程序。需要用用户衔接指令文件把codestart段放置在存储器中。用户须在用户衔接指令文件memory部分的page 0上定义一个名为begin_flash的存储器块。codestart段将被衔接到这个存储器块。下面的例子针对当前tms320f28xx器件对于其他的器件,参考相应的数
16、据手册以确认flash目标地址的引导。5 c环境引导时禁止看门狗计时c编译器运行时支持库中的c环境初始化函数是_c_int00,它完成全局和静态变量的初始化。包括为每个初始化全局变量把数据从.cinit段(位于片上flash存储器)拷贝到.ebss段(位于ram)。例如,当一个全局变量在源代码中声明为:int x="5""5"被放置在初始化段.cinit,而符号"x"被放置在ebss段。然后,_c_int00程序在运行时把"5"拷贝到"x"的位置。当软件中有初始化全局和静态变量的大量数值时。在c
17、环境引导程序完成并且调用main()(这里看门狗可以被配置或被禁止)函数之前看门狗定时器会超时。在代码开发的过程中,这个问题可能不会在ram中显现出来,由于从cinit段拷贝的数据被衔接到ram后会十分迅速地运行。然而,当cinit段衔接到内部flash时。拷贝每个数据将会耗费大量的周期。由于内部flash存储器缺省为最大等待状态(等待状态仅在用户代码运行到 main()后才会被配置)。另外。代码从flash中实现数据拷贝这又会增强完成数据拷贝需要的时光(代码取指和数据读绝对会拜访flash)。看门狗超时周期缺省到尽可能的最小值结合这么一个事实,看门狗超时变成真切的可能性。有一个容易的办法用法
18、ccs来检测看门狗超时,步骤如下:(1)为已经写入flash的代码装载符号(单击fileload symbolsload symbols only)(2)复位dsp(单击debugreset cpu)。(3)重新开头dsp(单击debugrestart)。假如bootloader被设置为"jump to flash"那么无需举行这一步。(4)运行到main()(单击debuggo_main)。假如没有到达main(),那么在c环境初始化程序完成之前看门狗很有可能已经溢出。解决看门狗超时问题最容易的方法就是在开头c环境初始化程序之前禁止看门狗。在main()到达之后重新使能看门狗,并且开头正常的代码
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024水利部门与水库运营管理公司合同
- 雨雪冰冻灾害处置应急预案
- 皮肤性病的预防与治疗课件
- 《关注女性心理健康》课件
- 四川省遂宁市重点中学2025届初中生物毕业考试模拟冲刺卷含解析
- 黑龙江省齐齐哈尔市2025届中考适应性考试生物试题含解析
- 江苏省扬州市田家炳实验中学2025届十校联考最后生物试题含解析
- 2024年09月2024中国建设银行青海省分行校园招聘140人笔试历年参考题库附带答案详解
- 2024年08月浦发银行北京顺义支行招考笔试历年参考题库附带答案详解
- 2024年08月哈尔滨银行大连分行诚聘5名工作人员笔试历年参考题库附带答案详解
- 狂犬病与破伤风的同意告知书
- 供热公司热量管理办法
- PPVT幼儿语言能力测试题附答案
- 致客户通知函
- 中华人民共和国职业分类大典电子版
- 各种预混料配方设计技术
- 全国非煤矿山分布
- 12千伏环网柜(箱)标准化设计定制方案(2019版)
- 思想品德鉴定表(学生模板)
- 满堂支架计算
- MA5680T开局配置
评论
0/150
提交评论