ucos在s3c2410上運行過程整體剖析之基礎知識-與UCOS運行有關的ARM9晶片知識–續

來源:互聯網
上載者:User

使用者模式(user模式),運行應用的普通模式;

快速中斷模式(fiq模式),用於支援資料轉送或通道處理;

中斷模式(irq模式),用於普通中斷處理。

超級使用者模式(svc模式),作業系統的保護模式

異常中斷模式(abt模式),輸入資料後登入或預取異常中斷指令

系統模式(sys模式),是作業系統使用的一個有特權的使用者模式

未定義模式(und模式),執行了未定義指令時進入該模式

 

外部中斷,異常操作或軟體控制都可以改變中斷模式。大多數應用程式都時是在使用者模式下運行。進入特權模式是為了處理中斷或異常請求或操作保護資源服務的。

 

這些工作模式是晶片硬體提供的程式啟動並執行不同環境,不同的模式有不同的硬體存取權限,使用不同的寄存器。這就給不同的程式提供了不同的許可權機制,你比如說你的作業系統代碼運行在許可權比較高的模式下,而你的應用程式運行在許可權比較低的模式下。這樣就起到了對作業系統代碼的保護作用。

寄存器,各個模式下可見的寄存器以及各個寄存器的功能:

ARM共有37個32位的寄存器,其中31個是通用寄存器,6個是狀態寄存器。但在同一時間,

對程式員來說並不是所有的寄存器都可見。在某一時刻儲存空間是否可見(可被訪問),是處

理器當前的工作狀態和工作模式決定的。其各個模式下的寄存器1所示:

其中系統模式和使用者模式所用的寄存器是一樣的。畫三角陰影的寄存器表示在不同模式下

有不同的物理寄存器。

以下對其進行分類說明:

通用寄存器

ARM的通用寄存器包括R0~R15,其中R0~R7是屬於未分組寄存器,各個模式下都使用同樣的寄

存器。R8~R14在FIQ模式下是有獨立的物理寄存器,其目的是加快中斷響應速度,從硬體上

儲存程式執行現場。R13和R14這兩個寄存器在每種模式下都有自己的獨立寄存器。R15隻有

一個,所有模式公用。

下對這些寄存器中的比較有特殊功能的做一下介紹:

寄存器R13:在ARM指令中,常用R13做堆棧指標用。每種運行模式都有自己獨立的堆棧,用於儲存中斷髮生時的程式運行環境和C語言執行時進行過程式控制制。

寄存器R14:專職持有返回點的地址,在系統執行一條“跳轉並連結(link)”(BL)指令

的時候,R14將收到一個R15的拷貝。其他的時候,它可以用作一個通用寄存器。相應的它

在其他模式下的私人寄存器R14_svc,R14_irq,R14_fiq,R14_abt和R14_und都同樣用來保

存在中斷或異常發生時,或時在中斷和異常中執行了BL指令時,R15的傳回值。

寄存器R15是程式計數器(PC)。在ARM狀態下,R15的bits[1:0]為0,bits[31:2]儲存了PC

的值。在Thumb狀態下,bits[0]為0同時bits[31:1]儲存了PC值。

FIQ模式擁有7個私人寄存器R8-14(R8_fiq-R14_fiq)。在ARM狀態下,多數FIQ處理都不需要儲存任何寄存器。使用者、中斷、異常中止,超級使用者和未定義模式都擁有2個私人寄存器,R13和R14。允許這些模式都可擁有1個私人堆棧指標和連結(link)寄存器。

程式狀態寄存器

ARM920T具有一個當前程式狀態寄存器(CPSR),另外還有5個儲存程式狀態寄存器(SPSRs)用於異常中斷處理。這些寄存器的功能有:

保留最近完成的ALU操作的資訊;

控制中斷的使能和禁止;

設定處理器的操作模式。

 

2顯示了程式狀態寄存器的位定義:

 

關於這些位的具體含義請參見datasheet。

異常:

當正常的程式執行流程因一些原因發生暫時的停止時,稱之為異常。比如晶片取到了一條不認識的指令,當這條指令執行時就會發生Abort異常中止,從而進入Abort模式。也就是說不通的條件會發生不通的異常,而不同的異常就會使處理器進入不同的處理模式。

你想知道異常什麼時候發生,怎麼發生的?發生後晶片都要幹些什嗎?怎麼從這些異常中返回?異常向量表是什嗎?那就請你仔細閱讀datasheet的第二章program’s model,這一章對這些問題都做了詳細的說明和講解。

當然,這些和後面的UCOS是有關係的,比如UCOS和使用者的應用程式是統一編譯的,都運行在SVC模式下,當外部中斷來時會切換到中斷模式。

請看下面的異常(中斷)向量表:

地址

異常中斷類型

進入時處理器模式

0x00000000

Reset

Supervisor

0x00000004

Undefined instruction

Undefined

0x00000008

Software Interrupt

Supervisor

0x0000000C

Abort (prefetch)

Abort

0x00000010

Abort (data)

Abort

0x00000014

Reserved

Reserved

0x00000018

IRQ

IRQ

0x0000001C

FIQ

FIQ

 

異常向量表是一個填好了的跳轉指令表,中斷向量表就位於記憶體位址的0開始處。當相應的異常發生時,CPU最後要把PC值改成向量表裡的跳轉指令實現跳轉去執行相應的服務程式。當然這時CPU的運行模式就更改了。我們看IRQ中斷異常,這個地址向量是外部中斷的入口地址,那我們知道ARM9晶片上支援的中斷源有很多,那中斷入口就一個,怎麼識別到底是哪一個具體中斷源發生了那。這一部分知識就是中斷控制器的內容了,請參加下面的文章或者參加datasheet的十四章interrupt controller。

關於更詳細的資料請參考920t的datasheet!!!!!   

關於arm中斷系統請參考arm920t中斷系統詳解。和ucos相關的arm晶片知識講完了,當然arm晶片知識還很多,參考920t的datasheet!!!!!   

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.