ARM處理器體系結(jié)構(gòu)簡要總結(jié)
irq用于普通中斷處理,速度慢,進irq后默認關(guān)普通中斷,但開fiq.fiq用于快速中斷處理,有專用的r8-r14寄存器,一般不需要保存現(xiàn)場,進fiq后所有中斷標記都關(guān)掉.
除用戶模式外其他模式都有特權(quán),可以為所欲為.
r13默認用來作為堆棧寄存器,r14用于保存返回地址.
用戶模式和管理模式只有cpsr,沒有spsr。cpsr是當前狀態(tài)寄存器,內(nèi)含算數(shù)運行標記位,irq和fiq標記,模式位,保留位。spsr是cpsr的備份。
arm處理器支持arm指令集和thumb指令集,arm指令集是32位,thumb指令集是16位,具有arm指令集的子集功能,實現(xiàn)同樣的功能用thumb指令集所需空間較小,但執(zhí)行時間有可能變長。arm代碼向thumb代碼跳轉(zhuǎn)通過BX指令完成。BX指令通過判斷數(shù)據(jù)項的最后一位來確定是否轉(zhuǎn)入thumb或arm模式,跳轉(zhuǎn)后會設(shè)置cpsr中的模式位。
這里我不打算描述arm或thumb指令集,因為那需要太大的篇幅,但arm和x86相比有一些很大的特殊之處就是它的堆棧可以向上或向下增長,而且存數(shù)與累加誰在先都可,這樣就有四種堆棧方式;另外每條arm指令都帶有執(zhí)行條件,像溢出,進位等,只有在滿足特定條件下指令才會得到執(zhí)行;當然arm指令集不存在像x86指令集那樣的向下兼容性,386支持16位實模式,兼容8086,但32位arm卻沒法識別16位arm指令集。
這是我對arm處理器內(nèi)部的一些了解。
下面談?wù)刾hilips公司出的一款lpc2214處理器,內(nèi)含arm7tdmi-s處理器核,支持jtag調(diào)試和跟蹤。lpc2214一共有三條內(nèi)部總線,一條是內(nèi)部局部總線,用來連接內(nèi)部ram和rom,rom有256kb,ram16k。另一條是amba總線ahb,主要連接向量中斷控制器和外部存儲器接口,第三條是vpb,通過vpb橋橋接到ahb,用于低速外設(shè),有點x86主板的味道,不過它把這三個總線都集成在一個處理器里面。vpb上連接了好多外設(shè),像uart,i2c,spi,timer,pwm,a/d,rtc,hot dog,系統(tǒng)控制,外部中斷。這些外設(shè)通常以主頻的1/2,1/4,1倍速度運行,這里我不會講這些外設(shè)如何控制,如何設(shè)定寄存器,那楊可以寫一本數(shù)據(jù)手冊了。我只講我覺得這個處理器里我覺得比較有意思的東西。
這個處理器內(nèi)含振蕩器,可以外接晶振也可直接接時鐘,還含有pll,我們使用時通常讓它在振蕩器模式下啟動運行,然后切換到pll模式,可以提高運行速度。這個處理器有掉電模式和空閑模式,空閑模式只禁止cpu的時鐘,但是外設(shè)時鐘繼續(xù)運行,在掉電模式pll停止運行,掉電模式通過reset可復(fù)位,空閑模式通過reset或外部中斷可復(fù)位。lpc2214可以外接各類接口芯片,它一共有四個外接設(shè)備地址空間,每個空間有16M,可以按8,16,32位模式訪問。lpc2214有一個存儲器加速模塊,可以設(shè)定是否預(yù)取,可以設(shè)定不預(yù)取,連續(xù)指令預(yù)取,所有指令數(shù)據(jù)都預(yù)取,開機默認是不預(yù)取。其實第三個情況就類似x86中的二級cache,因為目前的家用x86處理器cache設(shè)計都是兩極結(jié)構(gòu),第一級是哈佛結(jié)構(gòu),第二級就是指令數(shù)據(jù)共享一個cache。其實即使在不預(yù)取的情況下因為lpc2214是三級流水線結(jié)構(gòu),也會預(yù)取兩條指令,當前指令地址為pc+2,這只是層次和說法上的問題。最后就是處理器的地址空間布局,lpc2214不存在io空間,它是內(nèi)存空間統(tǒng)一編址,0地址開始是rom,256k,1G以上是ram,16k,2G以上是外部地址空間,64M,2.5G以上是vpb和ahb地址空間;其中rom空間的頂端是boot block塊,8k,這8k還映射到2G的頂端。最低64字節(jié)是中斷向量表,可以映射到boot block,內(nèi)部rom,內(nèi)部ram,外部空間,具體映射可以設(shè)定memmap寄存器。
評論