ARM處理器體系結(jié)構(gòu)簡(jiǎn)要總結(jié)
搞arm兩個(gè)月了,有點(diǎn)收獲,就談它了。本文主要介紹ARM7系列處理器。呵呵,不是相關(guān)專業(yè)可能有很多人不知道arm是個(gè)什么東西吧,我現(xiàn)在簡(jiǎn)要介紹一下各種處理器分類,目前我們的處理器陣營(yíng)中分為CISC和RISC兩大系列,CISC是復(fù)雜指令集處理器,這種處理器每條指令可以執(zhí)行比較多的復(fù)雜操作,而且指令長(zhǎng)度不定,我知道的有X86處理器是CISC處理器,目前intel和amd出的處理器主要都是x86處理器,intel的x86從8086開(kāi)始到80186,283,386,486,Pemtium,pentium pro,pentium 2,pentium 3,pentium 4,扣肉2,四核志強(qiáng)等,還有賽揚(yáng),pentium M,pentium D等很多變種,有些提供高的性價(jià)比,有的專用于移動(dòng)領(lǐng)域或低功耗領(lǐng)域。Amd的x86有毒龍,速龍,酷龍等。從8086到386是一次飛躍,實(shí)現(xiàn)了保護(hù)模式和虛86模式,以此為基礎(chǔ)才有后來(lái)的Window3.1,386到Pentium是一次飛躍,硬件上從硬連邏輯轉(zhuǎn)換到微指令實(shí)現(xiàn),pentium 到扣肉又是一次較大的飛躍,從一個(gè)處理器核到兩個(gè),為多任務(wù)提供了充分的支持。RISC處理器種類比較多,指令長(zhǎng)度固定,執(zhí)行周期固定,從微控制器、mips、arm、alpha、powerpc、sun sparc等。微控制器子類又很多,目前很多較小的嵌入式控制場(chǎng)合都用得是微控制器,比如sim卡,一卡通,電子表等,有單片機(jī)、pic、lpc等。mips是mips公司研究出的一套體系結(jié)構(gòu),目前龍芯,聚芯都是基于mips,個(gè)人認(rèn)為10年內(nèi)會(huì)銷聲匿跡。alpha不了解,很少用到。powerpc是ibm,hp等公司合力出的一套,挺復(fù)雜,結(jié)構(gòu)嚴(yán)謹(jǐn),但推廣不好,sparc只在sun得到大力支持。arm是目前應(yīng)用最廣泛的一套指令系統(tǒng),支持多任務(wù),只要是超出單片機(jī)能力、x86又太浪費(fèi)的場(chǎng)合大部分都用arm。90%的智能手機(jī)都是arm處理器。
arm處理器有7個(gè)處理器模式(x86有3個(gè)),用戶模式、管理模式、未定義模式、中止模式、特權(quán)模式、irq模式,fiq模式。
用戶模式和管理模式:共用r0-r14個(gè)通用寄存器,pc寄存器,共用一個(gè)cpsr。
未定義模式、中止模式、特權(quán)模式、irq模式:共享用戶模式和管理模式的r0-r12,各自專用的r13-r14,注意和用戶模式的r13-r14不同,pc寄存器,各自專用的cpsr和spsr。
fiq模式:共享用戶模式和管理模式的r0-r7,專用的r8-r14,pc寄存器,各自專用的cpsr和spsr。
注意pc寄存器是所有模式共享一個(gè)。
編程時(shí)如果c和匯編共存要遵守atpcs標(biāo)準(zhǔn),簡(jiǎn)單的說(shuō)這個(gè)標(biāo)準(zhǔn)要求函數(shù)調(diào)用時(shí)r0-r3傳遞參數(shù),如果參數(shù)多于四個(gè)通過(guò)堆棧傳遞,從右往左壓參。如果有返回值用r0表示。
用戶模式相當(dāng)于x86中的第三特權(quán)級(jí),用于執(zhí)行普通任務(wù),不可以執(zhí)行特權(quán)操作,不能切換模式等,
未定義模式用于執(zhí)行一條未定義指令時(shí)觸發(fā),可通過(guò)軟件模擬執(zhí)行,用于模擬浮點(diǎn)或dsp等.
中止模式用于取指出錯(cuò)或訪存出錯(cuò),內(nèi)在原因可能是需要調(diào)頁(yè),或訪問(wèn)了非法區(qū)域.
特權(quán)模式在reset后自動(dòng)進(jìn)入,通過(guò)swi軟指令中斷也可進(jìn)入.[!--empirenews.page--]
irq用于普通中斷處理,速度慢,進(jìn)irq后默認(rèn)關(guān)普通中斷,但開(kāi)fiq.fiq用于快速中斷處理,有專用的r8-r14寄存器,一般不需要保存現(xiàn)場(chǎng),進(jìn)fiq后所有中斷標(biāo)記都關(guān)掉.
除用戶模式外其他模式都有特權(quán),可以為所欲為.
r13默認(rèn)用來(lái)作為堆棧寄存器,r14用于保存返回地址.
用戶模式和管理模式只有cpsr,沒(méi)有spsr。cpsr是當(dāng)前狀態(tài)寄存器,內(nèi)含算數(shù)運(yùn)行標(biāo)記位,irq和fiq標(biāo)記,模式位,保留位。spsr是cpsr的備份。
arm處理器支持arm指令集和thumb指令集,arm指令集是32位,thumb指令集是16位,具有arm指令集的子集功能,實(shí)現(xiàn)同樣的功能用thumb指令集所需空間較小,但執(zhí)行時(shí)間有可能變長(zhǎng)。arm代碼向thumb代碼跳轉(zhuǎn)通過(guò)BX指令完成。BX指令通過(guò)判斷數(shù)據(jù)項(xiàng)的最后一位來(lái)確定是否轉(zhuǎn)入thumb或arm模式,跳轉(zhuǎn)后會(huì)設(shè)置cpsr中的模式位。
這里我不打算描述arm或thumb指令集,因?yàn)槟切枰蟮钠?,但arm和x86相比有一些很大的特殊之處就是它的堆??梢韵蛏匣蛳蛳略鲩L(zhǎng),而且存數(shù)與累加誰(shuí)在先都可,這樣就有四種堆棧方式;另外每條arm指令都帶有執(zhí)行條件,像溢出,進(jìn)位等,只有在滿足特定條件下指令才會(huì)得到執(zhí)行;當(dāng)然arm指令集不存在像x86指令集那樣的向下兼容性,386支持16位實(shí)模式,兼容8086,但32位arm卻沒(méi)法識(shí)別16位arm指令集。
這是我對(duì)arm處理器內(nèi)部的一些了解。
下面談?wù)刾hilips公司出的一款lpc2214處理器,內(nèi)含arm7tdmi-s處理器核,支持jtag調(diào)試和跟蹤。lpc2214一共有三條內(nèi)部總線,一條是內(nèi)部局部總線,用來(lái)連接內(nèi)部ram和rom,rom有256kb,ram16k。另一條是amba總線ahb,主要連接向量中斷控制器和外部存儲(chǔ)器接口,第三條是vpb,通過(guò)vpb橋橋接到ahb,用于低速外設(shè),有點(diǎn)x86主板的味道,不過(guò)它把這三個(gè)總線都集成在一個(gè)處理器里面。vpb上連接了好多外設(shè),像uart,i2c,spi,timer,pwm,a/d,rtc,hot dog,系統(tǒng)控制,外部中斷。這些外設(shè)通常以主頻的1/2,1/4,1倍速度運(yùn)行,這里我不會(huì)講這些外設(shè)如何控制,如何設(shè)定寄存器,那楊可以寫(xiě)一本數(shù)據(jù)手冊(cè)了。我只講我覺(jué)得這個(gè)處理器里我覺(jué)得比較有意思的東西。
這個(gè)處理器內(nèi)含振蕩器,可以外接晶振也可直接接時(shí)鐘,還含有pll,我們使用時(shí)通常讓它在振蕩器模式下啟動(dòng)運(yùn)行,然后切換到pll模式,可以提高運(yùn)行速度。這個(gè)處理器有掉電模式和空閑模式,空閑模式只禁止cpu的時(shí)鐘,但是外設(shè)時(shí)鐘繼續(xù)運(yùn)行,在掉電模式pll停止運(yùn)行,掉電模式通過(guò)reset可復(fù)位,空閑模式通過(guò)reset或外部中斷可復(fù)位。lpc2214可以外接各類接口芯片,它一共有四個(gè)外接設(shè)備地址空間,每個(gè)空間有16M,可以按8,16,32位模式訪問(wèn)。lpc2214有一個(gè)存儲(chǔ)器加速模塊,可以設(shè)定是否預(yù)取,可以設(shè)定不預(yù)取,連續(xù)指令預(yù)取,所有指令數(shù)據(jù)都預(yù)取,開(kāi)機(jī)默認(rèn)是不預(yù)取。其實(shí)第三個(gè)情況就類似x86中的二級(jí)cache,因?yàn)槟壳暗募矣脁86處理器cache設(shè)計(jì)都是兩極結(jié)構(gòu),第一級(jí)是哈佛結(jié)構(gòu),第二級(jí)就是指令數(shù)據(jù)共享一個(gè)cache。其實(shí)即使在不預(yù)取的情況下因?yàn)閘pc2214是三級(jí)流水線結(jié)構(gòu),也會(huì)預(yù)取兩條指令,當(dāng)前指令地址為pc+2,這只是層次和說(shuō)法上的問(wèn)題。最后就是處理器的地址空間布局,lpc2214不存在io空間,它是內(nèi)存空間統(tǒng)一編址,0地址開(kāi)始是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寄存器。