ARM裸機開發Cortex-A7 MPCore架構基礎

      網友投稿 1608 2022-05-30

      文章目錄

      ARM裸機開發:Cortex-A7 MPCore架構基礎

      一、Cortex-A7 MPCore簡介

      二、Cortex-A 處理器運行模型

      三、CorteX-A 寄存器組

      3.1 寄存器組成

      3.2 通用寄存器

      3.3 程序狀態寄存器

      ARM裸機開發:Cortex-A7 MPCore架構基礎

      一、Cortex-A7 MPCore簡介

      Cortex-A7 MPCore是一款高性能低功耗的處理器,使用的是 ARMv7-A 架構,28nm 工藝下,Cortex-A7 可以運行在1.2~1.6GHz主頻,有浮點單元、NEON 和32KB 的L1 緩存,在典型場景下功耗小于100mW, 這使得它非常適合對功耗要求嚴格的移動設備

      Cortex-A7 MPCore處理器可支持核心數目:1-4個核心,通過SCU進行調度

      其搭載的核心中L1緩存分為(L1 instruction cache指令緩存和L1 data cache數據緩存),可選大小范圍:8KB、16KB、32KB、64KB;L2 Cache 可以不配,也可以選擇搭載128KB、256KB、512KB、1024KB

      備注:L1 和 L2 是計算機中緩存內存的級別,處理器能夠在緩存中找到其下一次操作所需的數據,與從隨機訪問內存中獲取數據相比,節省更多時間,級別越高與處理器越接近,訪問速度也越快

      Cortex-A7 MPCore 架構

      基于ARMv7-A架構,進行如下擴展:

      ① SIMDv2 擴展整形和浮點向量操作。

      ② 提供了與 ARM VFPv4 體系結構兼容的高性能的單雙精度浮點指令,支持全功能的IEEE754。

      ③ 支持大物理擴展(LPAE),最高可以訪問40 位存儲地址,也就是最高可以支持1TB 的內存。

      ④ 支持硬件虛擬化。

      ⑥ 支持Generic Interrupt Controller(GIC)V2.0。

      ⑦ 支持NEON,可以加速多媒體和信號處理算法。

      總線架構:

      Cortex-A7 MPCore處理器ACE和調試接口符合AXI和APB

      調試架構:

      使用了ARMv7.1 ARM Debug架構,符合CoreSight架構

      通用中斷控制器體系結構:

      Cortex-A7 MPCore處理器使用了通用中斷控制器(GIC) v2.0架構

      通用定時器架構:

      Cortex-A7 MPCore處理器實現了ARM通用定時器架構,包括對虛擬化擴展的支持。

      處理器特性

      有直接和間接分支預測的順序管道。

      帶有內存管理單元(MMU)的哈佛1級(L1)內存系統。

      APB調試接口,支持整數處理器時鐘比率,最高包括1:1。

      通過嵌入式跟蹤宏單元格(ETM)接口支持跟蹤。

      可選的VFPv4-D16 FPU與無trap執行或媒體處理引擎(MPE)與NEON技術。

      二、Cortex-A 處理器運行模型

      Cortex-A7有9種運行處理模式:

      User(USR)用戶模式為非特權模式

      其它 8 種運行模式都是特權模式

      不同模式間的資源使用權限不一樣

      模式間切換方式:1.軟件進行切換,2.中斷切換,3.異常切換;用戶模式是不能直接進行切換的,需要借助異常來完成模式切換,當要切換模式的時候,應用程序可以產生異常,在異常的處理過程中完成處理器模式切換;當中斷或者異常發生以后,處理器就會進入到相應運行模式的異常模式種,每一種模式都有一組寄存器供異常處理程序使用,這樣的目的是為了保證在進入異常模式以后,用戶模式下的寄存器不會被破壞。

      ARM裸機開發:Cortex-A7 MPCore架構基礎

      補充一個Tips:Cortex-M架構的運行模式只有兩種,一個特權一個非特權

      三、CorteX-A 寄存器組

      3.1 寄存器組成

      ARM 架構提供了 **16 個 32 位的通用寄存器(R0~R15)**供軟件使用

      在非特權模式下,前 15 個(R0~R14)可以用作通用的數據存儲,R15 是程序計數器 PC,用來保存將要執行的指令。ARM 還提供了一個當前程序狀態寄存器CPSR 和一個備份程序狀態寄存器 SPSR,SPSR 寄存器就是CPSR寄存器的備份,寄存器如下圖,其中R13用來做堆棧SP指針寄存器,R14用來做LR鏈接寄存器,R15為程序寄存器,指向下一步程序的執行地址:

      但在非特權模式下,R0到R15映射的寄存器就不一定是上圖的寄存器了,具體映射關系如下:

      上圖的淺色部分是非特權模式與特權模式相同的寄存器,加深的部分則是對應模式下重新映射的寄存器,訪問時會訪問深色部分寄存器

      我們可以看出,在所有的模式中,低寄存器組(R0~R7)是共享同一組物理寄存器的,只是一些高寄存器組在不同的模式有自己獨有的寄存器,比如 FIQ 模式下R8~R14 是獨立的物理寄存器。假如某個程序在 FIQ 模式下訪問 R13 寄存器,那它實際訪問的是寄存器 R13_fiq,如果程序處于 SVC 模式下訪問R13寄存器,那它實際訪問的是寄存器 R13_svc

      根據上圖,Cortex-A的內核寄存器組成如下:

      34 個通用寄存器,包括 R15 程序計數器(PC),這些寄存器都是 32 位的。

      8 個狀態寄存器,包括 CPSR 和 SPSR。

      Hyp 模式下獨有一個 ELR_Hyp 寄存器

      3.2 通用寄存器

      R0-R15為通用寄存器,具體可以分為以下三類:

      未備份的寄存器,R0 - R7

      備份的寄存器,即R8 - R14

      程序計數器PC,即 R15

      未備份寄存器

      寄存器R0 - R7 低八位寄存器是未備份寄存器,因為R0 - R7 對于9個運行模式是共用的寄存器,不同的模式下,這 8 個寄存器中的數據就會被破壞,所以這 8 個寄存器 并沒有被用作特殊用途

      備份寄存器

      R8 - R14為備份寄存器,

      R8-R12: R8 - R12寄存器在Usr和FIQ模式下,對應著不同的寄存器,在切換時因為映射的寄存器改變了,不需要對原先的寄存器做備份,進行現場保護,所以是備份寄存器

      R13: R13則對應著8個寄存器,其中用戶模式(User)和系統模式(Sys)共用 的,剩下的 7 個分別對應 7 種不同的模式。同時R13 也叫做 SP,用來做為棧指針。基本上每種模式 都有一個自己的 R13 物理寄存器,應用程序會初始化 R13,使其指向該模式專用的棧地址,這就是常說的 SP 指針

      R14: R14 也稱為連接寄存器(LR), LR 寄存器在 ARM 中主要用作如下兩種用途:

      每種處理器模式使用 R14(LR)來存放當前子程序的返回地址,如果使用 BL 或者 BLX 來調用子函數的話,R14(LR)被設置成該子函數的返回地址,在子函數中,將 R14(LR)中的值賦給 R15(PC)即可完成子函數返回,比如在匯編子程序中可以使用如下兩種代碼

      MOV PC, LR @直接將寄存器 LR 中的值賦值給 PC,實現跳轉

      1

      在子函數的入口出將 LR 入棧

      PUSH {LR} @通過堆棧將 LR 寄存器壓棧

      1

      在子函數的最后面出棧即可

      POP {PC} @然后將上面壓棧的 LR 寄存器數據出棧給 PC 寄存器 @嚴格意義上來講應該是將LR-4 賦給 PC,因為 3 級流水線,這里只是演示代碼。

      1

      2

      當異常發生以后,該異常模式對應的 R14 寄存器被設置成該異常模式將要返回的地址, R14 也可以當作普通寄存器使用。

      程序計數器

      程序計數器 R15 也叫做 PC,R15 保存著當前執行的指令地址值加 8 個字節,這是因為 ARM 的流水線機制導致的。ARM 處理器 3 級流水線:取指->譯碼->執行,這三級流水線循環執行, 比如當前正在執行第一條指令的同時也對第二條指令進行譯碼,第三條指令也同時被取出存放 在 R15(PC)中。我們喜歡以當前正在執行的指令作為參考點,也就是以第一條指令為參考點, 那么 R15(PC)中存放的就是第三條指令,換句話說就是 R15(PC)總是指向當前正在執行的指令 地址再加上 2 條指令的地址。對于 32 位的 ARM 處理器,每條指令是 4 個字節,所以: R15 (PC)值 = 當前執行的程序位置 + 8 個字節。

      和以前的51單片機PC指針相比,因為三級指令流水線,所以多了個指令偏移值(兩條指令的長度,8個字節)

      3.3 程序狀態寄存器

      程序狀態寄存器 CPSR 可以在任何模式下被訪問,他包含了條件標志位、中斷禁止位、當前處理器模式標志等一些狀態位以及一些控制位,因為能被所有模式訪問,所以每種模式下各自還存在CPSR寄存器的備份寄存器SPSR,用來保存對應模式運行時的CPSR狀態,這樣即使CPSR被別的模式改變了,通過各自的備份寄存器也能恢復到原來的狀態,但因為User和Sys模式不是異常模式,所以沒有配備SPSR,故不能在 User 和 Sys 模式下訪問 SPSR!

      SPSR和CPSR寄存器結構相同,如下圖:

      J & T 位表示當前指令集:

      Jazelle:允許在某些架構的硬件上加速執行Java bytecode

      Thumb:一種16-bit指令模式,在Thumb模式下,較小的opcode有更少的功能性

      ThumbEE:在所處的執行環境下,使得指令集能特別適用于執行階段(Runtime)的編碼產生(例如即時編譯)

      處理器模式控制位:

      ARM 單片機

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格統一設置標準行高的方法教程
      下一篇:深度學習之圖像識別 核心技術與案例實戰
      相關文章
      色噜噜噜噜亚洲第一| 在线观看日本亚洲一区| 国产成人亚洲综合无| 亚洲夂夂婷婷色拍WW47| 亚洲人成77777在线观看网| 亚洲天堂福利视频| 亚洲白嫩在线观看| 亚洲精品在线播放| 亚洲国产成人精品青青草原| 亚洲国产精品张柏芝在线观看| 亚洲精品中文字幕乱码| 亚洲人成人77777网站不卡| 亚洲一区精品视频在线| 亚洲国产乱码最新视频| 亚洲色欲啪啪久久WWW综合网| 亚洲人成色99999在线观看| 亚洲日本一线产区和二线产区对比| 一本色道久久综合亚洲精品蜜桃冫| 久久亚洲国产最新网站| 亚洲精品无码人妻无码| 日本系列1页亚洲系列| 亚洲国产人成精品| 亚洲中文字幕无码久久2017| 日本亚洲成高清一区二区三区| 亚洲AV无码专区电影在线观看 | 国产精品亚洲AV三区| 国产AV无码专区亚洲AV麻豆丫| 怡红院亚洲红怡院在线观看| 亚洲精品无码成人片在线观看 | 黑人大战亚洲人精品一区 | 亚洲乱码在线卡一卡二卡新区| 亚洲乱色伦图片区小说| 亚洲精品乱码久久久久久蜜桃| 日韩一卡2卡3卡4卡新区亚洲 | 亚洲AV日韩AV无码污污网站| 亚洲国产精品尤物YW在线观看| 亚洲性猛交XXXX| 亚洲国产成人私人影院| 亚洲人成电影网站| 亚洲AV无码国产一区二区三区 | 伊人亚洲综合青草青草久热|