CAN總線 SJA1000中斷

背景:測試

  最近一直在使用C8051F340 + SJA1000來實現CAN通訊,就SJA1000部分作個記錄。blog

正文:配置

  整個系統結構拓撲圖以下:im

   

  兩路CAN,C8051F340做爲CPU,處理CAN與USB數據。通信

  轉入正題,關於SJA1000的中斷。數據

  SJA1000的/INT腳與單片機的外部中斷輸入腳相連,平時/INT保持高電平,當SJA1000內部有中斷時,/INT腳及變爲低電平(單片機外部輸入中斷引腳設置爲低電平有效邊沿觸發),等待單片機進行處理。img

  SJA1000中斷部分應該關注兩個寄存器「IR」(Interrupt Register),「IER」(Interrupt Enable Register)。顧名思義,「IER」爲使能相應中斷,「IR」爲指示中斷狀態,應當注意的是:當單片機讀取了SJA1000的「IR」寄存器後,/INT腳從新變爲高電平,「IR」寄存器全部位復位爲0!時間

  還有一個值得注意的是:爲了保險起見,應該要將「IER」清零,而後根據須要配置相應位。co

  爲此,我也鬱悶了許久,過程以下:爲了測試,因而將2路CAN相互接通,當經過SJA1000_1發送數據時,按照邏輯來講,SJA1000_1發送數據,SJA1000_2過濾接收該條數據併產生接收完成中斷,但是這個SJA1000_1居然與SJA1000_2同時產生中斷!而我中斷使能使用的是「或」的方式配置了「總線錯誤中斷」、「數據溢出中斷」「錯誤報警中斷」、「接收中斷」,SJA1000_1不該該會在這個時候產生中斷!SJA1000_1難道會過濾接收本身發的數據?這是首先被懷疑的,查了資料後發現,處於發送狀態的節點是不會接收數據的。排除!折騰了許久才發現SJA1000_1發送完畢產生了發送完成中斷,所以能夠確認「發送使能中斷」不清零的話,是有可能被打開的(SJA1000的官檔並未說明每一位的默認值),其它「使能中斷」亦如此,錯誤

 

記錄地點:深圳WZ

記錄時間:2016年3月16日

相關文章
相關標籤/搜索