[嵌入式]Cortex-A8處理器程式設計(上)
Cortex-A8處理器程式設計
3.1 ARM程式設計簡介
·在嵌入式系統開發中,目前使用的主要程式語言是C和彙編。很多地方,例如開機時硬體系統的初始化,包括CPU狀態的設定、中斷的使能、主頻的設定、以及RAM的控制引數及初始化等都使用匯編語言。組合語言是和CPU的指令集緊密相連的,作為涉及底層的嵌入式系統開發,組合語言程式設計不可或缺的重要方法。
·ARM嵌入式系統程式設計和所使用的ARM微處理器資源密切相關。只有瞭解ARM微處理器的工作模式、狀態、儲存器組織、定址方式,並且掌握ARM的指令系統,才有可能寫出適用的ARM程式。
3.2 Cortex-A8處理器模式和狀態
一、處理器模式
二、處理器狀態
Cortex-A8處理器有3種操作狀態,這些狀態由CPSR暫存器的T位和J位控制。
· ARM狀態:執行32位字對齊的ARM指令,T位和J位為0。
· Thumb狀態:執行16位或32位半字對齊的Thumb2指令,T位為1,J位為0。
· ThumbEE狀態:執行為動態產生目標而設計的16位或32位半字對齊的Thumb2指令集的變體。T位和J位為1。
處理器的操作狀態可以在以下幾種狀態間轉換:
·ARM狀態和Thumb狀態之間轉換
使用BL和BLX指令,並載入到PC。
·Thumb狀態和ThumbEE狀態之間轉換
使用ENTERX指令和LEAVEX指令。
異常會導致處理器進入ARM狀態或Thumb狀態。一般情況,當退出異常處理時,處理器會恢復原來的T位和J位的值。
3.3 Cortex-A8儲存器組織
一、資料型別
Cortex-A8支援以下資料型別:
1)雙字,64位;2)字,32位;3)半字,16位;4)位元組,8位。
當這些資料型別為無符號資料時,為普通二進位制格式,N位資料值代表一個非負整數(範圍為0~2N-1);當這些資料型別為有符號資料時,為二進位制補碼格式,N位資料值代表一個整數(範圍為-2N-1~2N-1-1)。
為了達到最好的效能,資料必須按照以下方式對齊:
·以字為單位時,按4位元組對齊;
·以半字為單位時,按2位元組對齊;
·以位元組為單位時,按1位元組對齊。
Cortex-A8處理器支援混合大小端格式和非對齊資料訪問。
二、儲存格式
Cortex-A8處理器支援小端格式和位元組不變的大端格式。此外,處理器還支援混合大小端格式(既有大端格式又有小端格式)和非對齊資料訪問。對指令的讀取,則總是以小端格式操作。
例如:對於0x12345678資料,大端模式和小端模式的存放如圖所示。
三、暫存器組
Cortex-A8處理器總共有40個32位長的暫存器。
· 33個通用暫存器。
·7個狀態暫存器:
——1個CPSR(Current Programs Status Register,當前程式狀態暫存器);
——6個SPSR(Saved Program Status Register,備份程式狀態暫存器)。
這些暫存器不能同時訪問,處理器狀態和操作模式決定了哪些暫存器對程式設計者是可用的。
· 未分組的通用暫存器R0—R7
16個資料暫存器中R0--R7是未分組的通用暫存器,用來儲存資料和地址。
·分組通用暫存器R8—R15,處理器模式決定物理暫存器
——R8—R12暫存器:快速中斷及其他模式兩組;
——R13,R14暫存器:分7組,使用者和管理模式共用;
R13:又稱SP,堆疊指標
R14:又稱LR,連結暫存器
——R15:又稱PC,程式計數器,所有模式共用;
· 當前狀態暫存器CPSR:所有模式共用;
· 分組的狀態儲存暫存器SPSR:6個異常模式對應。
處理器有兩類程式狀態暫存器:1個當前程式狀態暫存器CPSR和6個狀態儲存暫存器SPSR,主要功能如下:
·儲存最近執行的算術或邏輯運算的資訊;
·控制中斷的允許或禁止;
·設定處理器操作模式。
狀態暫存器
·條件標誌位
·Q標誌位
·IT塊
·J位
·GE[3:0]位
·E位
·A位
·控制位
——中斷遮蔽位
——T位
——模式位
·保留位
3.4 異常
異常是處理外部非同步事件的一種方法,在有些處理器架構中稱為中斷。
當某個異常發生時,例如一個來自外圍裝置的中斷,處理器將暫停正常執行的程式。在處理這個異常之前,處理器需要保留當前處理器狀態以便在異常處理程式結束之後恢復原來程式執行。
若有兩個或更多的異常同時發生,處理器將根據中斷優先順序來處理這些異常。
一、異常入口
二、異常退出
三、復位異常(RESET)
復位也是一種異常。當復位訊號產生時,復位發生處理器放棄正在執行的指令。當復位訊號失效之後,處理器會採取如下動作:
·將CPSR置為10011,安全Supervisor模式。
·將CPSR的A、I、F位置為1。
·將CPSR的J位置0,根據CFGTE輸入的狀態來決定CPSR的T位;CPSR的其他位不確定。
·強制PC從復位向量地址中獲取下一條指令。
·根據CFGTE輸入的狀態,在ARM或者Thumb狀態下執行恢復操作。
·復位之後,除了PC和CPSR以外的所有的暫存器的值都是不確定的。
四、快速中斷異常(FIQ)
FIQ異常支援快速中斷。FIQ模式有8個專用暫存器。可以通過設定CPSR的F標誌位,在特權模式中禁止FIQ。
五、中斷異常(IRQ)
IRQ比FIQ優先順序低。當處理器進入FIQ處理時,IRQ會被遮蔽。可以通過設定CPSR的I位在特權模式下禁止IRQ異常。
六、中止異常(ABT)
試圖訪問無效的指令或資料記憶體單元通常都會引起中止。
——預取指中止:預讀取中止發生時,處理器將標誌這條預讀取指令無效,但是直到執行這條指令才產生異常。
——資料中止:試圖訪問無效的資料記憶體單元引起。
七、軟體中斷異常
SVC指令進入管理模式,通常是為了請求一個特殊的管理員功能。SVC處理程式通過讀取操作碼來提取SVC功能號。
八、監控異常
當處理器執行SMC指令,核心進入監控模式請求監控功能。使用者程式執行SMC會導致一個未定義的指令異常發生。
九、未定義指令異常
當遇到一條處理器或系統協處理器無法處理的指令時,則產生未定義指令異常。軟體可以利用這種機制,通過模擬未定義的協處理器指令來擴充套件ARM指令集。
十、斷點指令
執行斷點指令BKPT,產生一個預取中止異常。在指令到達流水線執行階段前,不會引起處理器產生預取中止異常。
異常向量與優先順序
異常出現後處理器強制從異常型別所對應的固定儲存器地址開始執行程式,這些地址稱為異常向量(exception vectors)。在沒有進行虛擬記憶體對映時,異常向量表放置於實體記憶體地址最低處
異常的進入
當處理一個異常時,ARM9核心完成以下動作:
(1)將下一條指令的地址儲存在相應的LR暫存器中。
(2)將CPSR複製到相應的SPSR中。
(3)迫使CPSR模式位M[4:0]的值設定成對應的異常模式值
(4)迫使PC從相關的異常向量取下一條指令。
(5)使用者可以設定中斷禁止位來阻止或開啟異常巢狀。如果在異常發生時處理器是在Thumb狀態下,自動切換進入ARM狀態。
異常的退出
在完成異常處理後,ARM9完成以下動作:
(1)將LR暫存器的值減去相應的偏移量(偏移量根據異常的不同而不同),送到PC中。
(2)將SPSR複製回CPSR中。
(3)清除中斷禁止位標誌。
相關文章
- [嵌入式]Cortex-A8處理器程式設計(中)程式設計
- [嵌入式]Cortex-A8處理器程式設計(下)程式設計
- [嵌入式]S5PV210微處理器GPIO程式設計程式設計
- 常見處理器MCU、MPU、DSP、FPGA等嵌入式處理器FPGA
- 執行在網路處理器上的嵌入式Linux系統(轉)Linux
- 資料協議處理、影片協議處理、電氣IO量處理、嵌入式SCADA系統工業控制閘道器設計協議
- [嵌入式]ARM Cortex-A8體系結構
- Linux系統程式設計之訊號中斷處理(上)Linux程式設計
- 嵌入式作業5.1 定時器程式設計定時器程式設計
- CSS | 前處理器(上)- SassCSS
- MIPS單週期處理器設計
- Linux系統程式設計(35)—— socket程式設計之TCP伺服器的併發處理Linux程式設計TCP伺服器
- 計算機組成與設計(4)-----處理器計算機
- 深度學習高效計算與處理器設計深度學習
- 二、GO 程式設計模式:錯誤處理Go程式設計設計模式
- Java-GUI程式設計之事件處理JavaGUI程式設計事件
- 如何處理前任程式設計師留下的程式碼程式設計師
- 設計一個全域性異常處理器
- 從併發程式設計到分散式系統-如何處理海量資料(上)程式設計分散式
- C語言程式設計——9,預處理命令C語言程式設計
- Linux Shell程式設計(23)——文字處理命令Linux程式設計
- Linux核心模組程式設計--中斷處理程式(轉)Linux程式設計
- 從程式設計攔截器到大腦資訊攔截處理架構程式設計架構
- 嵌入式程式設計學習(1)程式設計
- Linux系統程式設計(33)—— socket程式設計之TCP程式的錯誤處理Linux程式設計TCP
- Intel組合語言程式設計學習-第二章 IA-32處理器體系結構-上Intel組合語言程式設計
- 嵌入式:微軟將推出第二代AI處理器應對海量資料處理微軟AI
- 優秀程式設計師是如何處理糟糕程式碼的程式設計師
- Java-GUI程式設計之處理點陣圖JavaGUI程式設計
- linux網路程式設計中的errno處理Linux程式設計
- LOTO示波器動作程式設計功能(命令批處理)程式設計
- JDBC事務處理設計JDBC
- 在手機上程式設計:自制的小飛可程式設計複數計算器(小飛計算器)程式設計
- 嵌入式系統程式設計基礎程式設計
- 計算機處理器結構計算機
- 痞子衡嵌入式:微處理器CPU效能測試基準(Dhrystone)
- 嵌入式開發微處理器選型需要考慮的因素
- 程式設計小技巧之 Linux 文字處理命令(二)程式設計Linux