在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 一個關(guān)于CAN出錯中斷重復(fù)出現(xiàn)的話題

            一個關(guān)于CAN出錯中斷重復(fù)出現(xiàn)的話題

            作者: 時間:2016-11-18 來源:網(wǎng)絡(luò) 收藏
            某日,有一客戶反映他們在做STM32F407的CAN通信的出錯測試時,發(fā)現(xiàn)出現(xiàn)類似死機(jī)的現(xiàn)象。后來跟蹤調(diào)試發(fā)現(xiàn)是開啟了出錯中斷,因其不停中斷導(dǎo)致的貌似死機(jī)現(xiàn)象。納悶的是,經(jīng)過進(jìn)一步測試,發(fā)現(xiàn)即使清除了“中斷請求標(biāo)志”后也無效。大致情形如下:

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

            本文引用地址:http://www.biyoush.com/article/201611/315717.htm

            然后繼續(xù)做實驗,將CAN_IER寄存器中的LECIE和EWGIE這兩種中斷使能關(guān)閉掉,發(fā)現(xiàn)還是有這個問題??蛻粲X得這樣有點奇怪。

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

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

            跟CAN出錯中斷有關(guān)的寄存器主要涉及到3個,分別是CAN主控狀態(tài)寄存器CAN_MSR,CAN中斷使能寄存器CAN_IER,CAN錯誤狀態(tài)寄存器CAN_ESR.說實在的,這個跟CAN出錯中斷有關(guān)的東西還是有點復(fù)雜??纯聪聢D,藍(lán)色方框里的是各種錯誤中斷的使能位,紅色方框里的是各類出錯條件或狀態(tài)變化條件。請注意圖中的與邏輯符號&和或邏輯符號+。

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

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

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

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

            還有,他對EWGFEPVFBOFF這幾個標(biāo)志清零是無效的,因為這幾個標(biāo)志位是只讀的,置1或清零是硬件根據(jù)TEC/REC的值動態(tài)處理的。

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

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



            關(guān)鍵詞: CAN出錯中斷重復(fù)出

            評論


            技術(shù)專區(qū)

            關(guān)閉