主題:如何使用中斷 共有39521人關注過本帖 |
---|
zj |
1樓 |
如何使用中斷 Post By:2010-3-12 17:20:00 [只看該作者]
我用的是貴公司的EM9160v7.2。
中斷被觸發后,如果不使用EnableExternIRQ函數,還會再次響應中斷嗎? 還有文檔中有下面這段: 當具體的中斷處理函數ExIRQHandler執行完畢時,硬件中斷請求輸入ISA_IRQ1 或ISA_IRQ2 的電平已回到低電平狀態,并確保在系統再次使能外部中斷前一直保持為低,即函數EnableExternIRQ完成前一直保持為低,以防止中斷嵌套。 那么我的情況是:觸發中斷后,我的ISA_IRQ1腳,會一直保持高,這樣是不是會中斷嵌套? 謝謝 |
|
單帖管理 | 引用 | 回復 |
zxw |
2樓 |
Post By:2010-3-12 18:10:00 [只看該作者]
當中斷發生后,需要調用EnableExternIRQ,才會再次響應中斷。另外,中斷是由上升沿觸發的,所以你的電平保持是不會發生中斷嵌套的現像。
|
|
單帖管理 | 引用 | 回復 |
zj |
3樓 |
Post By:2010-3-16 17:00:00 [只看該作者]
請問下,在沒有調用EnableExternIRQ時,中斷次數會不會累加?
急急急。! |
|
單帖管理 | 引用 | 回復 |
zxw |
4樓 |
Post By:2010-3-16 18:12:00 [只看該作者]
如不使用EnableExternIRQ,系統根本不會響應中斷。其實,這些都是可以實驗一下就能得出結果。從頭文件中也能看到它的描述:
// 功能描述:使能EM9260外部中斷,允許下一次的中斷。 // 輸入參數 hIRQ: 安裝的外部中斷句柄。 // 返回值 = TRUE: 操作成功。 //        = FASLE: 操作失敗。 BOOL   EnableExternIRQ( HANDLE hIRQ ); |
|
單帖管理 | 引用 | 回復 |
zj |
5樓 |
Post By:2010-3-16 18:25:00 [只看該作者]
我是用磁塊觸發中斷的,但每次都會出現兩次的中斷。。。。
WaitForSingleObject( lpIRQ->hIRQEvent, INFINITE ); bIrqOccur = 1; WaitForSingleObject( lpIRQ->hIRQWait, INFINITE ); EnableExternIRQ( lpIRQ->hIRQ ); 上面是我的程序,發生中斷時,我就只將BOOL bIrqOccur置1, 然后使用線程同步,阻塞在 WaitForSingleObject( lpIRQ->hIRQWait, INFINITE ); 然后在主程序完成后,調用SetEvent(hIRQWait) 但這樣就會出現兩次中斷。 這是為什么呢?怎么實現一次只能發生一次中斷? 當執行完一次中斷時,需要對hIRQEvent作什么嗎? 麻煩幫忙下! 謝謝 |
|
單帖管理 | 引用 | 回復 |
x10 |
6樓 |
Post By:2010-3-16 21:44:00 [只看該作者]
有沒有用我們的范例程序來響應你的外部中斷。只有上升沿能夠觸發中斷驅動程序的IST,不應當出現兩次中斷的情況。從你的代碼也看不出來如何判斷一次觸發兩次中斷的。另外,一般應把對中斷事件的處理與等待中斷事件放在一起,否則系統延時很大,就沒有什么必要要中斷了。
|
|
單帖管理 | 引用 | 回復 |
zj |
7樓 |
Post By:2010-3-16 22:04:00 [只看該作者]
范例程序?有的話麻煩發到oceanlab_zj@hotmail.com
我用中斷,主要是為了激活主線程 主線程中:while(!bIrqOccur) 我在中斷線程中加入了打印信息,發現有兩次打印。 最后問下:對于 hIRQWait = CreateEvent(NULL,false,false,NULL); 我用WaitForSingleObject( lpIRQ->hIRQWait, INFINITE )阻塞, 用SetEvent函數標識句柄后,句柄會不會自動成為未標識的? 謝謝 |
|
單帖管理 | 引用 | 回復 |
x10 |
8樓 |
Post By:2010-3-17 13:04:00 [只看該作者]
程序在光盤的\software\通訊接口目錄下。程序重發到你的郵箱,請查收。注意在WinCE中的任何線程,都不能有無阻塞的循環存在,否則將大量占用CPU時間,導致其他線程運行異常。通常每個線程可以通過WaitForSingleObject(..)或簡單Sleep(..)方式讓自己掛起。
|
|
單帖管理 | 引用 | 回復 |
zj |
9樓 |
Post By:2010-3-17 13:12:00 [只看該作者]
非常感謝。
|
|
單帖管理 | 引用 | 回復 |
zj |
10樓 |
Post By:2010-3-18 15:03:00 [只看該作者]
再問,這是我的中斷線程程序
for(;;) {     WaitForSingleObject( lpIRQ->hIRQEvent, INFINITE );     bIrqOccur = 1; // 啟動主線程     WaitForSingleObject( lpIRQ->hIRQWait, INFINITE );     EnableExternIRQ( lpIRQ->hIRQ ); } 其中,hIRQWait = CreateEvent(NULL,false,false,NULL); 主線程的最后,標識句柄hIRQWait. 我用磁塊觸發,在不加入 WaitForSingleObject( lpIRQ->hIRQWait, INFINITE ); 自己調試發現進入了兩中斷。 我想問,當加入 WaitForSingleObject( lpIRQ->hIRQWait, INFINITE ); 為什么還會有兩次中斷。 謝謝 |
|
單帖管理 | 引用 | 回復 |
x10 |
11樓 |
Post By:2010-3-18 16:05:00 [只看該作者]
方便把你的測試代碼發給我們看看嗎,謝謝!
|
|
單帖管理 | 引用 | 回復 |
zj |
12樓 |
Post By:2010-3-18 19:34:00 [只看該作者]
程序已發至support@emtronix.com
我的郵箱是278518766@qq.com 謝謝 |
|
單帖管理 | 引用 | 回復 |
返回首頁如何使用中斷 |
---|
用戶名: | |
驗證碼: | |
內容: | |