1. 程式人生 > >mcp2515 晶片驅動匯流排錯誤BUG的解決方法(主要無法進入中斷bug)

mcp2515 晶片驅動匯流排錯誤BUG的解決方法(主要無法進入中斷bug)

http://blog.renren.com/share/221002615/11483613167 來自張濤的日誌

 

現象:CAN匯流排在線上裝置熱插拔或長時間執行後出現匯流排異常情況,有時不能傳送和接收,有時只能傳送不能接收。


分析:

         經過觀察,發現出現只能傳送不能接收的情況是由於沒有呼叫中斷服務造成的,而在整個驅動中並沒有其它地方會異常釋放中斷,所以斷定為mcp2515本身沒有發出中斷;檢視晶片手冊,發現在CANINTF中斷標誌位暫存器中有兩個錯誤中斷標誌位,其它五個為正常情況下的中斷標誌位,驅動中並沒有對錯誤中斷進行處理,造成的結果是匯流排中發生錯誤後,錯誤中斷沒有處理,CANINTF中的錯誤標誌位始終沒有被清除,造成其它中斷被堵塞,因此無法接收資料;而長時間動行後,錯誤中斷計數器達到一定值後,匯流排就被關閉,所以會出現收發都不正常的情況。


解決辦法:最簡單的辦法就是處理錯誤中斷,在出現錯誤後重置mcp2515晶片。


結果:使用以上辦法後,熱插拔匯流排裝置並不會出現匯流排異常情況。

 

 

==========================



7.6 錯誤中斷
當錯誤中斷使能 (CANINTE.ERRIE =1)時,如果發
生溢位或傳送器/接收器的錯誤狀態發生改變,器件將
在INT引腳產生中斷。錯誤標誌 (EFLG)暫存器將會
表明以下錯誤中斷狀況之一。




7.6.1 接收器溢位
當MAB組合好收到的有效報文 (該報文符合驗收濾波
器的接收條件),而與該濾波器相關的接收緩衝器尚無
法裝載新報文時,將發生溢位。相應的EFLG.RXnOVR
位將被置1,表明發生溢位。該位必須由MCU清零




7.6.2 接收器警告
REC達到MCU警告限定值96。


7.6.3 傳送器警告
TEC達到MCU警告限定值96。


7.6.4 接收器被動錯誤
REC超出被動錯誤限定值127,且器件進入被動錯誤狀態。


7.6.5 傳送器被動錯誤
TEC超出被動錯誤限定值127,且器件進入被動錯誤狀
態。


7.6.6 匯流排關閉
TEC超出255且器件進入匯流排關閉狀態。