新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > s3c2410中斷異常處理流程

s3c2410中斷異常處理流程

作者: 時間:2011-12-05 來源:網(wǎng)絡 收藏

在進入正題之前,我想先把ARM920T的向量表(Exception Vectors)做一個簡短的介紹。:]

本文引用地址:http://2s4d.com/article/150005.htm

ARM920T的向量表有兩種存放方式,一種是低端存放(從0x00000000處開始存放),另一種是高端存放(從0xfff000000處開始存放)。關于為什么要分兩種方式進行存放這點我將在介紹MMU的文章中進行說明,本文采用低端模式。ARM920T能有8個,他們分別是:

Reset,

Undefined instruction,

Software Interrupt,

Abort (prefetch),

Abort(data),

Reserved,

IRQ,

FIQ

下面是某個采用低端模式的系統(tǒng)源碼片段:

/*****************************************************************************

_start:

b

Handle_Reset

b HandleUndef

b HandleSWI

b

HandlePrefetchAbort

b HandleDataAbort

b

HandleNotUsed

b HandleIRQ

b

HandleFIQ

…..

..

other

codes

..

.

*****************************************************************************/

上面這部分片段一般出現(xiàn)在一個名叫“head.s”的匯編文件的里,“b

Handle_Reset”這條語句就是系統(tǒng)上電之后運行的第一條語句。也就是說這部分代碼的二進制碼必須位于內存的最開始部分(這正是低端存放模式),因為上電后CPU會從SDRAM的0x00000000處取第一條指令并執(zhí)行。


Address

Instruct

0x00000000: b

Handle_Reset

0x00000004: b

HandleUndef

0x00000008: b

HandleSWI

0x0000000C: b

HandlePrefetchAbort

0x00000010: b

HandleDataAbort

0x00000014: b

HandleNotUsed

0x00000018: b

HandleIRQ

0x0000001C: b

HandleFIQ

上面是該程序段在系統(tǒng)上電后加載到內存后的分布情況,我們可以看到每條指令占用了4個字節(jié)。

上電后,PC指針會跳轉到Handle_Reset處開始運行。以后系統(tǒng)每當有異常出現(xiàn),則CPU會根據(jù)異常號,從內存的0x00000000處開始查表做相應的,比如系統(tǒng)觸發(fā)了一個IRQ異常,IRQ為第6號異常,則CPU將把PC指向0x00000018地址(4*6=24=

0x00000018)處運行,該地址的指令是跳轉到“異常服務例程”(HandleIRQ)處運行。以上就是我對異常向量表的一個簡單介紹?,F(xiàn)在可以進入我們文章的主題

異常”,分快中斷(FIQ)和普通中斷(IRQ),我們討論的重點是普通中斷(IRQ)。


上一頁 1 2 3 4 下一頁

評論


相關推薦

技術專區(qū)

關閉