新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 中斷處理模式: 外部中斷處理和內部中斷處理的差異性

        中斷處理模式: 外部中斷處理和內部中斷處理的差異性

        作者: 時間:2013-08-08 來源:網絡 收藏

        相關程序可參考圖表 5。在ARC a時,當ireqack訊號為low時,CPU可等待周邊裝置觸發。當周邊裝置觸發控制器將相對應中斷訊號int_req和ireqval拉起,告知CPU有中斷發生。在ARC b時,當CPU收到中斷,則將ireqack訊號拉起,告知中斷控制器已收到中斷。在ARC c時,中斷控制器將ireqval訊號拉下,并等待CPU將ireqack訊號拉下(在ARC d時),表示CPU可接收新的中斷觸發。

        圖表5. EVIC Interrupt Request Level Transfer Sequence

        1.3 System Register Setting

        關于上述兩種中斷的選擇,用戶可透過設定AndesCore™ N968A-S的一個system register來達到目的。

        該system register為Interruption Vector Base Register(ir3)。其中的第13個bit決定不同的中斷。其格式如下:

        QQ截圖20130808131410.jpg

        2. Reference Design Architecture

        在介紹完中斷相關定義之后,本章節提供在實際整合與應用上的范例,讓用戶可更了解在不同中斷模式下的差異。

        2.1 主要架構

        本次所實作的Reference Design主要是架構在Andes mini-platform上,搭配AndesCore™ N968A-S為主要CPU來控制相關周邊裝置。其主要架構如下圖:

        圖表8. Architecture of Reference Design

        將AndesCore™ N968A-S整合在AHB-Lite Bus上,藉由APB Bridge和APB Bus溝通,而相關的周邊裝置則整合在APB Bus上。在本次范例中,主要會用到GPIO和INTC(中斷控制器)這兩個周邊裝置,在不同的中斷模式下,利用GPIO來觸發中斷,再透過INTC與CPU溝通,觀察不同中斷模式下中斷的處理方式。

        2.1.1 Design Scenario in IVIC

        在IVIC模式下,由GPIO觸發中斷(gpio_int signal),直接將中斷傳遞給CPU(int_req signal)。當CPU接收到中斷時,即可去處理相關的中斷處理程序。相關裝置之間的整合如下圖所示:

        QQ截圖20130808131610.jpg

        2.1.2 Design Scenario in EVIC

        在EVIC模式下,由GPIO觸發中斷(gpio_int signal),INTC收到中斷后,會將中斷訊號和相關溝通訊號傳遞給CPU(int_req signal evic_ireqval signal)。當CPU接收到中斷時,會將響應訊號拉起(evic_ireqack signal),告知INTC收到該中斷,并去處理相關的中斷處理程序。相關裝置之間的整合如下圖所示:

        QQ截圖20130808131707.jpg

        2.2 Example Code

        以下將Reference Design中,就本次中斷處理模式相關的整合程序部分和測試程序部分,摘要出來說明。

        2.2.1 整合程序部分

        在系統整合部分,包含AndesCore™ N968A-S和INTC在不同的模式下,整合相關的訊號線,其中透過EVIC_MODE參數來進行不同模式間的切換。

        AndesCore™ N968A-S相關RTL片斷:

        evic_ireqval訊號在EVIC模式下由INTC觸發給CPU,在IVIC下可直接給予0值。int_req由INTC或中斷來源傳遞給CPU,告知CPU中斷產生。evic_ireqack在EVIC模式下由CPU觸發給INTC,告知INTC收到中斷。

        n9_core n9_core (

        ...

        `ifdef EVIC_MODE

        .evic_ireqval (evic_ireqval),

        `else

        .evic_ireqval (1'b0),

        `endif

        .int_req (int_req),

        .evic_ireqack (evic_ireqack),

        ...

        INTC相關RTL片斷:

        此中斷控制器可透過evic_mode這個輸入訊號,來決定該裝置是處于IVIC模式或是EVIC模式,因此,在EVIC模式下,給予1值,設定為EVIC模式,在IVIC下,給予0值,設定為IVIC模式。ireqack訊號在EVIC模式下由CPU觸發給INTC,告知INTC已收到中斷,在IVIC模式下則給予0值。

        ncore_intctl intctl (

        .PCLK (pclk),

        .PRSTn (preset_n~wd_rst),

        `ifdef EVIC_MODE

        .evic_mode (1'b1),

        .ireqack (evic_ireqack),

        `else

        .evic_mode (1'b0),

        .ireqack (1'b0),

        `endif

        .int_req (int_req),

        .ireqval (evic_ireqval),

        ...

        2.2.2 測試程序部分

        在測試驗證部分,包含AndesCore™ N968A-S在不同中斷模式下的設置、INTC相關中斷狀態的設置和GPIO觸發中斷的設置。

        AndesCore™ N968A-S相關程序片斷:

        AndesCore™ N968A-S支持兩種中斷處理模式,透過CPU的system register來設置。主要為設置Interruption Vector Base Register,該register的第13個bit用來定義CPU處在何種中斷處理模式。在EVIC模式下,需將該bit設置為1,在IVIC模式下,則將該bit設置為0。

        !---------------!

        !--- Set $IVB ---!

        !---------------!

        ! [31:16] (IVBASE) = 16'$h0

        ! [15:14] (ESZ) = 2'b00 (4 bytes)

        ! [13] (EVIC) = 1'b0 (IVIC mode)

        mfsr $r0, $IVB !read $IVB

        ori $r0, $r0, #0x2000 !enable EVIC

        水位傳感器相關文章:水位傳感器原理


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 开远市| 大安市| 黄冈市| 兰西县| 科尔| 长汀县| 都江堰市| 五台县| 巫溪县| 枣强县| 平遥县| 黄浦区| 祁门县| 界首市| 和林格尔县| 荔浦县| 普宁市| 寿阳县| 航空| 金昌市| 咸宁市| 长海县| 南澳县| 克什克腾旗| 长顺县| 石台县| 大邑县| 南涧| 德兴市| 当雄县| 陈巴尔虎旗| 尚义县| 凤阳县| 偃师市| 双桥区| 卫辉市| 黎平县| 长寿区| 罗平县| 南江县| 定日县|