mysql Python centos Windows Android 程序员 apache 编程 Ubuntu Firefox shell 云计算 linux java nginx google wordpress 开源 微软 php

ARM的结构

 CPU上電後從iROM中讀取預先設置的代碼(BL0),地址在:0xD000_0000~0xD000_FFFF,這段代碼進行 初始化指令Cache,堆,棧,塊設備復制函數(讀取外部啟動方式),PLL和系統內部時鐘,關看門狗,復制BL1(16K)到iRAM中並檢查BL1的校驗和,安全啟動相關設置,並跳轉到BL1去執行

 這段代碼在出廠前設置的,所以暫時還不能初始化NandFlash和DRAM,然後判斷我們通過硬件跳線設置的啟動模式,從相應的外部存儲器讀取啟動代碼(bootloader)到iRAM中,但是一般啟動代碼都超過了iRAM的96K的容量,三星的解決方案是把啟動代碼分2部分

其中有多種新的工作模式,以下介紹ARM的7中工作模式“

7中工作模式 

USER:非特權模式,大部分任務執行在這種模式下
FIQ:快速中斷模式,高優先級的中斷產生時會進入這種模式
IRQ:中斷模式,普通中斷產生時進入這種模式
SUPERVISOR:復位或者軟中斷指令被執行時進入這種模式
ABORT:存取異常時進入這種模式
UNDEF:執行到未定義指令時進入這種模式
SYSTEM:系統模式,內核運行在這種模式下,使用和USER模式相同的寄存器
除USER是Normal模式之外,其他都是Privilege特權模式
除SYSTEM之外其他特權模式都是異常模式
可以通過寫CPSR寄存器主動切換模式,也可以由CPU自動切換
各種模式下權限和可訪問的寄存器是不一樣的
ARM的CPU內部有17個基本通用寄存器,根據不同的工作模式可以定義成37個寄存器,每個寄存器都是32位,相對於其他設備的SFR來說,會更復雜一些,通用型寄存器通過寄存器的名字來訪問。每種模式下最多看到18個寄存器,其他寄存器雖然名字相同,但都屬於該模式的專用寄存器,在當前模式看不見。 
例如USER模式下的r13(sp)和r14(lr),是不重復的,是用戶模式專用的寄存器,這兩個寄存器在模式切換的時候是不需要考慮重復問題的。

延伸阅读

  • 抱歉,暂无相关内容!

评论