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


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

  共有35848人關注過本帖    
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太長,導致系統的中斷控制器丟失低級別的中斷請求。可以在進入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,串口接收數據會丟失!!!

用戶名:
            驗證碼: 驗證碼,看不清楚?請點擊刷新驗證碼
內容:
主站蜘蛛池模板: 国产a级精品特黄毛片| 国产主播在线观看| 国产成人精品999在线| 欧美精品亚洲一区二区在线播放| 2020年国产一国产一级毛卡片| 日本一级淫片a 免费播放口| 亚洲精品日韩在线一区| 欧美毛片免费观看| 国产片一级毛片视频| 国产精品爱啪在线线免费观看| 精品你懂的| zoofilia杂交videos新一| 久久国产免费观看精品1| 日韩欧美中字| 亚洲精品国产精品乱码不卞| 成人国产第一区在线观看| 国内精品视频一区二区八戒| 国产黄色录像| 国产精品美女福利视频一区| 黄色网址日本| 精品国产香蕉伊思人在线| 国产younv交在线视频| 国产最新精品2020好看的| 蜜芽亚洲| 妞干网欧美| 欧美亚洲国产一区二区三区| 我我色综合| 香蕉啪| 亚洲免费三级| 大陆老太xxxxxxxxhd| 日本一级淫一片免费| 日韩中文字幕久久久经典网| 中国高清性色生活片| 亚洲一区二区三区首页| 亚洲精品高清国产一久久| 成人女人a毛片在线看| 伊人精品视频| 成人免费一级毛片在线播放视频| 伊人久久大香线焦综合四虎| 污免费网站| 成人亚洲精品一区|