從單片機(jī)轉(zhuǎn)ARMARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)-設(shè)計(jì)應(yīng)用_第1頁
從單片機(jī)轉(zhuǎn)ARMARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)-設(shè)計(jì)應(yīng)用_第2頁
從單片機(jī)轉(zhuǎn)ARMARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)-設(shè)計(jì)應(yīng)用_第3頁
從單片機(jī)轉(zhuǎn)ARMARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)-設(shè)計(jì)應(yīng)用_第4頁
從單片機(jī)轉(zhuǎn)ARMARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)-設(shè)計(jì)應(yīng)用_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

精品文檔-下載后可編輯從單片機(jī)轉(zhuǎn)ARM,ARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)-設(shè)計(jì)應(yīng)用從單片機(jī)轉(zhuǎn)到ARM,主要需要學(xué)習(xí)ARM的架構(gòu),ARM相比單片機(jī)多了一些外設(shè)和總線。在僅僅是裸奔的情況下,如果熟悉了ARM架構(gòu),那么我認(rèn)為使用任何ARM架構(gòu)的芯片和用單片機(jī)將沒有區(qū)別。ARM架構(gòu)之所以更復(fù)雜,當(dāng)然是為了跑更快以及更好地支持片上系統(tǒng),所以在某種程度上來說對(duì)片上系統(tǒng)不是很了解的話那對(duì)于ARM架構(gòu)的理解也不會(huì)那么深。

通用寄存器

R13通常被用作棧指針,進(jìn)入異常模式時(shí),可以將需要使用的寄存器保存在R13所指的棧中;當(dāng)退出異常吹程序時(shí),將保存在R13所指的棧中的寄存器值彈出。

R14又被稱為連接寄存器(LinkRegister,LR),即PC的返回值。

R15又被記作PC。ARM指令是字對(duì)齊的,PC的值的第0位和第1位總為0。也就是說是32位對(duì)齊。

就Cortex-M3來說,擁有R0-R15的寄存器組。其中R13作為堆棧指針SP。SP有兩個(gè),分別為R13(MSP)和R13(PSP)即主堆棧指針(MSP)和進(jìn)程堆棧指針(PSP),但在同一時(shí)刻只能有一個(gè)可以看到,這也就是所謂的“banked”寄存器。這些寄存器都是32位的。

ARM的各個(gè)模式

ARM有以下7種模式:

用戶模式(User,usr)正常程序執(zhí)行的模式

快速中斷模式(FIQ,fiq)用于高速數(shù)據(jù)傳輸和通道處理

外部中斷模式(IRQ,irq)用于通常的中斷處理

特權(quán)模式(Supervisor,svc)供操作系統(tǒng)使用的一種保護(hù)模式

數(shù)據(jù)訪問中止模式(Abort,abt)用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)

未定義指令中止模式(Undefined,und)用于支持通過軟件方針硬件的協(xié)處理器

系統(tǒng)模式(System,sys)用于運(yùn)行特權(quán)級(jí)的操作系統(tǒng)任務(wù)

其中除了用戶模式之外都稱之為特權(quán)模式(privilegedmodes),而在privilegedmodes中除了系統(tǒng)模式其它都稱為異常模式,即exceptionmode。起初關(guān)于異常這個(gè)詞我的理解有些偏差,我認(rèn)為異常模式就是這個(gè)系統(tǒng)出錯(cuò)了,而實(shí)際上不是。exceptionmode的意思是例外,意思是“這模式什么時(shí)候會(huì)發(fā)生不好說……”,比如說來了個(gè)外部中斷也會(huì)進(jìn)入異常模式,但是此時(shí)系統(tǒng)是運(yùn)行完好的。

其中SVC用于在系統(tǒng)剛啟動(dòng)的啟動(dòng)文件BOOT程序中,跳轉(zhuǎn)到kernel之前必須為SVC,SVC具有權(quán)限,可以對(duì)任何寄存器進(jìn)行操作。在裸機(jī)程序中我們有時(shí)候會(huì)一直處于SVC模式下。

關(guān)于什么時(shí)候會(huì)進(jìn)入用戶模式或者系統(tǒng)模式,以下是我的猜測(cè),比如進(jìn)入linuxkernel之后會(huì)設(shè)置成sys模式,比如任務(wù)調(diào)度等等都會(huì)在sys模式中,而執(zhí)行用戶編寫的應(yīng)用程序時(shí),系統(tǒng)是處于usr模式中。以上猜測(cè)需要在linux中找出證據(jù)驗(yàn)證。

其中FIQ,IRQ為中斷模式,有中斷發(fā)生時(shí)會(huì)進(jìn)入FIQ模式或者IRQ模式,至于到底是進(jìn)入哪個(gè)模式是由開發(fā)者設(shè)定的。理論上FIQ模式的響應(yīng)速度比IRQ模式要快。

其中abt模式通常發(fā)生于在訪問地址沒有對(duì)齊時(shí)的情況,此時(shí)會(huì)跳轉(zhuǎn)到abt所屬的中斷向量地址中去。und模式應(yīng)該是取到指令之后發(fā)現(xiàn)指令不能用,,此時(shí)會(huì)跳轉(zhuǎn)到abt所屬的中斷向量地址中去。以上兩種模式應(yīng)該是開發(fā)過程中出現(xiàn)BUG才會(huì)進(jìn)入的,也是一種調(diào)試手段,在版本發(fā)行之前應(yīng)該消除這些錯(cuò)誤(我猜==)。

啟動(dòng)文件

這一部分只要了解一下協(xié)處理器CP15的相關(guān)作用以及ARM或者THUMB匯編再看一下網(wǎng)上的例程以及解釋應(yīng)該不難理解。

在啟動(dòng)文件中我們可以做任何事情,但是通常我們可以做這些:改變程序大小端排序,關(guān)閉看門狗,屏蔽中斷,設(shè)置各個(gè)時(shí)鐘,設(shè)置從SLEEP或者IDLE啟動(dòng)時(shí)的程序,初始化SDRAM,設(shè)置各模式指向的堆棧,設(shè)置好中斷向量表,判斷是從NOR還是NANDFLASH啟動(dòng),將文件拷到SDRAM中,運(yùn)行Main。

以上也說明了為什么需要一個(gè)匯編寫的啟動(dòng)文件,設(shè)置各個(gè)模式下的SP指針以及初始化中斷向量的跳轉(zhuǎn)(ARM的中斷較多設(shè)置也較靈活)也只有匯編干比較合適了。甚至在SOC(片上系統(tǒng))中每個(gè)任務(wù)都有自己的堆棧,所以改變堆棧指針的那一部分程序也是放在匯編里做的。總之了解啟動(dòng)文件是一個(gè)非常好的切入點(diǎn)。

MMU相關(guān)地址基本概念

關(guān)于MMU,因?yàn)槎喾N存儲(chǔ)設(shè)備的物理地址不同以及不連貫性,將其地址安放在合理的連續(xù)虛擬地址上是很必要的,所以MMU出現(xiàn)了。MMU即將不同的地址放在合適的虛擬地址中,以便調(diào)度。比如要跑LINUX必須要有MMU的支持才行。

ARM920T中有三種類型的地址:

虛擬地址(VA),變換后的虛擬地址(MVA),物理地址(PA)。

以下是一個(gè)當(dāng)一個(gè)指令被請(qǐng)求時(shí)地址所做操作的例子:

1、指令VA(IVA)被ARM920T發(fā)出

2、它被ProcID(當(dāng)前進(jìn)程所在的進(jìn)程空間塊的編號(hào))轉(zhuǎn)換成指令MVA(IMVA),指令CACHE(ICACHE)和MMU看到的就是IMVA。

3、如果在IMMU上的保護(hù)模塊確認(rèn)IMVA不會(huì)被中斷,并且IMVA標(biāo)簽也在ICACHE中,指令數(shù)據(jù)會(huì)讀出并返回到ARM920T內(nèi)核中。

4、如果IMVAtag并不在ICACHE中,那么IMMU會(huì)產(chǎn)生出一個(gè)指令PA(IPA)。地址會(huì)給AMBA總線接口以獲取外部數(shù)據(jù)。

那么VA是如何被PID轉(zhuǎn)換為MVA的呢?

這有關(guān)于CP15中的13,FCSEPIDregister

R13是fastcontextswitchextension(FCSE快速上下文切換擴(kuò)展)processidentifier(PID進(jìn)程標(biāo)識(shí)符)寄存器,此寄存器復(fù)位時(shí)為0。

讀R13會(huì)得到FCSEPID的值,寫R13會(huì)更新FCSEPID的值到[31:25]中,位[24:0]應(yīng)該是零。

如何使用FCSEPID:

920T內(nèi)核發(fā)出的地址都是0-32MB的范圍,4GB的逆序空間被分成了1238個(gè)進(jìn)程空間塊,每個(gè)進(jìn)程空間塊大小為32MB。每個(gè)進(jìn)程空間塊中可以包含一個(gè)進(jìn)程。系統(tǒng)128個(gè)進(jìn)程空間塊的編號(hào)0-127,編號(hào)為I的進(jìn)程空間塊中的進(jìn)程實(shí)際使用的虛擬地址空間為(I*0x02000000)到(I*0x02000000+0x01FFFFFF)。

所以VA通常高7位都為0時(shí)MVA=VA|(PID25)

當(dāng)VA高7位不為0時(shí)MVA=VA,這種VA是本進(jìn)程用于訪問別的進(jìn)程中的數(shù)據(jù)和指令的虛擬地址,注意這時(shí)被訪問的進(jìn)程標(biāo)識(shí)符不能為0。

注意:當(dāng)FCSE_PID為0時(shí),即當(dāng)前復(fù)位,則當(dāng)前920T和CACHES及MMU之間是平面映射的關(guān)系(很巧妙:))。

TLB是什么

TLB即translatelook-asidebuffer,快表就是存儲(chǔ)幾個(gè)常用的頁表,以提高系統(tǒng)運(yùn)行的速度。在更新頁表之前要使其無效,其操作的寄存器為R8,R8為只寫寄存器,如果讀它則會(huì)造成不可估計(jì)的后果。

AP賦值表:

而DOMAIN的賦值則是在C3中的,32bit共有16個(gè)域,每個(gè)域分兩個(gè)bit,這兩個(gè)bit控制當(dāng)前域的權(quán)限。而以上四個(gè)bit是為了選擇0-15個(gè)域的其中一個(gè)。

關(guān)于C、B賦值:

以上有關(guān)于兩種寫緩存,寫通以及寫回。寫回法是指CPU在執(zhí)行寫操作時(shí),被寫的數(shù)據(jù)只寫入cache,不寫入主存,僅當(dāng)需要替換時(shí),才把已經(jīng)修改的cache塊寫回到主存中。寫通法是指CPU在執(zhí)行寫操作時(shí),必須把數(shù)據(jù)同時(shí)寫入cache和主存。

時(shí)鐘以及總線概念

FCLK,HCLK,andPCLK

FCLKisusedbyARM920T.

HCLKisusedforAHBbus,whichisusedbytheARM920T,thememorycontroller,theinterruptcontroller,theLCDcontroller,theDMAandUSBhostblock.

PCLKisusedforAPBbus,whichisusedbytheperipheralssuchasWDT,IIS,I2C,PWMtimer,MMCinterface,ADC,UART,GPIO,RTCandSPI.

WhatisAHB/APB?

InternalAdvancedMicrocontrollerBusArchitecture(AMBA)是一種總線標(biāo)準(zhǔn),以下兩項(xiàng)都符合此標(biāo)準(zhǔn)。

AHB(AdvancedHighperformanceBus),主要用于系統(tǒng)高性能、高時(shí)速速率模塊間通信。

APB(AdvancedPeripheralBus),主要用于慢速片上外設(shè)與ARM核的通訊。

AHB私有外設(shè)總線,只用于CM3內(nèi)部的AHB外設(shè),它們是:NVIC,FPB,DWT和ITM。

APB私有外設(shè)總線,既用于CM3內(nèi)部的APB設(shè)備,也用于外部設(shè)備(這里的“外部”是對(duì)內(nèi)核而言)。CM3允許器件制造商再添加一些片上APB外設(shè)到APB私有總線上,它們通過APB接口來

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論