直播推薦
企業(yè)動態(tài)
- 紛享銷客發(fā)布首個企業(yè)級智能CRM平臺ShareAI
- 揭秘西企業(yè)數(shù)字化+低碳化轉(zhuǎn)型“工具箱”:西門子Xcelerator
- 企業(yè)AI賦能數(shù)智制造,用友U9 cloud世界級云ERP煥新升級
- 《“智“領(lǐng)石化,“質(zhì)“造未來——威圖石化行業(yè)數(shù)智化實踐白皮書》隆重發(fā)布
- 攜手共贏!德國Agfa搭載瑞典IPCO鋼帶,實現(xiàn)印刷設(shè)備振動銳減6倍,提升印刷速度與精度
- 創(chuàng)四方集團榮獲“知名商標品牌閃亮”證書,助力品牌戰(zhàn)略升級
- 皇冠CAD(CrownCAD)2025 R3版本來了,率先開啟C“Ai”D時代!
- 電費砍半!中國制冷展:海爾發(fā)布AI建筑最新成果
推薦展會
一、原理
如何讓嵌入式系統(tǒng)快速穩(wěn)定地啟動是一個重要問題。嵌入式系統(tǒng)的資源有限,程序通常都是固化在ROM 中運行。但在實際應(yīng)用中,為提高系統(tǒng)的實時性,加快代碼的執(zhí)行速度,系統(tǒng)啟動后程序往往要被搬移到RAM 中,因為RAM 的存取速度要比ROM 快得多,這樣大大提升系統(tǒng)的性能。啟動程序要完成的任務(wù)包括:硬件初始化,系統(tǒng)存儲系統(tǒng)的配置,復(fù)制二級中斷向量表。
二、啟動程序過程
● 系統(tǒng)硬件初始化
系統(tǒng)上電或復(fù)位后,程序從位于地址0x0 的Reset Exception Vector 處開始執(zhí)行,因此需要在這里放置Bootloader 的*條指令:b ResetHandler,跳轉(zhuǎn)到標號為ResetHandler 處進行*階段的硬件初始化,主要內(nèi)容為:關(guān)看門狗定時器,關(guān)中斷,初始化PLL 和時鐘,初始化存儲器系統(tǒng)。執(zhí)行完以上程序后,系統(tǒng)進行堆棧和存儲器的初始化。系統(tǒng)堆棧初始化取決于用戶使用了哪些中斷,以及系統(tǒng)需要處理哪些錯誤類型。一般情況下,管理者堆棧必須設(shè)置,如果使用了IRQ 中斷,則IRQ 堆棧也必須設(shè)置。如果系統(tǒng)使用了外設(shè),則需要設(shè)置相關(guān)的寄存器,以確定其刷新頻率、總線寬度等信息。
● 代碼段復(fù)制到RAM 中運行
因為嵌入式系統(tǒng)的代碼通常都是固化在ROM或者Flash 中,上電后開始運行。由于ROM和Flash 的讀取速度相對較慢,這樣無疑會降低代碼的執(zhí)行速度和系統(tǒng)的運行效率。為此,需要把系統(tǒng)的代碼復(fù)制到RAM 中運行。使用SDT 鏈接器ARMLink 產(chǎn)生的定位信息,把RO 的有效代碼和數(shù)據(jù)段到RAM 中。ARMLink 將編譯后的程序鏈接成ELF 文件。映像文件內(nèi)部共有三種輸出段:RO 段、RW 段和ZI 段。這三種輸出段分別包含了只讀代碼及包含在代碼段中的少量數(shù)據(jù)、可讀寫的數(shù)據(jù)、初始化為0 的數(shù)據(jù),ARMLink 同時還產(chǎn)生了這三種輸出段的起始和終止定位信息: Image$$RO$$Base 、Image$$RO$$Limit 、image$$RW$$Base、Image$$Limit、Image$$Linit 和Image$$ZI$$Limit??梢栽诔绦蛑惺褂眠@些定位信息。將ROM 中的代碼和數(shù)據(jù)搬移到RAM 中。
● 建立二級中斷向量表
在ARM 系統(tǒng)中,中斷向量表位于0x000000000 開始的地址處,意味著無論運行什么樣的上層軟件,一旦發(fā)生中斷,程序就得到Flash 存儲器中的中斷向量表里去,降低系統(tǒng)的運行效率。因此在RAM 中建立自己的二級中斷向量表,當(dāng)中斷發(fā)生后,程序直接從RAM 中取中斷向量進入中斷子程序。尤其是在中斷頻繁發(fā)生的系統(tǒng)里,這種方法可以大大提高系統(tǒng)的運行效率。
● MMU 的應(yīng)用
MMU 是存儲器管理單元的縮寫,是用來管理虛擬內(nèi)存系統(tǒng)的器件。MMU 通常是CPU的一部分,本身有少量存儲空間存放從虛擬地址到物理地址的匹配表,此表稱作TLB(轉(zhuǎn)換旁置緩沖區(qū))。所有數(shù)據(jù)請求都送往MMU,由MMU 決定數(shù)據(jù)是在RAM 內(nèi)還是在大容量外部存儲器設(shè)備內(nèi)。如果數(shù)據(jù)不在存儲空間內(nèi),MMU 將產(chǎn)生頁面錯誤中斷。MMU 存儲器系統(tǒng)的結(jié)構(gòu)允許對存儲器系統(tǒng)的精細控制,大部分的控制細節(jié)由存在存儲器中的轉(zhuǎn)換表提供。
這些表的入口定義了從1KB~1MB 的各種存儲器區(qū)域的屬性。MMU 完成的兩個主要功能是:將虛地址轉(zhuǎn)換成物理地址,控制存儲器存取允許。MMU 關(guān)掉時,虛地址直接輸出到物理地址總線。
SDRAM 地址分配
三、啟動代碼完成的主要功能
1) 建立異常中斷的入口向量
2) 建立中斷向量表
3) 為ARM 每種運行模式設(shè)置堆棧
4) 初始化ARM 的MPLL 時鐘
5) 初始化MMU(內(nèi)存管理單元)
6) 初始化存儲器控制器
7) 關(guān)閉看門狗、關(guān)閉中斷
8) 判斷IRQ 中斷的中斷入口
9) 將RW 段的內(nèi)容從flash 拷貝到SDRAM,初始化ZI 段為0
10) 跳轉(zhuǎn)到應(yīng)用程序(C 代碼)
四、S3C2410 初始化說明
1 創(chuàng)建中斷向量表
中斷向量表創(chuàng)建到SDRAM 高位地址上,主要是因為SDRAM 的地址位置需要放置執(zhí)行的映象程序,而且在SDRAM 中查找向量表速度會快很多。中斷向量表放置時需要字對齊。
ALIGN ;通過添加補丁字節(jié)使當(dāng)前位置滿足一定的對齊方式
;可讀寫的數(shù)據(jù)段
AREA RamData, DATA, READWRITE
;^=MAP:定義一個結(jié)構(gòu)化的內(nèi)存表(storage map)的首地址,地址為0x33ff8000
^ _ISR_STARTADDRESS ;0x33ff8000
HandleReset # 4 ;#--Field:定義一個結(jié)構(gòu)化內(nèi)存表中的數(shù)據(jù)域,該域為4 個字節(jié)
HandleUndef # 4
HandleSWI # 4
HandlePabort # 4
HandleDabort # 4
HandleReserved # 4
HandleIRQ # 4
HandleFIQ # 4
;Don''''''''''''''''t use the label ''''''''''''''''IntVectorTable'''''''''''''''',
;The value of IntVectorTable is different with the address you think it may be.
;IntVectorTable''''''''''''''''
HandleEINT0 # 4
HandleEINT1 # 4
HandleEINT2 # 4
HandleEINT3 # 4
HandleEINT4_7 # 4
HandleEINT8_23 # 4
HandleRSV6 # 4
HandleBATFLT # 4
HandleTICK # 4
HandleWDT # 4
HandleTIMER0 # 4
HandleTIMER1 # 4
HandleTIMER2 # 4
HandleTIMER3 # 4
HandleTIMER4 # 4
HandleUART2 # 4
HandleLCD # 4
HandleDMA0 # 4
HandleDMA1 # 4
HandleDMA2 # 4
HandleDMA3 # 4
HandleMMC # 4
HandleSPI0 # 4
HandleUART1 # 4
HandleRSV24 # 4
HandleUSBD # 4
HandleUSBH # 4
HandleIIC # 4
HandleUART0 # 4
HandleSPI1 # 4
HandleRTC # 4
HandleADC # 4
2 創(chuàng)建異常中斷的入口函數(shù)
b ResetHandler
b HandlerUndef ;handler for Undefined mode
b HandlerSWI ;handler for SWI interrupt
b HandlerPabort ;handler for PAbort
b HandlerDabort ;handler for DAbort
b . ;reserved
b HandlerIRQ ;handler for IRQ interrupt
b HandlerFIQ ;handler for FIQ interrupt
異常向量的入口函數(shù)是由8 個跳轉(zhuǎn)指令組成的,這8 個跳轉(zhuǎn)指令需要按照順序放置到固定的地址上,地址是0x00~0x1c,這8 個跳轉(zhuǎn)指令是ARM 匯編指令,所以條指令占4 個字節(jié)的位置。
3 關(guān)閉看門狗、關(guān)閉中斷
ldr r0,=WTCON ;watch dog disable
ldr r1,=0x0
str r1,[r0]
ldr r0,=INTMSK
ldr r1,=0xffffffff ;all interrupt disable
str r1,[r0]
ldr r0,=INTSUBMSK
ldr r1,=0x3ff ;all sub interrupt disable
str r1,[r0]
4 設(shè)置ARM 的主時鐘頻率
;To reduce PLL lock time, adjust the LOCKTIME register.
ldr r0,=LOCKTIME
ldr r1,=0xffffff
str r1,[r0]
;Configure MPLL
ldr r0,=MPLLCON
ldr r1,=((M_MDIV<<12)+(M_PDIV<<4)+M_SDIV) ;Fin=12MHz,Fout=50MHz
str r1,[r0]
5 設(shè)置存儲器控制器
;Set memory control registers
adr r0, SMRDATA
ldr r1,=BWSCON ;BWSCON Address
add r2, r0, #52 ;End address of SMRDATA 一共13 個寄存器
0
ldr r3, [r0], #4
str r3, [r1], #4
cmp r2, r0
bne %B0
LTORG ;聲明一個數(shù)據(jù)緩沖池的開始
SMRDATA DATA
DCD 0x2211D110 ; BWSCON
DCD 0x0700 ; BANKCON0
DCD 0x7FFC ; BANKCON1
DCD 0x0700 ; BANKCON2
DCD 0x0700 ; BANKCON3
DCD 0x0700 ;BANKCON4
DCD 0x0700 ;BANKCON5
DCD 0x18005 ;BANKCON6
DCD 0x18005 ; BANKCON7
DCD 0x008E0459 ;REFRESH
DCD 0x32 ;BANKSIZE=0x32
DCD 0x30 ;MRSR6 CL=3clk
DCD 0x30 ;MRSR7
以上是對S3C2410A 的存儲器進行初始化,存儲器的初始化是和具體的硬件平臺相關(guān)的,具體的內(nèi)容見S3C2410A 的使用手冊。
6 堆棧初始化及ARM 工作模式轉(zhuǎn)換
UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~
SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~
UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~
AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~
IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~
FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~ InitStacks
;UndefMode 堆棧
mrs r0,cpsr
bic r0,r0,#MODEMASK
orr r1,r0,#UNDEFMODE|NOINT
msr cpsr_cxsf,r1 ;UndefMode
ldr sp,=UndefStack
;AbortMode 堆棧
orr r1,r0,#ABORTMODE|NOINT
msr cpsr_cxsf,r1 ;AbortMode
ldr sp,=AbortStack
;IRQMode 堆棧
orr r1,r0,#IRQMODE|NOINT
msr cpsr_cxsf,r1 ;IRQMode
ldr sp,=IRQStack
;FIQMode 堆棧
orr r1,r0,#FIQMODE|NOINT
msr cpsr_cxsf,r1 ;FIQMode
ldr sp,=FIQStack
;SVCMode 堆棧
bic r0,r0,#MODEMASK|NOINT
orr r1,r0,#SVCMODE
msr cpsr_cxsf,r1 ;SVCMode
ldr sp,=SVCStack
mov pc,lr
7 將RW 內(nèi)容從flash 中copy 到SDRAM 中,并將ZI 內(nèi)容初始化為0
adr r0, ResetEntry
ldr r2, BaseOfROM
cmp r0, r2
ldreq r0, TopOfROM
beq InitRam
ldr r3, TopOfROM
;將RO 區(qū)域的代碼copy 到RW 域中并且將ZI 區(qū)域初始化為0。
0
ldmia r0!, {r4-r7}
stmia r2!, {r4-r7}
cmp r2, r3
bcc %B0
sub r2, r2, r3
sub r0, r0, r2
InitRam
ldr r2, BaseOfBSS
ldr r3, BaseOfZero
0
cmp r2, r3 ;copy 初始化代碼
ldrcc r1, [r0], #4
strcc r1, [r2], #4
bcc %B0
mov r0, #0 ;初始化ZI 區(qū)域為0
ldr r3, EndOfBSS
1
cmp r2, r3
8 創(chuàng)建查找IRQ 中斷源程序
ldr r0,=HandleIRQ ;This routine is needed
ldr r1,=IsrIRQ ;if there isn''''''''''''''''t ''''''''''''''''subs pc,lr,#4'''''''''''''''' at 0x18, 0x1c''''''''''''''''
str r1,[r0]
IsrIRQ
sub sp,sp,#4
stmfd sp!,{r8-r9}
ldr r9,=INTOFFSET
ldr r9,[r9]
ldr r8,=HandleEINT0
add r8,r8,r9,lsl #2
ldr r8,[r8]
str r8,[sp,#8]
ldmfd sp!,{r8-r9,pc}
下一篇:如何正確選購高低溫試驗箱
免責(zé)聲明
- 凡本網(wǎng)注明"來源:智能制造網(wǎng)"的所有作品,版權(quán)均屬于智能制造網(wǎng),轉(zhuǎn)載請必須注明智能制造網(wǎng),http://towegas.com。違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
- 企業(yè)發(fā)布的公司新聞、技術(shù)文章、資料下載等內(nèi)容,如涉及侵權(quán)、違規(guī)遭投訴的,一律由發(fā)布企業(yè)自行承擔(dān)責(zé)任,本網(wǎng)有權(quán)刪除內(nèi)容并追溯責(zé)任。
- 本網(wǎng)轉(zhuǎn)載并注明自其它來源的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品來源,并自負版權(quán)等法律責(zé)任。
- 如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
2025第十一屆中國國際機電產(chǎn)品交易會 暨先進制造業(yè)博覽會
展會城市:合肥市展會時間:2025-09-20