物聯網之ARM體系結構及接口技術一(ARM基礎)

ARM基礎

認識ARM

ARM 產品線

ARM 體系架構:不同ARM體系採用不同的指令集,哈弗結構是數據和指令分開存儲並行(現在都是基於這種結構),早期的馮諾依曼(普林斯頓)結構是混合存儲的

ARM系統硬件組成和運行原理

手機程序存儲在FLASH中,板子上電之後CPU會將程序搬到內存中進行執行(提高執行速率)

控制器找到FLASH程序的地址,然後把指令取出來

運算器用於指令的相關運算

寄存器用於臨時存放運算的數據

開發環境搭建:(略)

ARM的工作模式及寄存器

ARM 工作模式

ARM主要有7個基本工作模式:

    User :  非特權模式,大部分任務執行在這種模式(普通用戶模式)

    FIQ :   當一個高優先級(fast) 中斷產生時將會進入這種模式

    IRQ :   當一個低優先級(normal) 中斷產生時將會進入這種模式

    Supervisor :當復位或軟中斷指令執行時將會進入這種模式(超級模式,有更高的訪問權限

    Abort : 當存取異常時將會進入這種模式(異常模式,一般接觸的少)

    Undef : 當執行未定義指令時會進入這種模式

    System : 使用和User模式相同寄存器集的特權模式(與User模式相同,只是比User權限更高一點)

ARM 有37個寄存器:

    1 個用作PC( Program Counter)(程序計數寄存器

    1個用作CPSR(Current Program Status Register)(狀態寄存器:CPU處於哪種狀態

   5個用作SPSR(Saved Program Status Registers)(備用的狀態寄存器:當切換到其他工作模式時,用來保存當前狀態寄存器(CPSR),便於下次切換回來時再將該值賦給CPSR

    30 個通用寄存(臨時存放數據的場所)        

ARM 工作模式及寄存器框圖:(重要

以下列出了ARM的7中工作模式(其中UserSystem 基本相同,所以列在一起)

該ARM是32位,所以一個寄存器有4個字節

r0-r7:普通寄存器,用來存放數據

User模式下:r8-r12也是普通寄存器

r15:PC寄存器

r4:存儲函數返回地址

r3:棧頂指針(中斷時(IRQ)保護現場(進棧)和恢復現場(出棧))

CPSR:當前狀態寄存器

沒有三角形標註的寄存器爲7種工作模式的公用寄存器,有三角形標註的寄存器表示額外多的一份寄存器

搬移指令

     mov  r1,#3

     mov  r2,r1

CPSR 寄存器:(當前程序狀態寄存器)

 條件位:

N = Negative result from ALU

Z = Zero result from ALU

C = ALU operation Carried out or  borrow

V = ALU operation oVerflowed

T 位(M[5]) J 位(M[24])

T = 0;J=0    處理器處於 ARM 狀態(一條指令佔4個字節)

T = 1;J=0    處理器處於 Thumb 狀態(一條指令只佔2個字節)

中斷禁止位:(M[6-7])

I  = 1: 禁止  IRQ.

                  F = 1: 禁止  FIQ

       Mode位:處理器模式位(低五位M[0-4]:表示7種模式)

                 10000  User mode     10011 SVC mode;            

                 10010  IRQ                10001 FIQ mode;          

                 10111  Abort mode   11011 Undfined mode  11111 System mode;

      CPSR / SPSR操作指令

                 mrs   r0,CPSR   (特殊寄存器操作使用msr。將CPSR的值讀到r0寄存器中)

                 msr  CPSR,r0     (特殊寄存器操作使用msr將r0寄存器中的值賦給CPSR)

.text                                                @文件頭

mov r0,#3                                       @將常數3賦值給r0寄存器

cmp r0,#3                                       @r0和3的值進行比較(可根據cpsr的高5位判斷比較或者計算的結果)

add r1,r0,#5                                   @將r0+5的值賦給r1

mov r1,r0                                        @將r0的值賦給r1

mov r3,#0xd0                                 @將常數0xd0(該常數低5位表示User模式,其餘位和cpsr保持一致)

msr cpsr,r3                                    @將r3的值賦給cpsr寄存器,將狀態由Supervisor模式轉變爲User模式,注意給特殊寄存器賦值要使用msr

mov r3,#0xd3                                 @常數0xd3的低5位表示Supervisor模式

msr cpsr,r3                                    @這一步目的是想將r3的值賦給cpsr,從而可以改變當前運行狀態,但是狀態還是沒有改變,因爲User模式權限不夠,不能改變該寄存器的值,可以通過中斷將狀態更改爲Supervisor模式

swi 1                                              @軟中斷,將運行狀態從User模式轉變爲Supervisor模式

.end                                               @文件尾

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章