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


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

  共有35840人關注過本帖    
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,串口接收數據會丟失。!

用戶名:
            驗證碼: 驗證碼,看不清楚?請點擊刷新驗證碼
內容:
主站蜘蛛池模板: 久久啊| 国产精品亚洲欧美日韩区| 久久er热这里只有精品23| 亚洲国产色婷婷精品综合在线观看| 久久国产乱子| 日韩精品1| 亚洲精品成人7777在线观看| 欧美一级欧美一级毛片| 国产免费叼嘿网站免费| 狠狠色狠狠色综合婷婷tag| 91视频黄| 国产成人精品午夜二三区| 久久青青视频| 欧美一区二区三区婷婷月色 | 国产一区免费在线观看| 香港毛片免费看| 精品女同一区二区三区免费站| 国产精品爽爽影院在线| 久久精品看片| 欧美成人手机在线| 日韩中文字幕视频在线| 亚洲欧美日韩精品久久久| 91在线高清| www.黄色网| 久久久香蕉视频| 日本欧美一区二区三区不卡视频 | 一级a毛片| 久久99国产精品免费观看| 日韩欧美成人免费中文字幕| 亚洲产在线精品第一站不卡| 成人午夜性a一级毛片美女| 农村妇女野外牲交一级毛片| 欧美大片欧美毛片大片| 国亚洲欧美日韩精品| 国产在线观a免费观看| 国产高清狼人香蕉在线观看| 国精视频一区二区视频| 香蕉大片| 放荡女同老师和女同学生| 视频黄在线观看| 性xxxxbbbb在线|