在TMS320F2812上实现从flash拷贝整个程序到RAM上运行的方法探讨文档格式.docx
- 文档编号:22458947
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:23
- 大小:64.73KB
在TMS320F2812上实现从flash拷贝整个程序到RAM上运行的方法探讨文档格式.docx
《在TMS320F2812上实现从flash拷贝整个程序到RAM上运行的方法探讨文档格式.docx》由会员分享,可在线阅读,更多相关《在TMS320F2812上实现从flash拷贝整个程序到RAM上运行的方法探讨文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
将“搬移程序”烧在flash上,从flash启动之后,“搬移程序”会被执行。
“搬移程序”做的工作就是将“应用主程序”代码拷贝到内部RAM,然后经过初始化环境(InitBoot,ExitBoot),将PC指针指向RAM里代码首地址。
这样,你的程序就在RAM中运行起来了。
也就是说,我们需要一个“搬移程序”,启动时运行,用来拷贝flash上的代码到RAM中;
当然,还需要一个你的“应用主程序”,该主程序被“搬移程序”从flash里“挪”到RAM后在RAM中运行。
我们还要做的工作就是,把“应用主程序”烧写到flash里的某一块,这个块又不会影响flash启动时运行“搬移程序”。
完成这个烧写过程的程序,我们称之为flash烧写程序。
总结一下,完成整个搬移过程,一共需要三个程序。
“搬移程序”和“应用主程序”被固化到flash里“烧写flash程序”将“应用主程序”烧入flash中指定的块中。
TI的烧写flash插件用来烧写“搬移程序”。
4.
搬移方法
1)首先你要用的主程序必须编译通过,并且通过仿真器在RAM里运行无问题。
将主程序的CMD文件进行改写,保证程序段(.text段)分配在连续的存储空间。
程序从flash启动,所有初始化段链接在非易失存储器里,而非初始化段必须链接在易失存储器。
我们可以把初始化段都放在一个连续的内部RAM空间,而非初始化段放在另一个内部RAM空间。
如果你的代码不是很大,也可以都放在连续的RAM空间。
但在实际项目中,通常你会遇到存储空间不够的问题。
这时就要考虑将无关紧要的段放在另外的非程序空间了。
.cinit
Flash
.cio
RAM
.const
.econst
.pinit
.switch
.text
.bss
.ebss
.stack
Lower64KwRAM
.sysmem
.esysmem
.reset
RAM1
例如:
viewplaincopytoclipboardprint?
1.MEMORY
2.
3.{
4.
5.PAGE
0
:
6.
7.
RAMH0
origin
=
0x3F8000,
length
0x002000
8.
9.
10.
11.PAGE
1
12.
13.
/*
SARAM
*/
14.
15.
RAMM0M1
0x000000,
0x000800
16.
17.
RAML0L1
0x008000,
18.
19.}
20.
21.
22.
23.
24.
25.SECTIONS
26.
27.{
28.
29.
Allocate
program
areas:
30.
31.
.reset
>
PAGE
32.
33.
vectors
34.
35.
.cinit
36.
37.
.text
38.
39.
.const
40.
41.
.econst
42.
43.
.switch
44.
45.
46.
47.
data
48.
49.
.stack
50.
51.
.bss
52.
53.
.ebss
54.
55.
.sysmem
56.
57.}
从上面的CMD可知,主程序代码均放在RAMH0中,长度为0x2000。
2)其次,将该工程编译成功后,加载到内部ram,仿真器自动完成必要的初始化环境之后,pc指针应该指向_c_init00,记下现在PC指针的位置,在Boot.asm中会用到。
3)自制一个flash烧写程序,或者从网上下载其他网友的flash烧写程序,将目标地址放在除flashJ块以外的块中。
烧写的长度不能小于被烧写的主程序长度。
该烧写程序在RAM中运行。
其代码段不能和被烧写的主程序用的代码段存储区域相同,否则会破坏主程序在ram中的代码。
烧写之后,可以用CCS的Savedata功能,来查看flash中的数值是否和ram里主程序空间数值一致。
4)
用TI的烧写插件烧写“搬移程序”。
注意,该“搬移程序”要能在dsp启动后执行。
并且,烧写的时候,不能将上一步烧到flash上的主程序代码擦除。
“搬移程序”具体见下节。
5.
“搬移程序”具体实现方法
Boot.asm文件内容:
1.
.def
_InitBoot
3.
.ref
_EntryAddr_H
5.
_EntryAddr_L
.sect
"
.InitBoot"
11.;
13.;
15.;
17.;
1)
Initalizes
the
stack
pointer
19.;
2)
Sets
device
for
C28x
operating
mode
21.;
3)
Calls
main
boot
functions
23.;
an
exit
routine
25.;
27._InitBoot:
29.;
Initalize
pointer.
MOV
SP,
#0
;
33.;
running
in
mode.
C28OBJ
Select
object
C28ADDR
C27x/C28x
addressing
C28MAP
Set
blocks
M0/M1
CLRC
PAGE0
Always
use
MOVW
DP,#0
Initialize
DP
to
point
low
64
K
OVM
47.;
PM
shift
of
SPM
51.;
Read
password
locations
–
this
will
unlock
53.;
CSM
only
if
passwords
are
erased.
Otherwise
it
55.;
not
have
effect.
57.
MOVL
XAR1,#0x3F7FF8;
58.
59.
XAR0,*XAR1++
60.
61.
62.
63.
64.
65.
XAR0,*XAR1
66.
67.;
Cleanup
and
exit.
At
EntryAddr
68.
69.;
is
located
ACC
register
70.
71.
BF
_ExitBoot,UNC
72.
73.;
74.
75.;
_ExitBoot
76.
77.;
78.
79.;
80.
81.;
This
module
cleans
up
after
loader
82.
83.;
84.
85.;
Make
sure
deallocated.
86.
87.;
SP
0x400
exiting
88.
89.;
90.
91.;
Push
onto
so
RPC
be
92.
93.;
using
LRETR
jump
94.
95.;
entry
96.
97.;
Load
with
98.
99.;
Clear
all
XARn
registers
100.
101.;
ACC,
P
XT
102.
103.;
5)
also
clear
104.
105.;
since
was
on
106.
107.;
108.
109._ExitBoot:
110.
111.;
112.
113.;
Insure
that
deallocated
114.
115.;
116.
117.
SP,#0
118.
119.;
120.
121.;
bottom
stack.
endup
122.
123.;
when
we
finished
124.
125.;
126.
127.
*SP++,#0
128.
129.
130.
131.
132.
133.
NOP
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.;
152.
153.;
as
determined
154.
155.;
by
address
returned
156.
157.;
register.
158.
159.;
向堆栈中压入0x3f8000,该地址即为主程序在ram中运行的首地址。
160.
161.
*SP++,
#0x8000
162.
163.
#0x3F
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
POP
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.;
210.
211.;
Put
back
their
reset
state.
212.
213.;
214.
215.;
XARn,
XT,
216.
217.;
218.
219.;
220.
221.;
NOTE:
Leave
222.
223.;
(OBJMODE
1,
AMODE
0)
224.
225.;
226.
227.
ZAPA
228.
229.
XT,ACC
230.
231.
MOVZ
AR0,AL
232.
233.
AR1,AL
234.
235.
AR2,AL
236.
237.
AR3,AL
238.
239.
AR4,AL
240.
241.
AR5,AL
242.
243.
AR6,AL
244.
245.
AR7,AL
246.
247.
DP,
248.
249.;
250.
251.;
Restore
ST0
ST1.
Note
OBJMODE
252.
253.;
bit
restored
its
254.
255.;
left
set
256.
257.;
258.
259.;
260.
261.;
0x0000
ST1
0x0A0B
262.
263.;
15:
10
OVC
13
ARP
264.
265.;
9:
7
12
XF
266.
267.;
6
V
11
M0M1MAP
268.
269.;
5
N
reserved
270.
271.;
4
Z
9
272.
273.;
3
C
8
274.
275.;
2
TC
IDLESTAT
276.
277.;
EALLOW
278.
279.;
SXM
LOOP
280.
281.;
SPA
282.
283.;
VMAP
284.
285.;
286.
287.;
DBGM
288.
289.;
INTM
290.
291.;
292.
293.
294.
295.
*SP++,#0x0A0B
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TMS320F2812 实现 flash 拷贝 整个 程序 RAM 运行 方法 探讨