在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統 > 設計應用 > 2440之中斷管理

            2440之中斷管理

            作者: 時間:2016-11-11 來源:網絡 收藏
            中斷處理:

            中斷是嵌入式里最重要的一個概念。一般一個系統對于一個設備要么采用中斷方式,要么采用輪詢方式 。中斷方式可以有效地減少處理器負荷 ,但是如果大量采用中斷則有可能降低處理速度 ,因為中斷處理破壞了處理器的流水機制。復習下微機原理中中斷處理過程和中斷機制。

            本文引用地址:http://www.biyoush.com/article/201611/316741.htm

            2440中支持FIQ(快速中斷)和IRQ(普通中斷)2種中斷方式,一般只采用IRQ中斷。2440有60個中斷源,不支持中斷嵌套。具體的參考用戶手冊第14章。下圖是2440中斷產生過程。

            具體的講解一下,關于寄存器請查閱用戶手冊。

            中斷源分為2種,子中斷中斷源和中斷源,當一個子中斷產生一個中斷信號,子中斷源掛起寄存器(SUBRCPND)相應位自動置1,察看子中斷屏蔽寄存器(SUBMASK)該子中斷是否被屏蔽(人工設置),如果沒屏蔽,則中斷源寄存器(SRCPND)置1,察看該中斷源是否被屏蔽和采用那種模式,如果沒被屏蔽,采用IRQ模式,進行優(yōu)先級判斷后,高優(yōu)先級的執(zhí)行,中斷掛起寄存器置1,產生IRQ信號。同時CPSR寄存器的I位置1,表明當前有一個IRQ中斷產生。記得以前讓大家注意該寄存器中的I和Q位了吧,他的作用就在這 。

            中斷處理過程:

            CPU每執(zhí)行一條指令都會檢查CPSR寄存器,當發(fā)現I和F位被置1時,就進行中斷處理。第一步跳入異常向量表:

            b ResetHandler

            b HandlerUndef ;handler for Undefined mode

            b HandlerSWI ;handler for SWI interrupt

            b HandlerPabort ;handler for PAbort

            b HandlerDabort ;handler for DAbort

            b . ;reserved

            b HandlerIRQ ;handler for IRQ interrupt

            b HandlerFIQ ;handler for FIQ interrupt

            HandlerFIQ HANDLER HandleFIQ

            HandlerIRQ HANDLER HandleIRQ

            HandlerUndef HANDLER HandleUndef

            HandlerSWI HANDLER HandleSWI

            HandlerDabort HANDLER HandleDabort

            HandlerPabort HANDLER HandlePabort

            ^ _ISR_STARTADDRESS ; _ISR_STARTADDRESS=0x33FF_FF00

            HandleReset # 4

            HandleUndef # 4

            HandleSWI # 4

            HandlePabort # 4

            HandleDabort # 4

            HandleReserved # 4

            HandleIRQ # 4

            HandleFIQ # 4

            如果是IRQ 則跳到HandlerIRQ,此過程由硬件來完成。接下來

            ldr r0,=HandleIRQ ;This routine is needed

            ldr r1,=IsrIRQ ;if there is not subs pc,lr,#4 at 0x18, 0x1c

            str r1,[r0]

            進行第2次跳轉,跳轉到2級中斷向量表

            IsrIRQ

            sub sp,sp,#4 ;reserved for PC

            stmfd sp!,{r8-r9}

            ldr r9,=INTOFFSET

            ldr r9,[r9]

            ldr r8,=HandleEINT0

            add r8,r8,r9,lsl #2

            ldr r8,[r8]

            str r8,[sp,#8]

            ldmfd sp!,{r8-r9,pc}

            HandleEINT0 # 4

            HandleEINT1 # 4

            HandleEINT2 # 4

            HandleEINT3 # 4

            次代碼完成了建立2級中斷向量表,在我們中斷程序中我們先對中斷進行注冊

            例 EINT0 = ISR_FUNC();這樣就完成了中斷向量和中斷服務程序的關聯。跳到2級中斷向量表后就進入了中斷處理程序。中斷處理完成了CPU返回繼續(xù)執(zhí)行中斷處理前的下一條程序,關于處理現場的保護部分參考微原部分。

            下邊是一個關于中斷處理函數的測試題:明白中斷處理函數的使用

            中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發(fā)商提供一種擴展—讓標準C支持中斷。具代表事實是,產生了一個新的關鍵字

            __interrupt。下面的代碼就使用了__interrupt關鍵字去定義了一個中斷服務子程序(ISR),請評論一下這段代碼的。

            __interrupt double compute_area (double radius)

            {

            double area = PI * radius * radius;

            printf("nArea = %f", area);

            return area;

            }

            上邊就是2440的中斷產生及處理過程,這些是最基本的知識要牢牢掌握。對于ARM這些都是一樣的,只不過是寄存器有可能不一樣,但處理過程是一樣的,有些處理器支持中斷可重入,如710處理器。閱讀下用戶手冊14章中關于優(yōu)先級部分,注意下有些寄存器的清0方法。



            關鍵詞: 2440中斷管

            評論


            技術專區(qū)

            關閉