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

標(biāo)題: 一個(gè)關(guān)于CAN出錯(cuò)中斷重復(fù)出現(xiàn)的話題 [打印本頁]

作者: taoran    時(shí)間: 2015-12-7 02:16
標(biāo)題: 一個(gè)關(guān)于CAN出錯(cuò)中斷重復(fù)出現(xiàn)的話題

整理:MilerShao

 某日,有一客戶反映他們?cè)谧鯯TM32F407的CAN通信的出錯(cuò)測(cè)試時(shí),發(fā)現(xiàn)出現(xiàn)類似死機(jī)的現(xiàn)象。后來跟蹤調(diào)試發(fā)現(xiàn)是開啟了出錯(cuò)中斷,因其不停中斷導(dǎo)致的貌似死機(jī)現(xiàn)象。納悶的是,經(jīng)過進(jìn)一步測(cè)試,發(fā)現(xiàn)即使清除了“中斷請(qǐng)求標(biāo)志”后也無效。大致情形如下:

在CAN通訊時(shí)候讓某節(jié)點(diǎn)做插拔、斷電等測(cè)試,人為的產(chǎn)生一些CAN總線錯(cuò)誤,看看能否讓總線恢復(fù)正常。 結(jié)果測(cè)試發(fā)現(xiàn),如果總線出現(xiàn)錯(cuò)誤,并且打開了CAN錯(cuò)誤中斷處理的話,通過仿真器調(diào)試發(fā)現(xiàn)CPU一直在處理CAN錯(cuò)誤中斷,其他程序得不到處理而呈死機(jī)狀態(tài)。 先是懷疑CAN控制器因?yàn)楦黝愬e(cuò)誤條件而進(jìn)入錯(cuò)誤中斷后,雖在錯(cuò)誤中斷里清除了相關(guān)中斷狀態(tài)標(biāo)志,但由于計(jì)數(shù)器值沒有清零的原因,馬上又產(chǎn)生新的錯(cuò)誤中斷,這樣循環(huán)反復(fù),導(dǎo)致其他程序得不到調(diào)度。

然后繼續(xù)做實(shí)驗(yàn),將CAN_IER寄存器中的LECIE和EWGIE這兩種中斷使能關(guān)閉掉,發(fā)現(xiàn)還是有這個(gè)問題。 客戶覺得這樣有點(diǎn)奇怪。

從客戶粗略描述的現(xiàn)象來看,很像沒有清除中斷標(biāo)志導(dǎo)致中斷沒完沒了。經(jīng)進(jìn)一步的溝通了解,客戶除了開啟相關(guān)收發(fā)中斷外,還使能了LECIE、EWGIE、EPVIE、BOFIE、ERRIE跟出錯(cuò)有關(guān)的中斷,當(dāng)然SLKIE和WKUIE沒有使能。

結(jié)合CAN_IER和CAN_ESR寄存器的相關(guān)描述,可以看出即使關(guān)閉了LECIE、EWGIE兩個(gè)出錯(cuò)條件,但還有EPVIE、BOFIE兩種情形可能導(dǎo)致CAN出錯(cuò)中斷。

  

  

 

跟CAN出錯(cuò)中斷有關(guān)的寄存器主要涉及到3個(gè),分別是CAN主控狀態(tài)寄存器CAN_MSR,CAN中斷使能寄存器CAN_IER,CAN錯(cuò)誤狀態(tài)寄存器CAN_ESR. 說實(shí)在的,這個(gè)跟CAN出錯(cuò)中斷有關(guān)的東西還是有點(diǎn)復(fù)雜。看看下圖,藍(lán)色方框里的是各種錯(cuò)誤中斷的使能位,紅色方框里的是各類出錯(cuò)條件或狀態(tài)變化條件。請(qǐng)注意圖中的與邏輯符號(hào)&或邏輯符號(hào)+。

 

     上圖中下方與CAN_MSR相關(guān)的兩類中斷觸發(fā)源跟本話題無關(guān),就不提了,重點(diǎn)看看上方那四個(gè)與CAN出錯(cuò)有關(guān)的中斷源。

細(xì)心的人會(huì)發(fā)現(xiàn),其實(shí)CAN_IER中的ERRIE位是一個(gè)CAN出錯(cuò)中斷總開關(guān),只有當(dāng)它被使能的前提下,EWG、EPV、BOF、LEC四個(gè)中的一個(gè)或幾個(gè)出錯(cuò)事件配合各自的中斷使能位才能產(chǎn)生出錯(cuò)中斷,并統(tǒng)一將CAN_MSR中的錯(cuò)誤中斷請(qǐng)求ERRI位置1,從而申請(qǐng)CAN錯(cuò)誤中斷。顯然,CAN錯(cuò)誤中斷的請(qǐng)求標(biāo)志位是ERRI@CAN_MSR,而不是CAN_ESR中的EWGF\EPVF\BOFF的任一位。 

聊到這里,我們基本對(duì)CAN出錯(cuò)中斷相關(guān)的寄存器和相關(guān)標(biāo)志有了大致的了解。要把握一點(diǎn),CAN出錯(cuò)中斷有個(gè)總使能位ERRIE,其它幾個(gè)出錯(cuò)事件配合該總使能位最終產(chǎn)生錯(cuò)誤中斷請(qǐng)求,置位ERRI@CAN_MSR。

回到上面的話題,當(dāng)查看客戶的CAN錯(cuò)誤中斷處理程序時(shí),發(fā)現(xiàn)他在中斷程序里的確是做了些標(biāo)志的清除【本意是想清除中斷請(qǐng)求標(biāo)志】。遺憾的是全是對(duì)CAN_ESR寄存器中的相關(guān)錯(cuò)誤標(biāo)志進(jìn)行清零,即對(duì)LEC\EWGF\EPVF\BOFF這幾個(gè)東西清零,偏偏沒有對(duì)ERRI@CAN_MSR的清零。關(guān)鍵的東西成了漏網(wǎng)之魚。

還有,他對(duì)EWGF\EPVF\BOFF這幾個(gè)標(biāo)志清零是無效的,因?yàn)檫@幾個(gè)標(biāo)志位是只讀的,置1或清零是硬件根據(jù)TEC/REC的值動(dòng)態(tài)處理的。
 
 

最后讓客戶把CAN出錯(cuò)中斷代碼做些調(diào)整,在進(jìn)入CAN出錯(cuò)中斷后將CAN_MSR中的ERRI位清0,確實(shí)可以解決錯(cuò)誤中斷循環(huán)往復(fù)的問題。

小結(jié)下,MCU中斷行為一般涉及到使能標(biāo)志、請(qǐng)求標(biāo)志和觸發(fā)源。應(yīng)用中偶爾會(huì)出現(xiàn)有人把中斷使能標(biāo)志和中斷請(qǐng)求標(biāo)志弄混的情況。不過相比之下,這里談到的CAN出錯(cuò)中斷相比ST MCU其它外設(shè)的中斷應(yīng)用就要復(fù)雜或啰嗦些,尤其那個(gè)出錯(cuò)中斷請(qǐng)求標(biāo)志感覺有點(diǎn)隱晦。上面提到的案例,當(dāng)事人可能沒弄清CAN出錯(cuò)中斷請(qǐng)求標(biāo)志位到底是哪個(gè),導(dǎo)致進(jìn)入中斷服務(wù)程序后清除動(dòng)作無效,使得出錯(cuò)中斷服務(wù)程序沒完沒了,而且還會(huì)影響到其它進(jìn)程正常運(yùn)行進(jìn)而導(dǎo)致其它連鎖異常。


             

            


作者: 絲帶機(jī)    時(shí)間: 2016-4-22 10:24
頂一個(gè),太好了
作者: dammon    時(shí)間: 2016-6-3 08:24
寫的不錯(cuò)~~~~~~~
作者: dammon    時(shí)間: 2016-6-3 08:25
我想請(qǐng)問下 除了在中斷里清楚標(biāo)志位,還做什么?出了中斷后 can還是繼續(xù)嘗試發(fā)送數(shù)據(jù)吧?




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久免费 | 日本一二三区电影 | 美女黄18岁以下禁止观看 | 天天操天天摸天天干 | 日韩黄| 色婷婷一区二区三区四区 | 亚洲欧美v| 国产99久久久国产精品下药 | 超碰成人免费 | 久久国产精品久久久久 | 91精品国产综合久久香蕉922 | 成人在线视频一区 | 毛片区| 久久久网| 日本淫视频 | 视频二区 | 久久久久久久一区二区 | 欧美日韩国产三级 | 国产日韩欧美在线播放 | 欧美精品日韩精品 | 一级午夜aaa免费看三区 | 国产激情三区 | 亚洲免费精品 | 午夜视频精品 | 狠狠干天天干 | 国产日产精品一区二区三区四区 | 亚洲欧美一区二区三区视频 | 国产精品美女久久久 | 午夜在线| 亚洲精品18 | 国产精品高潮呻吟久久 | 久久久久久999| 91精品久久久久久久久 | 国产精品美女久久久久久久网站 | 国产玖玖| 狠狠操天天操 | 欧洲免费毛片 | 亚洲天堂一区二区 | 欧美精品福利 | 欧美一区二区小视频 | 国产精品毛片一区二区在线看 |