新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > AVR 中斷優先級

        AVR 中斷優先級

        作者: 時間:2016-11-13 來源:網絡 收藏
        AVR單片機在同一個優先級中,中斷向量入口地址越低,其優先級越高。AVR單片機在響應中斷以后,會禁止系統響應其余中斷。如果程序需要在某個中斷服務程序中響應其它中斷事件,可以在該中斷服務程序中用SEI指令或_SEI()(IAR)、 SEI()(ICCAVR)重新使能全局

        中斷即可。否則,AVR單片機只有在退出中斷進程時,才重新使能全局中斷。AVR(至少是ATmega16)單片機采用固定的硬件優先級方式,不支持通過軟件對中斷優先級重新設定。

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

        AVR有不同的中斷源。每個中斷和復位在程序空間都有獨立的中斷向量。所有的中斷事件都有自己的使能位。當使能位置位,且狀態寄存器的全局中斷使能位I 也置位時,中斷可以發生。根據程序計數器PC 的不同,在引導鎖定位BLB02 或BLB12 被編程的情況下,中斷可能被自動禁止。這個特性提高了軟件的安全性。詳見 P247“ 存儲器編程” 的描述。

        程序存儲區的最低地址缺省為復位向量和中斷向量。完整的向量列表請參見 P43“中斷”。列表也決定了不同中斷的優先級。向量所在的地址越低,優先級越高。RESET 具有最高的優先級,第二個為INT0 – 外部中斷請求0。通過置位MCU 控制寄存器 (MCUCR) 的IVSEL,中斷向量可以移至引導Flash的起始處。編程熔絲位BOOTRST也可以將復位向量移至引導Flash的起始處。具體參見P234“支持引導裝入程序 – 在寫的同時可以讀(RWW,Read-While-Write) 的自我編程能力”。

        任一中斷發生時全局中斷使能位I 被清零,從而禁止了所有其他的中斷。用戶軟件可以在中斷程序里置位I 來實現中斷嵌套。此時所有的中斷都可以中斷當前的中斷服務程序。執行RETI 指令后I 自動置位。

        從根本上說有兩種類型的中斷。第一種由事件觸發并置位中斷標志。對于這些中斷,程序計數器跳轉到實際的中斷向量以執行中斷處理程序,同時硬件將清除相應的中斷標志。中斷標志也可以通過對其寫”1” 的方式來清除。當中斷發生后,如果相應的中斷使能位為“0”,則中斷標志位置位,并一直保持到中斷執行,或者被軟件清除。類似的,如果全局中斷標志被清零,則所有已發生的中斷都不會被執行,直到I 置位。然后掛起的各個中斷按中斷優先級依次執行。

        第二種類型的中斷則是只要中斷條件滿足,就會一直觸發。這些中斷不需要中斷標志。若中斷條件在中斷使能之前就消失了,中斷不會被觸發。

        AVR 退出中斷后總是回到主程序并至少執行一條指令才可以去執行其他被掛起的中斷。要注意的是,進入中斷服務程序時狀態寄存器不會自動保存,中斷返回時也不會自動恢復。這些工作必須由用戶通過軟件來完成。

        使用CLI 指令來禁止中斷時,中斷禁止立即生效。沒有中斷可以在執行CLI 指令后發生,即使它是在執行CLI 指令的同時發生的。下面的例子說明了如何在寫EEPROM 時使用這個指令來防止中斷發生以避免對EEPROM 內容的可能破壞



        關鍵詞: AVR中斷優先

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 安仁县| 贡嘎县| 家居| 余干县| 鄄城县| 申扎县| 夏邑县| 黄大仙区| 承德市| 湄潭县| 扬州市| 达尔| 牙克石市| 曲靖市| 沙雅县| 新晃| 秀山| 广灵县| 全椒县| 万年县| 荆州市| 焦作市| 浦东新区| 炎陵县| 宜城市| 崇州市| 怀集县| 泰和县| 辽宁省| 桃园县| 重庆市| 南平市| 长治县| 稻城县| 天峨县| 南雄市| 山西省| 保靖县| 焉耆| 水城县| 门头沟区|