久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14148|回復: 3
打印 上一主題 下一主題
收起左側

一個關于CAN出錯中斷重復出現的話題

[復制鏈接]
跳轉到指定樓層
樓主
ID:98618 發表于 2015-12-7 02:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

整理:MilerShao

 某日,有一客戶反映他們在做STM32F407的CAN通信的出錯測試時,發現出現類似死機的現象。后來跟蹤調試發現是開啟了出錯中斷,因其不停中斷導致的貌似死機現象。納悶的是,經過進一步測試,發現即使清除了“中斷請求標志”后也無效。大致情形如下:

在CAN通訊時候讓某節點做插拔、斷電等測試,人為的產生一些CAN總線錯誤,看看能否讓總線恢復正常。 結果測試發現,如果總線出現錯誤,并且打開了CAN錯誤中斷處理的話,通過仿真器調試發現CPU一直在處理CAN錯誤中斷,其他程序得不到處理而呈死機狀態。 先是懷疑CAN控制器因為各類錯誤條件而進入錯誤中斷后,雖在錯誤中斷里清除了相關中斷狀態標志,但由于計數器值沒有清零的原因,馬上又產生新的錯誤中斷,這樣循環反復,導致其他程序得不到調度。

然后繼續做實驗,將CAN_IER寄存器中的LECIE和EWGIE這兩種中斷使能關閉掉,發現還是有這個問題。 客戶覺得這樣有點奇怪。

從客戶粗略描述的現象來看,很像沒有清除中斷標志導致中斷沒完沒了。經進一步的溝通了解,客戶除了開啟相關收發中斷外,還使能了LECIE、EWGIE、EPVIE、BOFIE、ERRIE跟出錯有關的中斷,當然SLKIE和WKUIE沒有使能。

結合CAN_IER和CAN_ESR寄存器的相關描述,可以看出即使關閉了LECIE、EWGIE兩個出錯條件,但還有EPVIE、BOFIE兩種情形可能導致CAN出錯中斷。

  

  

 

跟CAN出錯中斷有關的寄存器主要涉及到3個,分別是CAN主控狀態寄存器CAN_MSR,CAN中斷使能寄存器CAN_IER,CAN錯誤狀態寄存器CAN_ESR. 說實在的,這個跟CAN出錯中斷有關的東西還是有點復雜。看看下圖,藍色方框里的是各種錯誤中斷的使能位,紅色方框里的是各類出錯條件或狀態變化條件。請注意圖中的與邏輯符號&或邏輯符號+。

 

     上圖中下方與CAN_MSR相關的兩類中斷觸發源跟本話題無關,就不提了,重點看看上方那四個與CAN出錯有關的中斷源。

細心的人會發現,其實CAN_IER中的ERRIE位是一個CAN出錯中斷總開關,只有當它被使能的前提下,EWG、EPV、BOF、LEC四個中的一個或幾個出錯事件配合各自的中斷使能位才能產生出錯中斷,并統一將CAN_MSR中的錯誤中斷請求ERRI位置1,從而申請CAN錯誤中斷。顯然,CAN錯誤中斷的請求標志位是ERRI@CAN_MSR,而不是CAN_ESR中的EWGF\EPVF\BOFF的任一位。 

聊到這里,我們基本對CAN出錯中斷相關的寄存器和相關標志有了大致的了解。要把握一點,CAN出錯中斷有個總使能位ERRIE,其它幾個出錯事件配合該總使能位最終產生錯誤中斷請求,置位ERRI@CAN_MSR。

回到上面的話題,當查看客戶的CAN錯誤中斷處理程序時,發現他在中斷程序里的確是做了些標志的清除【本意是想清除中斷請求標志】。遺憾的是全是對CAN_ESR寄存器中的相關錯誤標志進行清零,即對LEC\EWGF\EPVF\BOFF這幾個東西清零,偏偏沒有對ERRI@CAN_MSR的清零。關鍵的東西成了漏網之魚。

還有,他對EWGF\EPVF\BOFF這幾個標志清零是無效的,因為這幾個標志位是只讀的,置1或清零是硬件根據TEC/REC的值動態處理的。
 
 

最后讓客戶把CAN出錯中斷代碼做些調整,在進入CAN出錯中斷后將CAN_MSR中的ERRI位清0,確實可以解決錯誤中斷循環往復的問題。

小結下,MCU中斷行為一般涉及到使能標志、請求標志和觸發源。應用中偶爾會出現有人把中斷使能標志和中斷請求標志弄混的情況。不過相比之下,這里談到的CAN出錯中斷相比ST MCU其它外設的中斷應用就要復雜或啰嗦些,尤其那個出錯中斷請求標志感覺有點隱晦。上面提到的案例,當事人可能沒弄清CAN出錯中斷請求標志位到底是哪個,導致進入中斷服務程序后清除動作無效,使得出錯中斷服務程序沒完沒了,而且還會影響到其它進程正常運行進而導致其它連鎖異常。


             

            

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:115875 發表于 2016-4-22 10:24 | 只看該作者
頂一個,太好了
回復

使用道具 舉報

板凳
ID:124820 發表于 2016-6-3 08:24 | 只看該作者
寫的不錯~~~~~~~
回復

使用道具 舉報

地板
ID:124820 發表于 2016-6-3 08:25 | 只看該作者
我想請問下 除了在中斷里清楚標志位,還做什么?出了中斷后 can還是繼續嘗試發送數據吧?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久电影 | 成人h视频| 亚洲色图插插插 | 精品欧美乱码久久久久久1区2区 | 久久一级大片 | 国产精品久久久久久久模特 | 欧美一区二不卡视频 | 黄色毛片免费视频 | 久操国产 | 亚洲经典一区 | 欧美成人hd | 久久精品二区 | 国产一区二区三区在线看 | 久久久久久久久久性 | 国产激情在线看 | 久草精品在线 | 一区二区精品 | 成人在线视频一区 | 免费视频二区 | 毛片免费看的 | 亚洲精品v | 污视频免费在线观看 | 91在线电影 | 国产精品无码专区在线观看 | 成人国产精品免费观看 | 国产精品一区在线观看 | 成人在线视频免费看 | 国产高清在线精品 | 久久一区二区视频 | 欧美精品一级 | 欧美日韩中文字幕在线 | 国产日韩一区二区三免费 | 精品视频一二区 | 久久精品国产一区 | 欧美视频一区 | 在线视频一区二区 | 欧美日韩一区二区在线观看 | 欧美精品一区二区三区在线 | 色网站在线免费观看 | 欧美精品一二三 | 国产999精品久久久影片官网 |