国产亚洲精品AA片在线观看,丰满熟妇HD,亚洲成色www成人网站妖精,丁香五月天婷婷五月天男人天堂

新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > PIC單片機的中斷問答

PIC單片機的中斷問答

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

7. 如果同時發(fā)生多個中斷請求,則中斷處理的順序取決于中斷程序中的檢查順序。

8. 若要防止中斷請求被丟失:則要注意下面兩種情況:如果同一中斷發(fā)生間隔時間大于該中斷服務的處理時間,則可能出現(xiàn)中斷事件被忽略(體現(xiàn)在中斷服務的過程中,標志位被連續(xù)發(fā)生來兩次置位),例如:中斷事件發(fā)生的時間間隔為30ms,中斷服務處理加上跳轉判斷的時間為50ms,則情況將會如下所示:

[中斷次數(shù)----------1][中斷次數(shù)----------2][中斷次數(shù)----------3][中斷次數(shù)----------4]

[處理次數(shù)------------------------1][處理次數(shù)------------------------2][處理次數(shù)------------------------4]

如果在中斷處理一開始就清除IF,那么如上圖所示,中斷事件3、4 在處理次數(shù)2的過程中發(fā)生來兩次,那么即使IF清除發(fā)生在中斷次數(shù)3發(fā)生之前,也將丟失第三次中斷。

另外,即使中斷出現(xiàn)的時間間隔大于中斷服務的時間間隔,如果清除中斷標志位的指令安排在中斷服務子程序的尾部,就有可能造成丟失該中斷請求(即兩次中斷標志置位的事件只對應一條清除指令和一次中斷處理。

9. 在進行查表操作時必須禁止CPU響應中斷,以避免中斷返回時跳轉到不希望的地址上去。

三、一個疑惑

一個疑問:一些書上提到:如果對寄存器INTCON進行“讀-改-寫”操作的時候,要事先將GIE清0,再對INTCON進行操作,然后將GIE恢復為1

即BCF INTCON,GIE

BSF INTCON,XX

BSF INTCON,GIE

所提到的理由是:當CPU正在執(zhí)行一條對INTCON寄存器進行“讀-改-寫”操作的指令時,如果恰好發(fā)生了中斷請求,則中斷服務程序會被執(zhí)行兩次。這是因為當中斷請求發(fā)生后INTCON寄存器的GIE寄存器會被硬件自動清零(屏蔽所有中斷),并且程序轉入中斷例程入口(0004h)。當GIE被清零后,這時如果CPU正在執(zhí)行一條對INTCON“讀-改-寫”的指令時,則GIE位還會被寫會操作重新置1,這樣就會造成CPU兩次進入中斷服務程序。

該段解釋晦澀難懂,根據(jù)中斷發(fā)生過程的時序(PICmicro中檔單片機系列參考手冊的第8-2頁):在第n個指令周期里,CPU檢測到IF標志位為1,則在n+1個周期內將自動使得GIE=0,該周期內既不取指也不執(zhí)行指令,然后在n+2個指令周期里,0004h指針裝入PC指針,該周期也不運行其他指令,只完成0004H->(PC)的取指過程,第n+3個指令周期里,CPU執(zhí)行0004h地址的指令碼,并同時取0005h的指令碼。

顯然,作者提到的“當GIE被清零后,這時如果CPU正在執(zhí)行一條對INTCON“讀-改-寫”的指令時,則GIE位還會被寫會操作重新置1,這樣就會造成CPU兩次進入中斷服務程序。”的解釋存在下面的問題:GIE被硬件自動清零時的那個周期,是一個空運行周期,CPU并不執(zhí)行指令,下一個周期也是空運行周期,不過是完成將0004h地址中的代碼取指操作。然后就開始了0004h地址的代碼的執(zhí)行操作和0005h地址代碼的取指過程。那么GIE在被硬件自動清零后要想置會1,只有兩種方法:RETFIE指令使GIE自動置1;通過軟件指令對GIE人為置1。顯然,如果對GIE人為置1的指令執(zhí)行在對該標志位清零前,那么會出現(xiàn)前文所述的中斷嵌套(設該中斷為A),如果沒有其他中斷發(fā)生且執(zhí)行順序先于中斷A且對中斷A的標志清零的話,那么中斷A的嵌套是一個死循環(huán)。就不是執(zhí)行兩次的問題了----因為同一個中斷嵌套時,GIE在自動清零被軟件置一永遠都發(fā)生在清除IF之前,那么IF一直得不到清除,而GIE又幾乎一直都是1。

作者所說的情況似乎是這樣的:讀改寫INTCON指令按如下過程分解:讀INTCON的時候,GIE先是為1的,此時發(fā)生了中斷,GIE被硬件清零,開始執(zhí)行中斷服務程序,然后再IF標志沒有清除之前,執(zhí)行INTCON的其他位的修改和寫回操作,也將中斷發(fā)生前的GIE讀為1的信息寫回GIE,這樣,CPU被迫發(fā)生了第二次中斷。顯然,這樣是將BSF INTCON, XX指令分解得支離破碎---本來一個指令周期可以完成的指令被跨了多個指令周期;而且一個指令周期的指令被CPU在不同地址處分解執(zhí)行讀改寫過程。

如果不是這樣的話,那么作者的解釋就自相矛盾:“當CPU正在執(zhí)行一條對INTCON寄存器的‘讀-改-寫’操作的指令時,如果恰好發(fā)生了中斷請求 ”與“當GIE被清零后,這是如果CPU正在執(zhí)行一條對INTCON‘讀-改-寫’的指令時”相互矛盾。

總之,我對這里的理解存在一些疑惑,請斑竹及各位前輩指點。


上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉