CAN匯流排 SJA1000中斷

2022-03-26 05:27:20 字數 953 閱讀 2377

背景:

最近一直在使用c8051f340 + sja1000來實現can通訊,就sja1000部分做個記錄。

正文:整個系統結構拓撲圖如下:

兩路can,c8051f340作為cpu,處理can與usb資料。

轉入正題,關於sja1000的中斷。

sja1000的/int腳與微控制器的外部中斷輸入腳相連,平時/int保持高電平,當sja1000內部有中斷時,/int腳及變為低電平(微控制器外部輸入中斷引腳設定為低電平有效邊沿觸發),等待微控制器進行處理。

sja1000中斷部分應該關注兩個暫存器「ir」(interrupt register),「ier」(interrupt enable register)。顧名思義,「ier」為使能相應中斷,「ir」為指示中斷狀態,應當注意的是:當微控制器讀取了sja1000的「ir」暫存器後,/int腳重新變為高電平,「ir」暫存器所有位復位為0!

還有乙個值得注意的是:為了保險起見,應該要將「ier」清零,然後根據需要配置相應位。

為此,我也鬱悶了許久,過程如下:為了測試,於是將2路can相互接通,當通過sja1000_1傳送資料時,按照邏輯來說,sja1000_1傳送資料,sja1000_2過濾接收該條資料並產生接收完成中斷,可是這個sja1000_1竟然與sja1000_2同時產生中斷!而我中斷使能使用的是「或」的方式配置了「匯流排錯誤中斷」、「資料溢位中斷」「錯誤報警中斷」、「接收中斷」,sja1000_1不應該會在這個時候產生中斷!sja1000_1難道會過濾接收自己發的資料?這是首先被懷疑的,查了資料後發現,處於傳送狀態的節點是不會接收資料的。排除!折騰了許久才發現sja1000_1傳送完畢產生了傳送完成中斷,因此可以確認「傳送使能中斷」不清零的話,是有可能被開啟的(sja1000的官檔並未說明每一位的預設值),其它「使能中斷」亦如此,

記錄地點:深圳wz

can匯流排學習(一) 初識can匯流排

can匯流排最初由德國bosch公司為汽車檢測 控制系統而設計的。1993年can成為國際標準iso11898 高速應用 和iso1119 低速應用 can的規範從can1.2規範 標準格式 發展為相容can1.2規範的can2.0規範 can2.0a為標準格式,can2.0b為擴充套件格式 目前應...

初學CAN匯流排

初學can 匯流排,之前用的是 rs485 485 中沒有匯流排仲裁的概念,如果匯流排上有十個節點,要事先算好每組資料的傳送用時,調好時間延遲,逐個排隊傳送。而 can匯流排可以把多個節點的資料都送到本站的 can晶元,並處於準備狀態,等待匯流排空閒時,向匯流排傳送資料,由匯流排仲裁哪乙個節點優先傳...

can匯流排配置

can 匯流排配置 在linux 系統中,can匯流排介面 裝置作為網路裝置 被系統進行統一 管理。在控制 台下,can匯流排 的配置和以 太網的配置使用相同的 命令。在控制台 上輸入命令 ifconfig a 可以得到以下結果 can0 link encap unspec hwaddr 00 00...