<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM嵌入式系統初始化過(guò)程

ARM嵌入式系統初始化過(guò)程

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò ) 收藏
基于ARM內核微處理器的系統一般為復雜的片上系統,這種復雜系統的多數硬件模塊都是可配 置的,需要軟件設置為特定的工作狀態(tài),因此在用戶(hù)的應用程序之前,需要有一些專(zhuān)門(mén)的代碼完成對系統的初始化。由于這類(lèi)代碼直接面對ARM處理器內核和硬件 控制器,一般都使用匯編語(yǔ)言完成。初始化代碼完成的操作與具有的硬件平臺相關(guān),但一般包括一下的內容:
--初始化異常向量表(中斷向量表)
--初始化存儲器系統
--初始化堆棧
--初始化有特殊要求的端口和設備
--初始化應用程序的運行環(huán)境
--調用主應用程序
1、初始化異常向量表(中斷向量表)
ARM微處理器結構要求中斷向量表必須放置在從0x00地址開(kāi)始的連續8×4字節的空間內,每當一個(gè)中斷(異常)發(fā)生以后,ARM微處理器便強制把PC置 為對應的中斷向量。由于每個(gè)中斷只占用向量表中一個(gè)字(4個(gè)字節)的存儲空間,只能放一條ARM指令,所以通常為跳轉指令,使程序從向量表跳轉到存儲器的 其他位置,執行真正的中斷處理。
具體代碼實(shí)現如下:
AREA Init,CODE,READONLY
ENTRY
B Reset_Handler ;異常復位
B Undef_Handler ;未定義指令異常
B SWI_Handler ;軟件中斷
B PreAbort_Handler ;指令預取中止
B DataAbord_Handler ;數據中止
B . ;系統保留
B IRQ_Handler ;普通外部中斷
B FIQ_Handler ;快速外部中斷
..........
2、初始化存儲器系統
主要是對系統存儲器控制器(MMU)的初始化。由于存儲器控制器并不是ARM架構的一部分,不同芯片的實(shí)現方式各不相同。由于運算能力和尋址能力的強大, 基于A(yíng)RM內核的微處理器系統一般都需要外擴展各種類(lèi)型的存儲器。對于存儲器系統的初始化一般包括如下幾個(gè)方面:
--存儲器類(lèi)型、時(shí)序和總線(xiàn)寬度的配置
--存儲器地址的配置
(1)存儲器類(lèi)型
基于A(yíng)RM微處理系統的存儲器一般有如下幾類(lèi):SARM,DRAM,Flah,同時(shí),即使同類(lèi)存儲器也有訪(fǎng)問(wèn)速度上的不同。其中,SRAM和Flah屬于 靜態(tài)存儲器,可以共用存儲器端口,而DRAM有動(dòng)態(tài)刷新和地址復用等特征,需要專(zhuān)門(mén)的存儲器端口。
(2)時(shí)序
存儲器端口的接口時(shí)序優(yōu)化對系統性能影響非常大,因為系統運行的速度瓶頸一般都存在于存儲器的訪(fǎng)問(wèn),因此希望存儲器的訪(fǎng)問(wèn)盡可能快,但又要考慮由此帶來(lái)的 系統穩定性問(wèn)題。
(3)總線(xiàn)寬度
ARM微處理器架構支持8/16/32位的數據總線(xiàn)寬度訪(fǎng)問(wèn)存儲器和外設,對于特定的存儲器來(lái)說(shuō),需要設定數據總線(xiàn)的寬度。
(4)存儲器地址的配置
ARM微處理器架構理論上可以支持4GB的地址空間,而對于一個(gè)實(shí)際的系統來(lái)說(shuō),配置的物理地址遠沒(méi)有這么多,因此,如何配置存儲器的地址,也是一個(gè)重要 的問(wèn)題。
(5)存儲器地址重映射
存儲器地址重映射就是可以通過(guò)軟件配置來(lái)改變一塊存儲器物理地址的方法,是當前許多先進(jìn)控制器所具有的功能。
進(jìn)行地址重映射的原因:提高系統的運行效率。
進(jìn)行地址重映射的注意:保證程序流程的連續性。
有的ARM處理器不具有地址重映射的功能,可以采樣代碼搬移加跳轉的方式完成上述功能。
3、初始化堆棧
由于A(yíng)RM微處理器有7中運行模式,每一種模式的堆棧指針(SP)都是獨立的(其中系統模式和用戶(hù)模式使用相同的SP)。因此,需要對每一種模式的SP進(jìn) 行初始化。
采用的方法是:改變當前程序狀態(tài)寄存器(CPSR)內的狀態(tài)位,使處理器切換到不同的狀態(tài),然后初始化SP。但是對用戶(hù)模式下SP的初始化應該放在最后, 因為ARM微處理器進(jìn)入用戶(hù)模式之后就無(wú)法再切換到其他模式。
設置堆棧應該注意的問(wèn)題是:堆棧的大小根據需要確定,要盡可能給堆棧分配高速存儲器(例如片內的SRAM)。堆棧性能的提高對提高系統整體性能的影響非常 顯著(zhù)。
初始化堆棧的代碼如下:
MRS R0, CPSR
BIC R0, R0, #MODEMASK
ORR R1, R0, #IRQMODE
MSR CPSR_c, R1
LDR SP, =IRQStack
BIC R0, R0, #MODEMASK
ORR R1, R0, #FIQMODE
MSR CPSR_c, R1
LDR SP, =FIQStack
.........
4、初始化應用程序和有特殊要求的端口和設備
該部分的初始化由具體的系統和用戶(hù)需求決定,一般的外設初始化可以放在系統初始化以后進(jìn)行。比較典型的應用是驅動(dòng)一些簡(jiǎn)單的輸出設備,例如LED等,用來(lái) 指示系統啟動(dòng)的進(jìn)程和狀態(tài)。初始化應用程序的運行環(huán)境,就是完成必要的從ROM到RAM的數據傳輸,初始化有特殊要求的端口、設備和應用程序的運行環(huán)境。
5、改變處理器的模式
ARM微處理器支持7種模式,其中:
超級模式(Supervisor):復位后的缺省模式。
多種特權模式變化:主要完成各模式的堆棧設置,注意不要進(jìn)入用戶(hù)模式。
用戶(hù)模式:用戶(hù)程序運行模式。
6、調用應用主程序
當完成所有的系統初始化工作之后,就需要把程序流程轉入主應用程序。最常見(jiàn)的操作是:
IMPORT C_Entry
......
B C_Entry


評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>