新聞中心

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

        s3c2410中斷異常處理流程

        作者: 時間:2011-12-05 來源:網絡 收藏

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

        本文引用地址:http://www.104case.com/article/150005.htm

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

        Reset,

        Undefined instruction,

        Software Interrupt,

        Abort (prefetch),

        Abort(data),

        Reserved,

        IRQ,

        FIQ

        下面是某個采用低端模式的系統源碼片段:

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

        _start:

        b

        Handle_Reset

        b HandleUndef

        b HandleSWI

        b

        HandlePrefetchAbort

        b HandleDataAbort

        b

        HandleNotUsed

        b HandleIRQ

        b

        HandleFIQ

        …..

        ..

        other

        codes

        ..

        .

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

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

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


        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

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

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

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

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


        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 新乡县| 施秉县| 四会市| 交城县| 延边| 云和县| 高平市| 屏边| 昭平县| 贵州省| 弥渡县| 遂川县| 中江县| 台中市| 榕江县| 巧家县| 津市市| 延安市| 四川省| 荥阳市| 唐海县| 西乌珠穆沁旗| 丰镇市| 东乡族自治县| 丹巴县| 铜鼓县| 平安县| 美姑县| 鄂伦春自治旗| 繁昌县| 安岳县| 扶沟县| 谢通门县| 寻乌县| 南开区| 苍南县| 东阿县| 嘉鱼县| 水富县| 忻州市| 黄梅县|