關于STM8S外部中斷問題_第1頁
關于STM8S外部中斷問題_第2頁
關于STM8S外部中斷問題_第3頁
關于STM8S外部中斷問題_第4頁
關于STM8S外部中斷問題_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、關于 stm8s 外部中斷問題!怎么識別是具體哪個引腳引起的中斷! 復制鏈接 junsea 電梯直達1 樓發表于 2010-12-11 10:41:48 | 只看該作者舉個例子,在 pc口有的 pc0和 pc1兩個信號都要求能夠中斷。而stm8s 對應 pc口只有一個中斷向量,我要怎么才能夠知道具體是有pc0引起的中斷呢?還是pc1引起的中斷呢?我也看了壇子里面的一些相關的帖子,大致有這么一種方法,進入中斷后讀取io 口的電平狀態以判斷是哪個 io 口引起的中斷。但是我有個疑問,假定設置為下降沿觸發中斷。pc0先出現下降沿,系統進入中斷,如果在這個時間段, pc1也出現下降沿,在中斷里面再讀p

2、c0和 pc1電平狀態,仍然不能夠判別是由 pc0引起的中斷,還是由pc1觸發的中斷啊!收藏 5 回復舉報論壇公益廣告:使用360 產品將會被封鎖 id。周流氓槍斃 1 萬次也無法彌補3721 犯下的罪行。junsea 2 樓樓主| 發表于 2010-12-11 11:39:22 | 只看該作者頂一下。回復舉報公益廣告:發表新主題時,務必起一個能說明帖子內容的清晰標題,否則將會被封鎖 id( 點擊查看詳細說明 ) bigz 3 樓發表于 2010-12-11 13:09:03 | 只看該作者不建議這樣用最好一個pc ,一個 pd ,每個口只開放一個中斷回復舉報公益廣告:本論壇不得使用、宣傳q群

3、。 有討論請在論壇里進行。違者將封鎖 id. junsea 4 樓樓主| 發表于 2010-12-11 13:28:46 | 只看該作者當然能夠這樣最好,只是現在的項目的硬件已經做好了,之前沒有用中斷,用的查詢,發現有時候可能會出現跟不上的情況!所以想采用中斷來做!回復舉報公益廣告:發表招聘帖子需要繳費,有需要可以聯系網站工作人員王小姐:137*. snoopyzz 5 樓發表于 2010-12-11 13:34:21 | 只看該作者不要用 else 或 switch 不就行了 if(pc0=0)if(pc1=0). 回復舉報公益廣告:廣告只能發在本論壇的廣告區,否則將封鎖id。junsea

4、6 樓樓主| 發表于 2010-12-11 13:45:51 | 只看該作者樓上,程序當然可以這么寫,只是我說的那種情況:pc0先出現下降沿,系統進入中斷,在執行 if (pc1=0 )之前, pc1也出現下降沿,那么if (pc0=0 )能夠運行 if (pc1=0 )也能夠運行并沒有達到只執行i f(pc0=0 )的目的啊?回復舉報本論壇禁止與網站產品有沖突的廣告,如雕刻機、pcb 、空氣凈化器等bigz 7 樓發表于 2010-12-11 17:52:54 | 只看該作者這種情況下為什么非要只執行一個呢既然同是發現都為0,同時執行不就行了回復舉報snoopyzz 8 樓發表于 2010-

5、12-11 19:28:19 | 只看該作者char status = pc_idr;if( status&bit(0) )/pc0if( status&bit(1) )/pc1如果兩個都能進入.說明基本同時 (中斷響應 +中斷跳轉 +局部變量賦值時間 ), 理所當然全部應該執行回復舉報junsea 9 樓樓主| 發表于 2010-12-11 23:14:24 | 只看該作者如樓上所說,是可以兩個都響應。如果碰到5 樓的情況,有 pc0的下降沿觸發了中斷,那么下面代碼的pc0和 pc1位置的語句都將得以執行,可是系統設置了pc0和 pc1都將產生中斷請求, pc0的下降沿中斷函

6、數執行一次,當 pc1產生下降沿的時候,中斷函數再執行一次,這樣下面pc1部分的語句不是被執行了兩次,而 pc1的下降沿只產生一次? char status = pc_idr; if( status&bit(0) ) /能夠執行 /pc0 if( status&bit(1) ) /能夠執行 /pc1 回復舉報millwood0 10 樓發表于 2010-12-12 00:24:56 | 只看該作者 只是現在的項目的硬件已經做好了maybe the next time you will learn not to put the cart in front of the horse

7、. 回復舉報bigz 11 樓發表于 2010-12-12 13:45:13 | 只看該作者當 pc0中斷發生并進入isr進行服務時, pc1也發生了中斷,當pc0中斷返回時,可能會立刻再進入該中斷服務這時就發生了 8l 說的情況,由于8s的 io 中斷無中斷標志位,所以這種情況是無法避免的建議lz使用查詢方式,不知道時間來得及不,可以在主循環程序中多查詢幾次,或者在其他子程序中隨時查詢電平變化對一般的應用應該都是合適的回復舉報junsea 12 樓樓主| 發表于 2010-12-12 20:42:27 | 只看該作者看來 stm8s 每個 io 口都可以中斷的功能有些不完善哈!謝謝大家參與討

8、論。回復舉報snoopyzz 13 樓發表于 2010-12-13 13:40:11 | 只看該作者外部中斷由于沒有中斷標志, 所以如果中斷發生時同源另一外部中斷發生, 在退出中斷后, 并不會再一次進去中斷 . 回復舉報bigz 14 樓發表于 2010-12-13 15:54:18 | 只看該作者回復【 12 樓】snoopyzz 外部中斷由于沒有中斷標志, 所以如果中斷發生時同源另一外部中斷發生 , 在退出中斷后 , 并不會再一次進去中斷 .-你說的是有道理的,我的上述結論也只是猜測,但我發現8s的中斷系統和一般單片機是不同的大家可以測試下:開放 pc0的中斷(邊沿中斷和電平中斷都測試下)

9、,并在pc0的中斷服務第一句就開啟全局中斷,然后手動觸發該中斷(也就是連續觸發n次中斷),這時,堆棧可能溢出。溢出的唯一解釋,就是中斷重入,而且是在沒有返回的情況下重入的。堆棧溢出的情況是我在tim1的 bk功能上發現的,但我不知道io 口是否會有相同情況。另外,如果你的說法正確,那么 lz說的中斷函數被執行2 次的可能并不存在,反而是會漏執行。回復舉報bigz 15 樓發表于 2010-12-13 16:09:35 | 只看該作者以下情況可以使用4l 的辦法處理,不會有任何問題:pc0中斷 pc0中斷響應pc1中斷讀 pc口中斷處理中斷返回漏執行的情況:pc0中斷 pc0中斷響應讀pc口 p

10、c1中斷中斷處理中斷返回至于8l 提到的執行 2次的情況,可以記錄pc0的電平狀態而避免,但漏執行時無法避免的。所以結論是:lz 遇到的問題,無法純粹依賴中斷,必須輔以另外記錄的辦法才行。最好的解決辦法就是查詢io。回復舉報snoopyzz 16 樓發表于 2010-12-13 16:34:47 | 只看該作者應該只有低電平中斷會造成重入.低電平中斷這種東東 .顯然不能在其中開全局中斷的 , 是常識 .否則必然重入 . 回復舉報bigz 17 樓發表于 2010-12-13 16:46:08 | 只看該作者但問題是,在 8s中,通一個中斷向量的優先級是相同的,而中斷是不應該被相同優先級打斷的正

11、常的處理應該是,中斷返回后立刻再觸發中斷,而不應該是重入,否則堆棧溢出,后果嚴重。 8s的這點和其他 mcu 不同,是個缺點回復舉報junsea 18 樓樓主| 發表于 2010-12-14 00:01:27 | 只看該作者討論出深度來了哈!至于大家說的中斷重入的事情,但是我認為應該不會有吧!在手冊上面講是有兩種情況一種是同時發生,一種是嵌套。按照手冊上面講:同時發生中斷的響應順序是按照中斷號的優先級按次序響應。嵌套按照itc_sprx 里面的設置的優先級進行嵌套響應。但是現在 pc0和 pc1這種情況,不屬于這兩種情況。至于是不是要重入不得而知,看看有空好好試試 stm8s 的外部中斷系統了

12、。回復舉報snoopyzz 19 樓發表于 2010-12-14 08:59:32 | 只看該作者回復【 16 樓】bigz -你明顯沒能明白stm8 的優先級指的是什么 .不光是 stm8, 包括,pic,avr,51 等大多數 8bit mcu其中斷優先級指的是同時有中斷發生需要響應時, 內核執行順序的優先級 .不發生中斷嵌套重入的前提是你別在中斷函數中使能全局中斷 .當進入一個中斷函數時 , 全局中斷會被禁止 , 當執行到 reti(stm8的中斷返回指令 )時, 會重新使能全局中斷 .而你呢 , 手動在中斷函數中使能全局中斷, 還是低電平中斷這種持續有效的, 必然是個杯具 .對于 st

13、m8, 只有幾個少數的不可屏蔽中斷(reset,trap,tli)會產生嵌套回復舉報bigz 20 樓發表于 2010-12-14 18:48:52 | 只看該作者由于應用的需要我已經在至少3 款 mcu 上 在進入中斷后第一句就打開全局中斷。如你所說,大多數mcu 進入中斷后會自動關閉全局中斷,但如果不在中斷服務中打開全局中斷,中斷嵌套就不存在。只有在低優先級的中斷中打開全局,更高優先級的中斷才能打斷當前中斷服務。否則中斷嵌套就失去意義了。回復舉報bigz 21 樓發表于 2010-12-14 18:58:34 | 只看該作者按照一般理解,電平中斷至多引起狗叫,而不是堆棧溢出這種嚴重錯誤。回

14、復舉報bigz 22 樓發表于 2010-12-14 19:03:49 | 只看該作者重點理解此圖,和那2 句話( 原文件名 :int.jpg) ( 原文件名 :int2.jpg) 回復舉報snoopyzz 23 樓發表于 2010-12-14 20:17:49 | 只看該作者低電平中斷你開 , 再開使能全局中斷 , 必然會重入而且并不會中斷返回.不斷重得進入相同中斷 , 堆棧不斷重復壓棧 .最后就后堆棧溢出 , 關狗什么事 .我保證你換 avr 也一樣的結果 .自己不會用就怪芯片有問題的人, 見得多了 .不差多一個. 回復舉報bigz 24 樓發表于 2010-12-14 20:50:49 | 只看該作者請問 ls對中斷嵌套怎么理解?難道你在所有中斷里都不開全局中斷?另外,我從來沒說芯片有問題,只是指出了8

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論