日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2440之中断管理

發布時間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2440之中断管理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

中斷處理:

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

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

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

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

中斷處理過程:

??? CPU每執行一條指令都會檢查CPSR寄存器,當發現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返回繼續執行中斷處理前的下一條程序,關于處理現場的保護部分參考微原部分。

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

中斷是嵌入式系統中重要的組成部分,這導致了很多編譯開發商提供一種擴展—讓標準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章中關于優先級部分,注意下有些寄存器的清0方法。

轉載于:https://www.cnblogs.com/hnrainll/archive/2011/07/01/2095464.html

總結

以上是生活随笔為你收集整理的2440之中断管理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。