ARM體系結構
編程原理
從源代碼到CPU執行過程
體系結構
馮諾依曼結結構
程序和數據放在同一內存中,彼此不分離的結構。如:Intel CPU
- 特點
- 安全和穩定性不好
- 處理起來簡單
哈佛結構
程序(一般放在ROM、Flash中)和數據(一般放在RAM中)分開獨立存放在不同的內存塊中,彼此完全分離的結構。如:單片機、ARM CPU
- 特點
- 安全和穩定性高
- 軟件處理復雜
指令集
- CISC復雜指令集
- 設計理念:用最少的指令完成任務
- CPU本身設計復雜,工藝復雜
- 如:Intel CPU
- RISC精簡指令集
- 設計理念:讓軟件完成具體的任務,CPU本身僅提供基本指令集
- 編譯器的設計變難了
- 如:ARM CPU
總線編址方式
- IO與內存獨立編址
使用專用的CPU指令來訪問某種特定外設。如:Intel CPU - IO與內存統一編址
把外設的寄存器當做一個內存地址來讀寫。如:ARM CPU
ARM CPU 工作模式
7個基本工作模式
- 非特權模式
- User:普通模式,大部分任務執行在這種模式
- 特權模式
- 系統模式
- System:使用和User模式相同寄存器集的特權模式
- 異常模式
- FIQ:當高優先級(fast)中斷產生時,進入這種模式
- IRQ:當低優先級(normal)中斷產生時,進入這種模式
- Supervisor:當復位或軟中斷指令執行時,進入這種模式
- Abort:當存取異常時,進入這種模式
- Undef:當執行未定義指令時,進入這種模式
- 系統模式
寄存器
寄存器特性
- 寄存器屬于CPU外設的硬件組成部分
- CPU可以像訪問內存一樣訪問寄存器
- 寄存器設計的目的是留作外設被編程控制的“活動開關”
- 寄存器中每個bit位都有特定含義,編程時需要位操作。如STM32寄存器編程
- 單個寄存器的位寬一般和CPU的位寬一樣,以實現最佳訪問效率
寄存器分類
- 通用寄存器
- 是CPU的組成部分,ARM CPU有37個。
- SFR(特殊功能寄存器)
- 不在CPU中,而是存在于CPU的外設中,可通過訪問外設的SFR來編程操控這個外設。
ARM CPU的37個寄存器
- ARM 共有37個寄存器,但每種工作模式下最多只能看到18個寄存器,其他寄存器在當前模式下不可見。這種設計叫影子寄存器(banked register)
- ARM 37個寄存器,都是32位長度
- 30個:“通用”型
- 1個:固定用作PC
- 1個:固定用作CPSR
- 5個:固定用作5種異常模式下的SPSR
- CPSR程序狀態寄存器
- CPSR中各個bit位表明了CPU的某些狀態信息
- CPSR中的I、F位和開中斷、關中斷有關
- CPSR的mode位決定了CPU的工作模式
- PC(Program control register)程序指針
- 整個CPU只有一個PC,PC指向哪里,CPU就會執行哪條指令
- 整個CPU只有一個PC,PC指向哪里,CPU就會執行哪條指令
ARM 異常處理方式
異常
- 正常工作之外的流程都叫異常
- 異常會打斷正在執行的工作,且異常處理完成后繼續回來執行原來的工作
- 中斷是異常的一種
異常向量表
- 所有的CPU都有異常向量表,是CPU設計時就設定好的,是硬件決定的
- 當異常發生時,CPU會自動動作(PC跳轉到異常向量處處理異常)
- 異常向量表是硬件向軟件提供的處理異常的支持
異常處理機制
- 當異常產生時,ARM core進行現場保護:
- 拷貝CPSR到SPSR_
- 設置適當的CPSR位:
- 改變處理器狀態進入ARM態
- 改變處理器模式進入相應的異常模式
- 如果需要,設置中斷禁止位禁止中斷
- 保存返回地址到LR_
- 設置PC為相應的異常向量
- 返回時:
- 從SPSR_恢復CPSR
- 從LR_恢復PC
內存地址映射
以S5PV210為例,ARM Cortex-A8架構,32位CPU。
- 相關術語表
術語 | 描述 |
---|---|
ROM(Read only Memory) | 只讀存儲器 |
RAM(Random access Memory) | 隨機訪問存儲器 |
IROM(Internal ROM) | 內部ROM,集成到SOC內部的ROM |
IRAM(Internal RAM) | 內部RAM,集成到SOC內部的RAM |
DRAM(Dynamic RAM) | 動態RAM |
SRAM(Static RAM) | 靜態RAM |
SFR(Special function Register) | 特殊功能寄存器 |
內存與外存
- 內存/外存區別
術語 | 用途 | 描述 |
---|---|---|
內存 | 用來運行程序 | RAM,如DRAM、SRAM、DDR |
外存 | 用來存儲程序和數據 | ROM,如Flash(Nand、iNand、U盤、SSD)、硬盤、光盤 |
- 內存的區別
術語 | 特點 |
---|---|
SRAM | 容量小、價格高,優點是不需要軟件初始化,上電直接就能用 |
DRAM | 容量大、價格低,缺點是上電后不能直接使用,需要軟件初始化后才能使用 |
- 外存的區別
術語 | 特點 |
---|---|
NorFlash | 容量小、價格高,優點是可以和CPU直接總線式相連,CPU上電后直接讀取。一般用作啟動介質 |
NandFlash | 容量大、價格低,缺點是不能總線式訪問,上電時CPU不能直接讀取,需要CPU先運行初始化軟件,然后通過時序接口進行讀寫 |
SOC啟動過程
啟動過程
啟動過程對比
類型 | 描述 |
---|---|
PC機 | 很小容量的BIOS(NorFlash) + 很大容量的硬盤(類似于NandFlash) + 大容量的DRAM |
單片機 | 很小容量的NorFlash + 很小容量的SRAM |
SoC | 外接的大容量Nand + 外接的大容量DRAM + SOC內置的SRAM |
SOC啟動步驟示例
- 第一步:CPU上電后先從內部IROM中讀取預先設置的代碼(BL0),并執行。BL0代碼,首先做一些基本初始化(CPU時鐘,關看門狗…);然后判斷選擇啟動模式(如通過OMPin設置),并從對應的外部存儲器中去讀取第一部分啟動代碼(BL1,大小為16KB)到內部SRAM。
- 第二步:從IRAM中去運行上一步讀取來的BL1(16KB)。BL1負責初始化NandFlash,然后將BL2讀取到IRAM(剩余的80KB)。
- 第三步:從IRAM運行BL2,BL2初始化DRAM;然后將OS讀取到DRAM中,并啟動OS。啟動過程結束。