0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深度了解ARM架構(gòu)基礎(chǔ)知識(shí)

Q4MP_gh_c472c21 ? 來源:未知 ? 作者:李倩 ? 2018-04-17 10:40 ? 次閱讀

單片機(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)模式(privileged modes),而在privileged modes中除了系統(tǒng)模式其它都稱為異常模式,即exception mode。起初關(guān)于異常這個(gè)詞我的理解有些偏差,我認(rèn)為異常模式就是這個(gè)系統(tǒng)出錯(cuò)了,而實(shí)際上不是。exception mode的意思是例外,意思是“這模式什么時(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)入linux kernel之后會(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還是NAND FLASH啟動(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、 如果IMVA tag并不在ICACHE中,那么IMMU會(huì)產(chǎn)生出一個(gè)指令PA(IPA)。地址會(huì)給AMBA總線接口以獲取外部數(shù)據(jù)。

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

這有關(guān)于CP15中的13,FCSE PID register

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

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

如何使用FCSE PID:

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 | (PID << 25)

當(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即translate look-aside buffer,快表就是存儲(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

FCLK is used byARM920T.

HCLK is used forAHB bus, which is used by the ARM920T, the memory controller, the interruptcontroller, the LCD controller, the DMA and USB host block.

PCLK is used forAPB bus, which is used by the peripherals such as WDT, IIS, I2C, PWM timer, MMCinterface,ADC, UART, GPIO, RTC and SPI.

What is AHB/APB?

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

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

APB(AdvancedPeripheral Bus),主要用于慢速片上外設(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接口來訪問。

四種耗電模式:

NORMAL,SLOW,IDLE,SLEEP

先配置主PLL MPLL給CPU用。在上電復(fù)位的時(shí)候PLL是不穩(wěn)定的,所以在PLLCON在被軟件配置之前Fin直接是跳過MPll給FCLK,所以不配置PLLCON也是可以正常工作。即使工作在正常狀態(tài)下,也可以對(duì)MPLLCON進(jìn)行配置,配置之后等待PLL Lock-time過后內(nèi)部各模塊的CLK才可以被正常供應(yīng)。

DMA

閱讀芯片手冊(cè)即可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628491
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    8967

    瀏覽量

    365059
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5253

    瀏覽量

    119212

原文標(biāo)題:從單片機(jī)轉(zhuǎn)ARM,ARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)

文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ARM架構(gòu)基礎(chǔ)知識(shí)

    ARM處理器使用精簡指令集(RISC),ARM(Advanced RISC Machines)ARM是一家公司的簡稱,其次ARM指一系列處理器的統(tǒng)稱,同時(shí)
    發(fā)表于 09-15 11:51 ?5371次閱讀

    ARM基礎(chǔ)知識(shí)

    ARM基礎(chǔ)知識(shí)
    發(fā)表于 01-25 02:23

    ARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)

    ARM架構(gòu)的芯片和用單片機(jī)將沒有區(qū)別。ARM架構(gòu)之所以更復(fù)雜,當(dāng)然是為了跑更快以及更好地支持片上系統(tǒng),所以在某種程度上來說對(duì)片上系統(tǒng)不是很了解
    發(fā)表于 05-12 17:06

    ARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)

    更復(fù)雜,當(dāng)然是為了跑更快以及更好地支持片上系統(tǒng),所以在某種程度上來說對(duì)片上系統(tǒng)不是很了解的話那對(duì)于ARM架構(gòu)的理解也不會(huì)那么深。ARM的歷史版本AR
    發(fā)表于 05-22 10:50

    ARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)

    從單片機(jī)轉(zhuǎn)到ARM ―― ARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)
    發(fā)表于 12-29 06:16

    【HarmonyOS基礎(chǔ)知識(shí)】HarmonyOS系統(tǒng)架構(gòu)

    這個(gè)視頻帶大家揭秘HarmonyOS基礎(chǔ)知識(shí)之HarmonyOS系統(tǒng)架構(gòu),一起來看看?
    發(fā)表于 01-19 18:32

    ARM匯編基礎(chǔ)知識(shí)點(diǎn)匯總,錯(cuò)過肯定后悔

    ARM匯編基礎(chǔ)知識(shí)點(diǎn)匯總,錯(cuò)過肯定后悔
    發(fā)表于 11-29 07:13

    ARM架構(gòu)基礎(chǔ)知識(shí)點(diǎn)匯總

    之所以更復(fù)雜,當(dāng)然是為了跑更快以及更好地支持片上系統(tǒng),所以在某種程度上來說對(duì)片上系統(tǒng)不是很了解的話那對(duì)于ARM架構(gòu)的理解也不會(huì)那么深。ARM架構(gòu)
    發(fā)表于 12-13 06:26

    arm內(nèi)核基礎(chǔ)知識(shí)介紹

    arm內(nèi)核基礎(chǔ)知識(shí)介紹,有需要的朋友下來看看。
    發(fā)表于 01-08 14:44 ?12次下載

    淺談ARM處理器基礎(chǔ)知識(shí)

    淺談ARM處理器基礎(chǔ)知識(shí)
    發(fā)表于 01-14 12:31 ?16次下載

    電源管理基礎(chǔ)知識(shí)電源管理基礎(chǔ)知識(shí)電源管理基礎(chǔ)知識(shí)

    電源管理基礎(chǔ)知識(shí)電源管理基礎(chǔ)知識(shí)電源管理基礎(chǔ)知識(shí)
    發(fā)表于 09-15 14:36 ?76次下載
    電源管理<b class='flag-5'>基礎(chǔ)知識(shí)</b>電源管理<b class='flag-5'>基礎(chǔ)知識(shí)</b>電源管理<b class='flag-5'>基礎(chǔ)知識(shí)</b>

    ARM架構(gòu)基礎(chǔ)知識(shí)點(diǎn)匯總

    本文首先介紹了ARM架構(gòu)圖及各個(gè)模式,其次介紹了通用寄存器、MMU相關(guān)地址基本概念、ARM920T中有三種類型的地址等,最后闡述了ARM處理器的
    的頭像 發(fā)表于 04-26 10:46 ?1.7w次閱讀
    <b class='flag-5'>ARM</b><b class='flag-5'>架構(gòu)</b>的<b class='flag-5'>基礎(chǔ)知識(shí)</b>點(diǎn)匯總

    ARM架構(gòu)基礎(chǔ)知識(shí)小結(jié)

    從單片機(jī)轉(zhuǎn)到ARM,主要需要學(xué)習(xí)ARM架構(gòu)ARM相比單片機(jī)多了一些外設(shè)和總線。
    的頭像 發(fā)表于 06-11 15:40 ?4519次閱讀

    了解FPGA和CPLD架構(gòu)基礎(chǔ)知識(shí)資料下載

    電子發(fā)燒友網(wǎng)為你提供了解FPGA和CPLD架構(gòu)基礎(chǔ)知識(shí)資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-14 08:41 ?13次下載
    <b class='flag-5'>了解</b>FPGA和CPLD<b class='flag-5'>架構(gòu)</b>的<b class='flag-5'>基礎(chǔ)知識(shí)</b>資料下載

    架構(gòu)模式的基礎(chǔ)知識(shí)

    ????作為軟件工程師,為什么至少要學(xué)習(xí)基本的架構(gòu)模式? ????我相信有很多人回答了這個(gè)問題,但我會(huì)給你一些考慮的理由。 ????首先,如果您了解架構(gòu)模式的基礎(chǔ)知識(shí),那么您就更容易遵
    的頭像 發(fā)表于 06-13 16:13 ?636次閱讀
    <b class='flag-5'>架構(gòu)</b>模式的<b class='flag-5'>基礎(chǔ)知識(shí)</b>