没有合适的资源?快使用搜索试试~ 我知道了~
TMS320F2812上实现从flash拷贝整个程序到RAM上运行的方法
5星 · 超过95%的资源 需积分: 20 37 下载量 107 浏览量
2011-11-03
21:53:47
上传
评论
收藏 177KB DOC 举报
温馨提示
试读
16页
TMS320F2812上实现从flash拷贝整个程序到RAM上运行的方法探讨 实现flash 到 RAM的程序转换,加快运行速度
资源推荐
资源详情
资源评论
在 TMS320F2812 上实现从 flash 拷贝整
个程序到 RAM 上运行的方法探讨
1. 前言
里,代码从内部 里运行,比从内部 里运行
要慢 左右,所以对运行时间苛刻的程序直接在 里运行,往往不能满
足要求。故而,需要将代码拷贝到 以提高运行速度。 文档只提供了
部分代码从 拷贝到 中的方法。然而,在一些应用中,需要将整个
代码段都拷贝到 中执行,以提高整体运行速度。本文通过对
的启动代码研究,来探讨如何在从 启动后将整个代码
段拷贝到 中,然后在 中运行的方法。
2. TMS320F2812 启动过程
的内部存储器中, 是 的 !
"。
图 1 2812 内部 BootRom 地址图
# 向量表位于北部 " 的底端$%。当
&'()*)' (*' 时,该向量表被激活。复位向量出厂时
被编程指向函数 +,! !。这个函数开始启动过程。当然,启动过程完成
之后,我们需要初始化 ) 中断向量表,同时使能 )- ./。初始化
) 中断向量表之后,除了复位,所有中断向量均从 ) 获得。
0
启动代码固化在该内部 " 中。当 上电或
者热复位后,首先由芯片本身将一些寄存器初始化:
)1,-21$)*)'(&'("3)'(")'("'%(
然后 14 芯片会对 5* 管脚采样,根据采样值的高低,来决定启
动模式是“微处理器模式”还是“微计算机模式”。当 5*' 时,为“微
计算机模式”,此时,启动 " 存储器被使能而 5*6 +27 被禁止。
复位向量从内部启动 " 获取,启动 " 在复位期间一直被使能。
启动 " 里的复位向量(位于 )指向 +,! ! 函数$位于
%。在完成器件初始化$+,! !%之后, ! 128 将检查 9"
管脚的状态,然后再决定选用的启动模式。启动模式有 种:跳转到
,跳转到 (跳转到 " 或者调用片上启动程序。
+,! !:+.!, +所做工作有:;初始化状态寄存器;;将堆栈指针设为
( 作为启动过程中的堆栈);;读 密码保护部
分;;调用 22.! ! 12;<;调用 ),! !
在完成选择启动模式过程之后,根据选择的启动模式,14 会跳到相应
的启动入口。也可以自己选择启动入口。这些入口地址都在这之前已经
被 14 定义好的。
如果从 启动,那么我们的管脚状态应该是
GPIOF4 GPIOF12 GPIOF3 GPIOF2
(SCITXDA) (MDXA) (SPISTEA) (SPICLK)
内部上拉 无内部上拉 无内部上拉 无内部上拉
Mode Selected
1 x x x Jump to Flash address 0x3F 7FF6
下图为 !"函数的流程图
图 !"函数的流程图
对于内部 启动,如图
0
图 跳转到 启动的流程图
在 7 必须放置一个跳转指令,该指令跳转到你自己的启动代码或
者应用程序。
3. 搬移思路
根据上节 的启动过程, 启动过后,跳到 7,然后根据
其内容再跳转到应用程序。我们在这里稍微修改一下,就可以将 指
针跳到 首地址,程序就能在 里运行了。
将“搬移程序”烧在 上,从 启动之后,“搬移程序”会被执行。
“搬移程序”做的工作就是将“应用主程序”代码拷贝到内部 ,然后经
过初始化环境$+,! !,),! !%,将 指针指向 里代码首地址。
这样,你的程序就在 中运行起来了。也就是说,我们需要一个“搬
移程序”,启动时运行,用来拷贝 上的代码到 中;当然,还需
要一个你的“应用主程序”,该主程序被“搬移程序”从 里“挪”到
后在 中运行。我们还要做的工作就是,把“应用主程序”烧写到
里的某一块,这个块又不会影响 启动时运行“搬移程序”。完成这个
烧写过程的程序,我们称之为 烧写程序。
总结一下,完成整个搬移过程,一共需要三个程序。“搬移程序”和
“应用主程序”被固化到 里“烧写 程序”将“应用主程序”烧入
中指定的块中。 的烧写 插件用来烧写“搬移程序”。
4. 搬移方法
)首先你要用的主程序必须编译通过,并且通过仿真器在 里运
行无问题。将主程序的 文件进行改写,保证程序段$;!2! 段%分配在连
续的存储空间。程序从 启动,所有初始化段链接在非易失存储器里,
而非初始化段必须链接在易失存储器。我们可以把初始化段都放在一个连
续的内部 空间,而非初始化段放在另一个内部 空间。如果你的
代码不是很大,也可以都放在连续的 空间。但在实际项目中,通常你
会遇到存储空间不够的问题。这时就要考虑将无关紧要的段放在另外的非
程序空间了。
.cinit Flash
.cio RAM
.const Flash
.econst Flash
.pinit Flash
.switch Flash
.text Flash
.bss RAM
.ebss RAM
.stack Lower 64Kw RAM
.sysmem RAM
.esysmem RAM
.reset RAM1
0
例如:
view plaincopy to clipboardprint?
1. MEMORY
2.
3. {
4.
5. PAGE0:
剩余15页未读,继续阅读
资源评论
- superchao20152014-10-10还不错,正需要这个,谢谢
斯毛叶
- 粉丝: 0
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功