<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    Cortex-M3的異常處理機制研究

    發布時間:2010-4-12 11:36    發布者:李寬
    關鍵詞: 機制 , 研究
    引言

    Cortex—M3是ARM公司第一款基于 ARMv7一M的微控制器內核,在指令執行、異?刂、時鐘管理、跟蹤調試和存儲保護等方面相對于ARM7有很大的區別。尤其在異常處理機制方面有很大的改進,其異常響應只需要12個時鐘周期。NVIC(Nested Vectored Inteirupt Contmller,嵌套向量中斷控制器)是Cortex—M3處理器的一個緊耦合部件,可以配置1~240個帶有256個優先級、8級搶占優先權的物理中斷,為處理器提供出色的異常處理能力。同時,搶占(pre-emption)、尾鏈(tail—chaining)、遲到(1ate— arriving)技術的使用,大大縮短了異常事件的響應時間。

    異;蛘咧袛嗍翘幚砥黜憫到y中突發事件的一種機制。當異常發生時,Cortex—M3通過硬件自動將編程計數器(PC)、編程狀態寄存器(XPSR)、鏈接寄存器(LR)和R0~R3、R12等寄存器壓進堆棧。在Dbus(數據總線)保存處理器狀態的同時,處理器通過Ibus(指令總線)從一個可以重新定位的向量表中識別出異常向量,并獲取ISR函數的地址,也就是保護現場與取異常向量是并行處理的。一旦壓棧和取指令完成,中斷服務程序或故障處理程序就開始執行。執行完ISR,硬件進行出棧操作,中斷前的程序恢復正常執行。圖1為Cortex—M3處理器的異常處理流程。



    1 Cortex—M3異常類型

    同ARM7相比,Cortex—M3在異常的分類和優先級上有很大的差異,如表1所列。



    Cortex—M3將異常分為復位、不可屏蔽中斷、硬故障、存儲管理、總線故障和應用故障、SVcall、調試監視異常、PendSV、SysTick以及外部中斷等。Cortex—M3采用向量表來確定異常的入口地址。與大多數其他ARM內核不同,Cortex—M3向量表中包含異常處理程序和ISR的地址,而不是指令。復位處理程序的初始堆棧指針和地址必須分別位于0xO和Ox4。這些值在隨后的復位中被加載到適當的CPU寄存器中。向量表偏移控制寄存器將向量表定位在CODE(Flash)或SRAM中。復位時,默認情況下為CODE模式,但可以重新定位。異常被接受后,處理器通過Ibus查表獲取地址,執行異常處理程序。

    在Cortex—M3的優先級分配中,較低的優先級值具有較高的優先級。NVIC將異常的優先級分成兩部分:搶占優先級(pre—emption priority)部分和子優先級(sub—priority)部分,可以通過中斷申請/復位控制寄存器來確定兩個部分所占的比例。搶占優先級和子優先級共同作用確定了異常的優先級。搶占優先級用于決定是否發生搶占,一個異常只有在搶占優先級高于另一個異常的搶占優先級時才能發生搶占。當多個掛起異常具有相同的搶占優先級時,子優先級起作用。通過NVIC設置的優先級權限高于硬件默認優先級。當有多個異常具有相同的優先級時,則比較異常號的大小,異常號小的被優先激活。

    2 Cortex—M3異常處理

    2.1 異常的進入

    當一個異常出現以后,Cortex一M3處理器由硬件通過Dbus保存處理器狀態,同時通過Ibus讀取向量表中的SP,更新PC和LR,執行中斷服務子程序。

    為了應對堆棧操作階段到來后的更高優先級異常,Cortex—M3支持遲到和搶占機制,以便對各種可能事件做出確定性的響應。

    搶占是一種對更高優先級異常的響應機制。Cortex—M3異常搶占的處理過程如圖2所示。當新的更高優先級異常到來時,處理器打斷當前的流程,執行更高優先級的異常操作,這樣就發生了異常嵌套。遲到是處理器用來加速搶占的一種機制。如果一個具有更高優先級的異常在上一個異常執行壓棧期間到達,則處理器保存狀態的操作繼續執行,因為被保存的狀態對于兩個異常都是一樣的。但是,NVIC馬上獲取的是更高優先級的異常向量地址。這樣在處理器狀態保存完成后,開始執行高優先級異常的ISR。



    2.2 異常的返回

    Cortex- M3異常返回的操作如圖3所示。當從異常中返回時,處理器可能會處于以下情況之一:

        ◆尾鏈到一個已掛起的異常,該異常比棧中所有異常的優先級都高;
        ◆如果沒有掛起的異常,或是棧中最高優先級的異常比掛起的最高優先級異常具有更高的優先級,則返回到最近一個已壓棧的ISR;
        ◆如果沒有異常已經掛起或位于棧中,則返回到Tread模式。



    為了應對異常返回階段可能遇到的新的更高優先級異常,Cortex—M3支持完全基于硬件的尾鏈機制,簡化了激活的和未決的異常之問的移動,能夠在兩個異常之間沒有多余的狀態保存和恢復指令的情況下實現back—to—back處理。尾鏈發生的2個條件:異常返回時產生了新的異常;掛起的異常的優先級比所有被壓棧的異常的優先級都高。

    尾鏈發生后,Cortex—M3處理過程如圖3中尾鏈分支所示。這時,Cortex—M3處理器終止正在進行的出棧操作并跳過新異常進入時的壓棧操作,同時通過Ibus立即取出掛起異常的向量。在退出前一個ISR返回操作6個周期后,開始執行尾鏈的ISR。

    3 Cortex—M3和ARM7中斷控制器比較

    在過去的十年中,基于ARMv4的ARM7系列微控制器廣泛應用在各個領域。在ARM7系列中,并沒有對中斷進行獨立的服務,而是通過犧牲處理器一定的性能來換取有效的中斷響應和中斷處理機制。Cortex—M3高度耦合的NVIC可以實現硬件中斷處理,同時支持遲到和尾鏈機制,加快了異常響應的速度,充分發揮了處理器的性能。圖4為Corex—M3和ARM7在中斷控制器結構方面的差異。



    比較可知,NVIC是直接作為Cortex—M3處理器的一部分,集成在處理器核內部;而VIC只是游離在ARM7內核的外圍,這樣就必然占用內核資源,影響了處理速度。Cortex—M3和ARM7中斷控制器在功能和實現方式上的差異如表2所列。

    3.1 處理器響應單個異常

    Cortex一M3和ARM7異常處理過程如圖5所示。



    ARM7處理器的異常開銷:



    其中,TARM7為ARM7處理異常的時間開銷;TARM2_PUSH和TARM7_POP為ARM7進行壓棧和出棧的操作時間;TCoretx-M3為 Cortex一M3處理異常的時間開銷;TM3_PUSH和TM3_POP為Cortex—M3進行壓棧和出棧的操作時間。

    可見,由于采用處理器狀態硬件保存,Cortex—M3處理器少用了18周期,節省了42.8%的異常開銷。

    3.2 處理器響應遲到異常

    Cortex—M3和ARM7在處理遲到高優先級異常時的差異如圖6所示。



    當IRQ2正在為執行ISR2保存處理器狀態時,遲到了一個優先級更高的異常IRQl。這時ARM7繼續進行壓棧操作。在壓棧操作完成后,ARM7繼續為執行ISRl進行壓棧操作,然后執行ISRl。其實,兩次壓棧操作所保存的內容是一樣的。因此,Cortex—M3對這個階段的操作進行了優化,引進了遲到異常技術,只進行一次的壓棧操作。并且在ISRl執行完成之后,Cortex—M3沒有進行出棧操作,而是通過一個6周期的尾鏈,直接進入ISR2的執行。

    在上面的例子中,ARM7處理器的異常開銷:



    其中,TARM7_later和TM3_later分別為ARM7和Cortex—M3處理遲到異常所用的時間開銷;Ttail-chaining為 Cortex—M3處理尾鏈所用的時間。

    通過計算可以看出,Cortex—M3少用了44周期,節省65%的異常開銷。

    3.3 處理器處理back-to-back異常

    若一個新的異常在上一個異常寄存器出棧時到來,ARM7和Cortex—M3的處理方式也有很大不同。Cortex—M3和ARM7在處理back—to —back異常時的差異如圖7所示。ARM7繼續當前的出棧操作,在出棧操作完成后,處理器為執行ISR2進行壓棧操作,然后執行ISR2。其實,這時候處理器出棧和壓棧的內容是一致的。Cortex—M3同樣優化了這個階段的操作,引進了尾鏈機制。當IRQ2到來時,Cortex—M3立即中止已經進行了8個周期的出棧操作,轉而進行尾鏈操作,然后執行ISR2。



    在處理back—to—back異常時,ARM7處理器用在ISRl到ISR2轉換的異常開銷:

    TARM_btb=TARM7_POP+TARM7_PUSH=16+26=42周期

    Cortex-M3處理器用在ISRl到ISR2轉換的異常開銷:

    TM3_btb=Tcancel+Ttail-chaining=8+6=14周期

    其中,TARM_btb和TM3_btb分別為ARM7和Cortex—M3處理back—to—back異常轉換所用的時間開銷;Tcancel為發生尾鏈時Cortex—M3已用于狀態恢復的時間。

    通過計算可以看出,Cortex—M3少用了28周期。其實,Cortex—M3處理器用在ISRl到ISR2轉換的異常開銷最低可以優化到只用6個周期,這樣就極大地提高了back—to—back異常的響應能力。

    結語

    本文闡述了Cortex—M3處理器的異常處理機制。通過和ARM7進行比較,量化分析了Cortex一M3在異常處理方面的優勢,對工程師使用 Cortex—M3的異常處理會有一定參考和幫助。

    參考文獻

       1. Shyam Sadasican An Introduction to the ARM Cortex-M3 Processor 2006
       2. ARM Limited Cortex-M3 Technical Reference Manual 2006
       3. ARM Limited ARMv7-M Architecture Reference Manual 2007
       4. 李寧 基于MDK的STM32處理器開發應用 2008

    作者:武漢理工大學 方安平  蔡俊宇
    來源:單片機嵌入式系統應用  2009 (2)
    本文地址:http://www.portaltwn.com/thread-10332-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區

    相關視頻

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷