摘要:ARM7TDMI-S是ARM公司設(shè)計(jì)的一款32位精簡指令集處理器內(nèi)核,LPC210x系列是飛利浦半導(dǎo)體公司生產(chǎn)的基于ARM7TDMI-S內(nèi)核的芯片。在嵌入式系統(tǒng)設(shè)計(jì)中,針對嵌入式處理器和操作系統(tǒng)的Bootloader代碼的設(shè)計(jì)是一個(gè)難點(diǎn)。本文根據(jù)用LPC2106進(jìn)行嵌入式系統(tǒng)設(shè)計(jì)的實(shí)際經(jīng)驗(yàn),總結(jié)出基于ARM7TDMI-S內(nèi)核的嵌入式處理器芯片的Bootloader代碼設(shè)計(jì)的一般流程;給出LPC2106芯片在基于μC/OS-II操作系統(tǒng)的嵌入式應(yīng)用中,BootLoader程序的詳細(xì)設(shè)計(jì)流程及其中的一些關(guān)鍵技術(shù)和代碼。
引言
芯片的Bootloader代碼(即啟動代碼)就是芯片復(fù)位后進(jìn)入操作系統(tǒng)之前執(zhí)行的一段代碼,主要是為運(yùn)行操作系統(tǒng)提供基本的運(yùn)行環(huán)境,如初始化CPU堆棧、初始化存儲器系統(tǒng)等。Bootloader代碼與CPU芯片的內(nèi)核結(jié)構(gòu)、具體芯片和使用的操作系統(tǒng)等因素有關(guān)。其功能有點(diǎn)類似于PC機(jī)的BIOS(Basic Input/Output System,基本輸入輸出系統(tǒng))程序,但是由于嵌入式系統(tǒng)的軟硬件都要比PC機(jī)的簡單,所以它的Bootloader代碼要比BIOS程序簡單得多。
嵌入式系統(tǒng)被定義為:以應(yīng)用中為心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟件硬件可裁剪,適用于系統(tǒng)對功能、可靠性、成本、何種、功耗有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。嵌入式系統(tǒng)的核心部件是嵌入式處理器。隨著嵌入式系統(tǒng)在人們?nèi)粘I钪械膹V泛運(yùn)用,嵌入式處理器得到前所未有的飛速發(fā)展。基于ARM核的嵌入式處理器芯片種類繁多。由于ARM公司只設(shè)計(jì)內(nèi)核的不生產(chǎn)具體的芯片,即便是基于同一種內(nèi)核,不同廠家生產(chǎn)的芯片差別很大,因此不易編寫出統(tǒng)一的Bootloader代碼。ARM公司針對這一問題而采取的策略是,不提供完事的Bootloader代碼(ARM公司的開發(fā)工具ADS提供了一些功能代碼),Bootloader代碼不足的部分由芯片廠商提供或者由用戶自己編寫。飛利浦公司沒有提供LPC210x系列的Bootloader代碼,所以用戶只能自己編寫B(tài)ootloader代碼。
1 ARM7TDMI-S和LPC210x
ARM7TDMI-S是目前比較低端的ARM核—ARM核不是芯片,它與其它部件如RAM、ROM、片內(nèi)外設(shè)組合在一起才構(gòu)成實(shí)際的芯片。ARM7是用于對成本和功耗都非常敏感的消費(fèi)應(yīng)用的低價(jià)位、低功耗的32位核。其主要特點(diǎn)如下:馮.諾依曼結(jié)構(gòu)、3段流水線、0.9MIPS/MHz;非常低的功耗;嵌入式ICE-RT(In Circuit Emulation-Real Time,實(shí)時(shí)在線仿真)邏輯。
LPC2104/2105/2106基于一個(gè)支持實(shí)時(shí)仿真和跟蹤的ARM7TDMI-S內(nèi)核,并帶有128KB的高速Flash存儲器,128位寬度的存儲器接口和獨(dú)特的加速結(jié)構(gòu),使32位代碼能夠在最大時(shí)鐘速率下運(yùn)行。由于LPC2104/2105/2106具有非常小的尺寸和極低的功耗,它們非常適合于那些將小型化作為主要要求的應(yīng)用,例如存儲取控制和POS機(jī)。帶有寬范圍的串行通信接口、片內(nèi)多達(dá)64KB的SRAM,由于具有大的緩沖區(qū)和強(qiáng)大的處理器能力,它們非常適合于通信網(wǎng)關(guān)和協(xié)議轉(zhuǎn)換器、軟件調(diào)制解調(diào)器、聲音識別以及低端的圖像處理。而多個(gè)32位定時(shí)器、PWM輸出和32個(gè)GPIO,使它們特別適用于工業(yè)控制和醫(yī)療系統(tǒng)。LPC2106是LPC210x系列的一種,其它兩種為LPC2104/2105。它們都基于ARM7TDMI-S內(nèi)核。三種芯片唯一的區(qū)別就是SRAM的容量大小:LPC2106是64KB,而LPC2104是16KB,LPC2105是32KB。
2 Bootloader代碼
2.1 Bootloader代碼的作用
嵌入式系統(tǒng)的資源有限,應(yīng)用程序通常都是固化在ROM中運(yùn)行。ROM中的程序執(zhí)行前,需要對系統(tǒng)硬件和軟件運(yùn)行環(huán)境進(jìn)行初始化。這些工作是用匯編語言和C語言編寫的Bootloader代碼完成的。在ARM處理器的嵌入式系統(tǒng)中,Bootloader代碼的作用主要有以下幾點(diǎn):
*初始化CPU各種模式的堆棧和寄存器;
*初始化系統(tǒng)中要使用的各種片內(nèi)外設(shè);
*初始化目標(biāo)板;
*引導(dǎo)操作系統(tǒng)。
2.2 Bootlader代碼設(shè)計(jì)的一般流程
Bootloader代碼是嵌入式系統(tǒng)中應(yīng)用程序的開頭部分,它與應(yīng)用程序一起固化在ROM中,并首先在系統(tǒng)上運(yùn)行。設(shè)計(jì)好Bootloader代碼是設(shè)計(jì)嵌入式程序的關(guān)鍵,也是系統(tǒng)能夠正常工作的前提。Bootloader代碼所執(zhí)行的操作主要信賴于CPU內(nèi)核的類型,以及正在開發(fā)的嵌入式系統(tǒng)軟件中需要使用CPU芯片上的哪些資源。Bootloader代碼的一般流程(即Bootloader代碼應(yīng)該進(jìn)行的操作)如圖1所示。
2.3 基于LPC2104和μC/OS-II是多任務(wù)的實(shí)時(shí)操作系統(tǒng)。針對該款芯片和多任務(wù)實(shí)時(shí)操作系統(tǒng)的Bootloader程序的流程如圖2所示。
2.3.2 關(guān)鍵代碼分析
;中斷向量表,給出了CPU芯片出現(xiàn)異常時(shí)應(yīng)該轉(zhuǎn)去執(zhí)行的程序地址
Vectors
LDR PC,ResetAddr
LDR PC,SWI_Addr
LDR PC,SWI_Addr
LDR PC,PrefetchAddr
LDR PC,DataAbortAddr
DCD 0xb9205f80
LDR PC,[PC,#-0xff0]
LDR PC,FIQ_Addr
ResetAddr DCD Reset
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD 0
FIQ_Addr DCD FIQ_Handler
;InitStack函數(shù),其功能是初始化CPU各種模式的堆棧
InitSatck
MOV R0,LR ;因芯片模式切換,故將程序返回地址保存至R0,同時(shí)在初始化堆棧完成后使用R0返回
MSR CPSR_c,#0xd3 ;設(shè)置管理模式堆棧
LDR SP,StackSvc
MSR CPSR_c,#0xd2 ;設(shè)置中斷模式堆棧
LDR SP,StackIrq
MSR CPSR_c,#0xd1 ;設(shè)置快速中斷模式堆棧
LDR SP,StackFiq
MSR PSR_c,#0xd7 ;設(shè)置中止模式堆棧
LDR SP,StackAbt
MSR CPSR_c,#0xdb ;設(shè)置未定義模式堆棧
LDR SP,StackUnd
MSR CPSR_c,#0xdf ;設(shè)置系統(tǒng)模式堆棧
LDR SP,StackUsr
MOV PC,R0
StackUsr DCD UsrStackSpace+(USR_STACK_LEGTH-1)*4
StackRvc DCD SvcStackSpace+(SVC_STACK_LEGTH-1)*4
StackIrq DCD IrqStackSpace+(IRQ_STACK_LEGTH-1)*4
StackFiq DCD FiqStackSpace+(FIQ_STACK_LEGTH-1)*4
StackAbt DCD AbtStackSpace+(ABT_STACK_LEGTH-1)*4
StackUnd DCD UndtStackSpace+(UND_STACK_LEGTH-1)*4
;系統(tǒng)初始化代碼
Reset
BL InitStack ;調(diào)用InitStack函數(shù)初始化芯片各種模式的堆棧
BL TargetResetInit ;調(diào)用TargetResetInit函數(shù)對系統(tǒng)進(jìn)行基本初始化
B _main ;跳轉(zhuǎn)到ADS提供的啟動代碼_main函數(shù)處,它初始化函數(shù)庫并最終引導(dǎo)CPU進(jìn)入操作系統(tǒng)的main()函數(shù)
上面的程序代碼只包含了流程圖中的幾個(gè)主機(jī)步驟。這些步驟都是必不可少的,其余的步驟都在TargetResetInit函數(shù)中加以實(shí)現(xiàn)。本例中的TargerReset Init函數(shù)如下:
void TargetResetInit(void)
{/*設(shè)置系統(tǒng)各部分時(shí)鐘*/
PLLCON=1;
#if((Fcclk /4)/Fpclk==1
VPBDIV=0;
#endif
#if((Fcclk/4)/Fpclk==2
VPBDIV=2;
#endif
#if((Fcclk/4)/Fpclk==4
VPBDIV=1;
#endif
#if(Fcco/Fcclk)==1
PLLCFG=((Fcclk/Fosc)-1)|(1<<5);
#endif
#if(Fcco/Fcclk)==2
PLLCFG=((Fcclk/Fosc)-1|(2<<5);
#endif
#if(Fcco/Fcclk)==4
PLLCFG=((Fcclk/Fosc)-1|(3<<5);
#endif
#if(Fcco/Fcclk)==8
PLLCFG=((Fcclk/Fosc)-1)|(4<<5);
#endif
PLLFEED=0xaa;
PLLFEED=0x55;
while(PLLSTAT &(1<<10)==0)
PLLCON=3;
PLLFEED=0xaa;
PLLFEED=0x55;
/*設(shè)置存儲器加速模塊*/
MAMCR=2;
#if Fcclk<20000000
MAMTIM=1;
#else
#if Fcclk<40000000
MAMTIM=2;
#else
MAMTM=3;
#endif
#endif
/*初始化VIC,使芯片在進(jìn)入μC/OS-II多任務(wù)環(huán)境前關(guān)中斷*/
VICIntEnClr=0xffffffff;
VICVectAddr=0;
VICIntSelect=0;
/*其它步驟的代碼與實(shí)際的軟件功能相關(guān),不具有代表性,故在此不列出*/
}
3 結(jié)論
本文介紹的Bootloader代碼已經(jīng)在基于Philips公司的LPC2106芯片開發(fā)的系統(tǒng)上運(yùn)行并測試通過。針對不同的CPU芯片編寫B(tài)ootloader代碼,首先要了解該CPU的內(nèi)核結(jié)構(gòu)、指令系統(tǒng),其次是具體芯片的結(jié)構(gòu)和各種片上資源,以及所采用的操作系統(tǒng)。以上所列的設(shè)計(jì)流程不是一成不變的,在具體應(yīng)用中要權(quán)衡取舍。
- ARM7(50049)
- 代碼設(shè)計(jì)(6116)
相關(guān)推薦
ARM7 系列微處理器有哪些特點(diǎn)
ARM7TDMI (Rev 3)核心處理器產(chǎn)品概述
ARM7TDMI技術(shù)參考中文手冊
ARM9TDMI技術(shù)參考手冊
ARM 應(yīng)用系統(tǒng)開發(fā)詳解──基于S3C4510B 的系統(tǒng)設(shè)計(jì)--ARM嵌入式
ARM9嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)教程
ARM9嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)教程
ARM嵌入式系統(tǒng)應(yīng)用中的問題總結(jié)分析
ARM嵌入式系統(tǒng)應(yīng)用中的問題總結(jié)分析
ARM嵌入式系統(tǒng)應(yīng)用中的問題總結(jié)分析
ARM嵌入式系統(tǒng)應(yīng)用中的問題總結(jié)分析
ARM嵌入式系統(tǒng)應(yīng)用中的問題總結(jié)分析
ARM嵌入式系統(tǒng)的基本結(jié)構(gòu)
ARM嵌入式系統(tǒng)的學(xué)習(xí)步驟
ARM嵌入式系統(tǒng)的學(xué)習(xí)步驟
ARM嵌入式系統(tǒng)的學(xué)習(xí)步驟
ARM嵌入式系統(tǒng)的學(xué)習(xí)步驟
ARM嵌入式系統(tǒng)的學(xué)習(xí)步驟
ARM嵌入式系統(tǒng)的學(xué)習(xí)步驟
ARM嵌入式系統(tǒng)硬件設(shè)計(jì)及應(yīng)用實(shí)例
ARM嵌入式Linux 系統(tǒng)開發(fā)從入門到精通
ARM嵌入式Linux系統(tǒng)開發(fā)從入門到精通
ARM嵌入式Linux系統(tǒng)開發(fā)詳解
ARM嵌入式學(xué)習(xí)經(jīng)典40問
ARM嵌入式操作系統(tǒng)匯總
ARM嵌入式最小系統(tǒng)的啟動架構(gòu)是什么?
ARM和嵌入式系統(tǒng)方向介紹
嵌入式ARM MPU在醫(yī)療電子系統(tǒng)中的應(yīng)用
嵌入式ARM MPU在醫(yī)療電子系統(tǒng)中的應(yīng)用 7頁 0.4M
嵌入式ARM原理與應(yīng)用
嵌入式系統(tǒng)中的掉電保護(hù)過程是什么樣的?
嵌入式系統(tǒng)學(xué)習(xí)步驟
嵌入式系統(tǒng)開發(fā)流程
嵌入式系統(tǒng)掉電保護(hù)實(shí)現(xiàn)的過程是什么?
嵌入式系統(tǒng)的開源軟件發(fā)展如何?
嵌入式系統(tǒng)結(jié)構(gòu)與協(xié)同性探討
嵌入式系統(tǒng)開發(fā)過程中的常見問題和解決方法
嵌入式Linux怎么學(xué)?給大家推薦幾本學(xué)習(xí)嵌入式系統(tǒng)的書籍
嵌入式操作系統(tǒng)怎么選擇?
嵌入式硬件系統(tǒng)的相關(guān)資料分享
嵌入式網(wǎng)絡(luò)系統(tǒng)設(shè)計(jì)(光盤):基于Atmel ARM7系列
嵌入式軟件代碼保護(hù)系統(tǒng)是由什么構(gòu)成的?
μC/OS-II在LPC213X上有哪些移植方案?
《ARM嵌入式系統(tǒng)基礎(chǔ)教程》
《ARM嵌入式系統(tǒng)基礎(chǔ)教程》PDF高清版
《ARM嵌入式系統(tǒng)基礎(chǔ)教程》下載
【下載】ARM嵌入式系統(tǒng)基礎(chǔ)教程(周立功第2版)
【下載】《ARM9 嵌入式系統(tǒng)設(shè)計(jì)與開發(fā)教程》
【我是電子發(fā)燒友】淺談嵌入式ARM開發(fā)的前世今生
一種嵌入式系統(tǒng)用于多媒體實(shí)時(shí)數(shù)據(jù)的網(wǎng)絡(luò)傳輸設(shè)計(jì)
與嵌入式相關(guān)的資料
什么是嵌入式開發(fā)?
基于ARM7實(shí)現(xiàn)嵌入式應(yīng)用啟動程序
基于ARM7的嵌入式音頻處理系統(tǒng)的設(shè)計(jì)
基于ARM-Linux和S3C2440的嵌入式Linux內(nèi)核設(shè)計(jì)
基于ARM嵌入式系統(tǒng)的自動化配送系統(tǒng)
基于ARM怎么搭建嵌入式Linux系統(tǒng)?
基于ARM的嵌入式系統(tǒng)與C語言編程的結(jié)合
基于ARM的嵌入式系統(tǒng)設(shè)計(jì)
基于ARM高速閃存MCU應(yīng)對廣泛嵌入式需求
基于嵌入式操作系統(tǒng)的開發(fā)方法有哪些?
基于μClinux ARM的嵌入式系統(tǒng)的設(shè)計(jì)
基于網(wǎng)絡(luò)加載的嵌入式BootLoader有什么優(yōu)點(diǎn)?
基于網(wǎng)絡(luò)加載的嵌入式BootLoader的設(shè)計(jì)與實(shí)現(xiàn)
大佬都在看的嵌入式復(fù)習(xí)提綱
如何利用ARM7嵌入式單片機(jī)設(shè)計(jì)視頻報(bào)警系統(tǒng)?
如何利用ARM7設(shè)計(jì)嵌入式工控網(wǎng)絡(luò)?
如何學(xué)習(xí)嵌入式系統(tǒng)
如何學(xué)習(xí)嵌入式系統(tǒng)【硬件篇】
如何學(xué)習(xí)嵌入式系統(tǒng)(基于ARM平臺)
如何學(xué)習(xí)嵌入式系統(tǒng)(基于ARM平臺)
如何通過嵌入式ARM設(shè)計(jì)CQT測試系統(tǒng)?
對ARM在嵌入式開發(fā)中的概述
求好的嵌入式教材推薦
淺談ARM嵌入式系統(tǒng)如何學(xué)習(xí)與入門
淺談嵌入式系統(tǒng)開發(fā)流程
熟知ARM如何構(gòu)架,了解嵌入式系統(tǒng)基本核心
移植BootLoader嵌入式操作系統(tǒng)
請問一下ARM7TDMI-S 和 ARM7TDMI 有何區(qū)別呢
采用ARM怎么實(shí)現(xiàn)嵌入式監(jiān)測系統(tǒng)?
ARM7TDMI中文資料參考手冊pdf
![](https://skin.elecfans.com/images/2021-soft/load.png)
arm7tdmi介紹
![](https://skin.elecfans.com/images/2021-soft/load.png)
ARM7TDMI-S在嵌入式系統(tǒng)中的Bootloader代碼
![](https://skin.elecfans.com/images/2021-soft/load.png)
ARM7TDMI-S 在嵌入式系統(tǒng)中的Bootloader代
![](https://skin.elecfans.com/images/2021-soft/load.png)
ARM7TDMI-S(Rev 4)技術(shù)參考手冊
![](https://skin.elecfans.com/images/2021-soft/load.png)
基于ARM嵌入式系統(tǒng)開發(fā)與應(yīng)用_吳明暉
![](https://skin.elecfans.com/images/2021-soft/load.png)
ARM7TDMI-S(Rev 4)技術(shù)手冊手冊
![](https://skin.elecfans.com/images/2021-soft/load.png)
初識ARM嵌入式系統(tǒng)
![](https://skin.elecfans.com/images/2021-soft/load.png)
評論