激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月


主題:請教:打開TMR1的ISR,串口接收數據會丟失。!

  共有35839人關注過本帖    
quartzcq
1樓


請教:打開TMR1的ISR,串口接收數據會丟失!!  發帖心情 Post By:2007-7-26 17:27:00   [只看該作者]

一個棘手問題,請教。!
我是用的ETR186。當TMR1 ISR執行代碼時候(TMR1 設置20毫秒一次,內容是我們自己的簡易鍵盤的驅動,主要是一些GPIO操作),同時串口也發生中斷(串口每1秒鐘會接收到10BYTE左右的一個數據包,串口在接收到這個數據包的同時,取當前RTC時間,然后存入串口的BUFFER供上層調用),現在在測試過程中發現串口數據會丟失。。!如果關閉TMR1 ISR的鍵盤檢測代碼,就一切正常。
請問,有可能是什么問題???謝謝。

  單帖管理 | 引用 | 回復 回到頂部
x10
2樓


  發帖心情 Post By:2007-7-26 17:47:00   [只看該作者]

TMR1 ISR中斷級別高于串口中斷級別,可能導致串口數據丟失。建議TMR1 ISR只設置鍵盤掃描標志,由主循環根據標志進行掃描鍵盤。

  單帖管理 | 引用 | 回復 回到頂部
quartzcq
3樓


  發帖心情 Post By:2007-7-27 8:35:00   [只看該作者]

1、“建議TMR1 ISR只設置鍵盤掃描標志,由主循環根據標志進行掃描鍵盤。”
您的意思是否是,TMR1 ISR只偵測是否有KEY按下,至于是哪個KEY,留到上層應用程序主循環時候判斷?

2、另外,請問下PC TIMER內部計時器(VECTOR 0X1C)的優先級是否低于ETR186的所有串口?如果是優先級高低引起的,我也可以移到0X1C里面做。

  單帖管理 | 引用 | 回復 回到頂部
x10
4樓


  發帖心情 Post By:2007-7-27 9:27:00   [只看該作者]

1.我的意思是定時中斷只是設置一個鍵掃描標志KeyScanFlag=1;主循環檢查該標志,若設置則掃描鍵盤并清標志。
2.INT 0x1C具有最高優先級別。

  單帖管理 | 引用 | 回復 回到頂部
quartzcq
5樓


  發帖心情 Post By:2007-7-27 10:19:00   [只看該作者]

我還是覺得很奇怪,因為串口有硬件FIFO,數據首先是放到FIFO中,然后每放一個BYTE產生一次中斷,中斷會保存到操作系統的中斷STACK里面,然后應用程序調用STACK里面的中斷請求來相應對映的服務。即使此時TMR1正在執行,恰好串口產生了一個中斷,但這個中斷也是保存到操作系統的中斷STACK里面,只要中斷STACK的出棧速率大于進棧的速率,就不應該會丟失呀。。〔恢牢业睦斫馐欠裾_。

  單帖管理 | 引用 | 回復 回到頂部
x10
6樓


  發帖心情 Post By:2007-7-27 12:13:00   [只看該作者]

有可能在高級別ISR太長,導致系統的中斷控制器丟失低級別的中斷請求?梢栽谶M入TMR1 ISR就enable()同時發EOI來測試一下。

  單帖管理 | 引用 | 回復 回到頂部
quartzcq
7樓


  發帖心情 Post By:2007-7-27 12:36:00   [只看該作者]

我測試過,如果只是打開TMR1,里面不做任何其他動作(或者做幾行簡單的加減乘除等代碼),長時間測試后,串口數據也不會丟失。而一旦加上這個3*2的鍵盤驅動,就會丟失。
另外,系統一般都能夠提供關閉中斷和打開中斷的功能,TURBOC里面是ENABLE和DISABLE這兩個函數。我認為,按照原理來講,如果在串口中斷時候,加入DISABLE,然后結束時候ENABLE,這樣就不會在串口中斷執行時候被TMR1或者其他高優先級ISR搶占造成丟失。但我這樣測試了一下,也沒用。
不知道ETR186的開關中斷是不是由這2個函數完成???或者,TMR1是個例外,即使DISABLE了,TMR1也可以響應(PC機應該是如果DISABLE了后,除了NMI的,其他都不響應)?

  單帖管理 | 引用 | 回復 回到頂部
quartzcq
8樓


  發帖心情 Post By:2007-7-27 12:37:00   [只看該作者]

補一下,上面我說“如果只是打開TMR1,里面不做任何其他動作(或者做幾行簡單的加減乘除等代碼)”是在tmr1 isr enable()和EOI之間的。

  單帖管理 | 引用 | 回復 回到頂部
x10
9樓


  發帖心情 Post By:2007-7-27 14:06:00   [只看該作者]

ETR186與PC是兼容的,當然可以使用enable()和disable()來操作CPU的中斷使能開關。DOS系統很多地方都可能有enable(),所以如果要確保在一段代碼中關閉中斷,就需要:
disable();
//your code... make sure no enable() instructtion
enable();

如果有系統調用,如printf(),中斷肯定被打開了。


  單帖管理 | 引用 | 回復 回到頂部

返回首頁

請教:打開TMR1的ISR,串口接收數據會丟失!!

用戶名:
            驗證碼: 驗證碼,看不清楚?請點擊刷新驗證碼
內容:
主站蜘蛛池模板: 久久久免费精品| 草草影院ccyy免费看片| 久久亚洲国产的中文| 亚洲精品小说一区二区三区| 天天噜噜色| 亚洲一区二区视频在线观看| 男女晚上爱爱的视频在线观看| 国产片黄色| 国产激爽大片高清在线观看| 濑亚美莉vs黑人欧美视频| 国产精品污| 久久精品国产视频| 手机看片在线精品观看| 亚洲综合图色40p| www视频免费在线观看| 久伊人网| 日韩永久免费视频| 手机看片1024久久| 在线免费观看黄色大片| 免费一级网站| 欧美一级特黄真人毛片| 国产一级一片免费播放刺激| 国产破处在线视频| 国产精品正在播放| 国产精品嫩模在线播放| 粉嫩00福利视频在线精品| 91短视频版在线观看www免费| 国产 日韩 欧美 综合| 国产精品亚洲一区二区三区在线观看 | 久久国产香蕉一区精品| 日韩久久精品视频| 中国人黑人xxⅹ性猛| 亚洲日本国产| 亚洲日本中文字幕在线2022| 亚洲国产最新在线一区二区 | 精品播放| 精品国产91在线网| 精品福利一区二区三区免费视频| 成人午夜小视频| www.99色| 精品欧美|