基于ARM核的Bootloader代码的分析与设计

更新时间:2023-05-24 02:54:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Bootloader代码的分析与设计

A M开发与应用 R文章编号: 0- O 1 8W ( 0

基于A M核的 B ol d r R o t a e代码的分析与设计 oT e ayiA d s O B ola e c d B sd A M oe h A l s D勺n o t d r e e O R C r n s n e f o o a n

(南学张宏财赵曾贻江大)Z a,oga Za, gi gH nci oZny hn h e摘要:olae是系统上电或复位后首先运行的一段代码,odae代码( Boo r d Bood r即启动代码)的好坏对整个系姚的运行效率有着

重要的影响,. tae代码与芯片的特性有着紧密的联系。本文根据用LC20 D (R DvoeSi) rBoo r old P21在A SA M epr e开发9境 el u t下进行嵌入式系统设计的实际经脸。总姑出基于A M T M内核的LC20处理器的Boodr R 7D I P21 olae代玛设计的详细涟程及其中的一些关健技术和代码

关祖词:R T M1 A M7 D核消D;odae代码;P 21 SB oodr L C 20中圈分类号 T 38 P 6. 1文献标识码: A

ui f y A s at odae i a tn cd wi fsy s r t gt g cit drsmn . T e at boodr bt eBoodr s i o oe c i t r ae s e ei e t i a ee g h q l o odae r: s e o f h h l u f y m t l r y n c r n t s n e c o o i h h e c e iprn i une r n g cny wo s t . t boo e cd hscoe n et n t te aatr o hs oat ec o u i eiec o hl y e B t oldr e ls c nci w h c rce- d a m t n l f n n f i n f e sm u h ta o a D A e o ue m ym s ii o ci. s e acrn tp ta e eec o dsn g C20 bde s t i A S R Dvl e Si )e sc h Tippr o i o i l rne egi L 21 e edd e n ( M e pr t d- t f h a c d g r c x i p a p f in P T ccmt c, nl e t ae fw d tho g ad e d i i boo e w i bs o ARM7 DMI iu sne oc d t dtl l a ky e nl y c o eg n ota

r c a d n r a c u h eid n e c o n o f n g d h h e a o d s

-eC21 p cso. lL 20 esr oP r p d o前言

K y rs A MT D C r;D;ot ae C d;P 21 e w d: T MI e S n odr e C 20 o R o A B l o L

初始化用户程序执行环境 引导主应用程

基于A M核的微处理器是目 R前嵌人式领域应用 2基于 P 21 L C 2 0的 B ola e键 o t d r关 o最广泛的RS微处理器, I C以其低成本、低功耗、高性能等优点占据了嵌人式系统应用领域的领先地位。基代码设计于A M核的芯片多数为复杂的片上系统集成,在芯 R 2 LC20 o ldr 1的 Boo e代码流程: . P2 1 ta片上电或复位时,需要专门的一段代码来完成对系统根据前面介绍的一般步骤, 利用 A M公司推出 R的初始化。启动代码就是芯片上电或复位后进人应用的A S D开发工具,设计出LC20 ol d的具 P21的Boo e ta r程序 m i )数前执行的一段代码, a (函 n它主要为运行 C体流程( 1和关键代码。如图 )程序提供基本的运行环境。 Pi s hi公司生产的LC20 l p P21是基于 A M T M R 7D I核的 RS微处理器, L C特别适用于工业控制、医疗系 1启动代码 的流程统、访问控制。A S A M公司推出的A M核微处 D是 R R Buo e 启动) ol dr ta (代码类似于 P机的 BO ( C IS基本理器集成开发工具,成熟的版本是A S. A S D 1,由命 2 D输人输出系统)它从系统上电或复位开始接管CU, P,令行开发工具、R A M实时库、U开发环境、 GI实用程序 Bno e根据实现的功能不同, ol dr ta其复杂程度也各不和支持软件组成,支持软件调试及」A T G硬件仿真调相同,一般随具体的目标系统和开发系统有所区别,试,支持汇编、和C十 C十源程序。使得每一种芯片的启动代码差别较大,不易编出统一的启动代码,但通常包括以下几个步骤: 设置程序入口指针 设置中断向量表 初始化存储器系统

U初始化 C各种模式的堆栈和寄存器 P 标系统中要使用的各种片内外设初始化目张宏财:硕士研究生图 1基于 LC 20 Boo e代码流程 P 2

1的 oda c d

公.,阅:46, 1自局号- 3年 3胡、 8 6一 - 2 0 7 9元

Bootloader代码的分析与设计

A M开发与应用 R 2设置中断向量表 . 2

中文核i期刊《 l l微计算机值息,嵌入式与S C20年绍2卷第S期 ( O) 6 0 2

模式(n)系统模式( se除用户模式之外的其他6 ud、 s ) y A M芯片上电或复位后,系统进人管理模式、种模式称为特权模式, R在这些模式下,程序可以访问 A M状态,C RS指向0 0000 R P ( I) x 000地址处, 0所以必所有的系统资源,也可以任意进行处理器模式的切须保证向量表代码定位在00000处, x0000或者映射到换。 00000处, C20 x0000 L 21系统上电或复位时,存储器 P每一种模式的堆栈指针寄存器(P都是独立的, S)映射控制寄存器(E M P等于。BoB c被重因此对程序中需要用到的每一种模式都要给 S M M A), t k o l o P寄存映射到地址 00000处, x0000选择从 BoB c读取中器定义一个堆栈地址。方法是改变状态寄存器 CS ot k l o PR断向中断向量表为每一个中断设置 1量。个字(个字中的状态位, 4使处理器切换到相应的模式,然后再给节)的存储空间,存放一条跳转指令,通过这条指令使 S赋值。 P这里有两点要注意:要尽量给堆栈分配快一、 P指针指向 C相应的中断服务程序人口,继而执行相应速和高带宽的存储器,因为堆栈性能的好坏对系统整的中断处理程序。LC 20 P 21的中断向量表和其它基于体性能有非常重要的影响。在处理器模式切换时,二、A M核的芯片中断向量表较类似, R只要注意 LC 20不要过早地进人用户模式, P21因为进人用户模式就不能要使向量表所有数据 3位累加和为零 ( 0000-对 CS进行修改切换到别的模式, 2 0 0000 x PR这样会对接下去 O 000C的8 x 001 0个字的机器码累,才能使用户的地程序造成影响,加)一般在系统初始化的最后阶段才将程序脱机运行,限于篇幅,在此省略中断向量表的代运行模式切换到用户模式。初始化堆栈代码如下:码。I i tc nt a k S

2初始化存储器系统 . 3初始化存储器系统是初始化代码中的一个重要

M V R L ,R O O涸芯片模式切换,故将程序返回地址保存到 R, O同时在初始化堆栈完成后

部分,因为许多操作系统在开始运行之前,希望了解使用 R返回 O存储器的组织情况。存储器系统初始化是通过软件设 MS C S a, d P R# x 3 R O定 FAH R M存储器的地址范围, L S,A数据总线宽度。 LR S S cSc投置管理模式堆栈 , kv D P t a由于LC20 P21是总线开放型芯片,具有4 Bn的个 ak MS C S _, 2 P R c# d R Oi存储器组,总线宽度可设置为8 1位或3位。位、 6 2初 L R S S cI , kq; _中断模式堆栈 D P t r a i tw¥始化存储器系统代码如下: MS C S _, d P R c# x l R O ReeI i st t n L R S ScF , ki; D P t q设置快速中 a断模式堆栈L R R, PN E 2 D= I S 1 D I】 F E ̄ C P F二E: R ) N MS C S _, d P R c# x7 R O

L R S S cA t , k b D P t aMS C S _, d P R c# xb R O

投置中止模式堆栈

LR, x 84 0 00 1 1; D R=# 9芯片加密, 1 G调试 I禁止.A TFI NE

L R S S cUd设置未定义模式堆栈 , kn; D P t aMS C S _, d P R c# xf R O

L R l O0 1 4 =xI 41设置总线的1 D R, 8 9;/ O引脚ENDI F

I R S=tks设置用户模式堆栈 ,S cUr; A P aMO P, C R V O

S R R,R] I[O T L R D= C G D R, B F O L R I= x0 0 e D R, 10 f f O f

2初始化目 标系统 . 5

SR R[O , T I A]

;设置外部第0个存储区

L R O= C G D R, F 1 B L R l= x0 0 e D R, 10f f 0

SR R, [0 T l R]SR R[O , T I R]

;设置外部第 1个存储区;设置外部第 2个存储区

为了LC20 1基本能够工作, P2在

进人mi ) a (函数 n前,须对目标系统进行一些基本的初始化工作。如: LC20 P21有不同的存储器映射方式,须根据硬件来设置存储器映射方式伪了避免混乱最好在进人mi ) a( n函数前设置系统各部分时钟等,关键代码如下:vi Tr R s n ( d te d ivi o ag d e e to )l #fe一 U D B G i f E d ME P=0 MMA 0;#n i e df

L R O= C G D R, B F 2 L R I= x0 0 e D R, 2 0f f 0 L R 0= C G D R, F 3 B L R I= x0 0 e D R, 2 0 f f 0 f

SR R[0 , T I R]没置外部第3个存储X 2初始化堆栈、 . 4改变处理器模式 A M处理器有 7 R种处理器模式,分别为:用户模

#fe _ U C P T I i f O d H ME P=0 MMA 0;#ni e df

式( r快速中 u) s、断模式(q、 f) i普通中断模式(q i) r管理模式( c、 s) v数据访问中止模式( t、 a) b未定义指令中止一 3一 6; 1怀局订0号:296 1 8 30c年 4 6-4

#fe一 H P I- I i f NC d

M M A 01 = x; EMP

*/根据预定义的宏,设

Bootloader代码的分析与设计

A M开发与应用 R....口.,口旦旦鱼旦....

置存储器映射方式中/#ni e df

#ni e df

*/设置系统各部分时钟 * /

PLO ; LC N=1相环),但不连接PL/ L*# ( c (cl 4=1 / c/ )= iF l F k ) f k pV B I=0 ; P DV#ni e df

/使能 PL锁 * I .

M M R=2 ;/使能 M M/ A C * A * 1初始化 I/ VC* * VCn n i l=0 IIE C t;禁止所有中断 VC et d=0 dr IV c A;设置向量地址寄存器(IV c dr的值为 0 VC et d) A

VC t l t 0将所有中断 c=; IIs e ne设置为IQ中断 R程序中的Fc, oF l c kFc, c须在头文件中 l c

pk定义。2初始化应用程序 . 6

# ( c ( c 4=2 / l/= i F l F k ) f k c p )V B I=2 ; P DV#n i e df

当所有的初始化工作完成后, 调用 A S D提供的 -m i m a是 A S a, n i n D的编译系统提供的一个函数,负责完成 C运行时库的初始化和应用程序执行环境

# ( c (c 4= / cl/= 4 i F l F k ) f k p )V B I二1 ; P DV

的化,后自 H到户的Mi涵数。初始最 .动 f用秦 a试代码为:B一 mi an

#ni ed f */设置外设时钟 (P时钟 VB p k与系统时钟(l的分频比* c) l (k c ) c/#f c cl= Fc )二2 i(co/ k F PL F ( c/ oc一11< ) L C G=( cl Fs) ) (<5 F k O;#ni e df

3结论 启动代码是嵌人式程序的开头部分, 它直接面对处理器内核和硬件控制器进行编程,并首先在系统上运行,因此写好启动代码是设计好嵌人式系统的关键。本文介绍的Boo e代码已 ol dr ta经在Pi s hi公司的 l pI C 20 . 2 1处理器上测试通过并运行稳定。对不同的 P

# (co cl= Fc ) 4 i Fc/ k= f PL F ( c Fs一1I< ) (cl/ o ) ) (< 5 LC G= F k c 1;#n i e df

材 (co cl= Fc )=8 Fc/ k PL F ( c/ o ) ) (< ) (c k Fs一11< 5 LC G= F l c 2;#ni e df

A M核芯片编写 Boo e代码, R ol dr ta不但要了解 A M R内核结构、指令系统,还要了解具体芯片的结构和各种片上资源。参考文献:

# Fc/ c k= Fc ) 1 i c f o l= 6

PLF ( c/ o ) ) (< 5/根 LCG=(ck Fs一11< ) * Fl c 3;据PL L的电流控制振荡器和系统时钟的频率比,设置P L的乘因子和除因子 * L/#ni e df

[杜春雷‘ M体系结构与编程[1 1] A R M.清华大学出版社北京:2以月

[马忠梅等. M嵌入式处理器结构与应用基础[I北京

2 l A R M北京:航空航天大学出版社 20 03

PLE D =O a; LFE xa

PLE D= x5 05; LFE */使用芯片要求的访问序列把数据写人 PL L相关寄存器 */

[白伟平, 3 1包启亮.基于A M的嵌入式 BoLae R ot r浅析[] o d J.微计算机信息, 0, -. 9-10 2 6 42 09 0 0 0 0 0[1立功等. M微控制器基础与实践圆.北京航空 4A 1 1 A R北京:航天大学出版社2 0 03

wi(LSA TT&(《 1) 0 hePL l( I 0二 ) );PL L跟踪完成 */PLO =3 LC N; PLE D =Oa; LFE xa

*/等待

[ A lw ls oic e Cr W it A M嵌入式 5 m N o, mn S s hs h著.] m . sD i y, i r S m g R系统开发一软件设计与优 M}化[l沈建华译北京:北京航空航天大学出版社. 0 2 5 0

P LE D= x5 05; LF E */使 PL L连上系统 * l */设置存储器加速模块( A ) MM */ M M R=0 ; AC/关闭 M M/ * A *#f ck<2 0 0 0 iF l c 0 0 00

MA I =七 MTM# le es

作者简介:张宏财(97 )男, 17-,安徽肥东人,民族:汉族,江南大学通信与控制工程学院硕士研究生,专业:控制理论与控制工程,主要研究方向:嵌人式系统应用, - a:c@ 6.m赵曾贻,副教授, Em i h l一7 1 c; z 3o男,主要研究方向:系统集成、嵌人式系统应用。A to bi i rd co: n,og i 7一, a, - uhr e n o utn Zag nc ( 7 )m n Fi r f t i h H a 1 9 e dn A hifk t bn i at m s r d t s dn i og u o: a ntnl, t g u e et n, h l e ao i a e r a t y a u n t cm ui tn cn l ol Su e ag e i h o m n ao ad t s o o ot r Y nt U - e ci n or c o h f hn z n

#f ck<4 0 0 0 0 0 0 0 iF l c

MA I =2 MTM;#l es e

M MI 二3 A TM; /根据 Fc * cl k的通

讯地址:242江苏省无翎市.溯大道 10 (112 8 0号大小来设置 M M定时寄存器 * A/江南大学 9号楼 60 1室)张宏财#ni e df

vrt mj cn l ien ad tl o, sy ei, o ot egerg cn t r m t r sy a c r n n i n o r h y ol e o o e - l c d ei: edd t apc i; e h co e bde s e plao a i tn m r y m itn s

雌稿日 20.1)( 期: 5 .修稿日 20..} 0 90期: 50 1 0 12

备…。、号26年,阅:46, 3 8 3一 - 0 9 9元

本文来源:https://www.bwwdw.com/article/d7f4.html

Top