當前位置:首頁 > 單片機 > 單片機
[導讀]CAN(Controller Area Network)總線,又稱控制器局域網(wǎng),屬于現(xiàn)場總線的范疇,是一種有效支持分布式控制或實時控制的串行通信網(wǎng)絡.與其它幾種現(xiàn)場總線相比,CAN 總線是最容易實現(xiàn)、價格也最為低廉.由于其性能好,可靠

CAN(Controller Area Network)總線,又稱控制器局域網(wǎng),屬于現(xiàn)場總線的范疇,是一種有效支持分布式控制或實時控制的串行通信網(wǎng)絡.與其它幾種現(xiàn)場總線相比,CAN 總線是最容易實現(xiàn)、價格也最為低廉.由于其性能好,可靠性高、設計靈活,現(xiàn)已廣泛應用于工業(yè)現(xiàn)場控制、智能大廈、小區(qū)防范、交通工具、醫(yī)療儀器、環(huán)境監(jiān)控等眾多領域.

CAN總線規(guī)范已被國際標準化組織(ISO)定為國際標準,CAN協(xié)議也是建立在國際標準化組織的開放系統(tǒng)互連參考模型(OSI)基礎上的.CAN總線主要工作在數(shù)據(jù)鏈路層和物理層,用戶可在其基礎上開發(fā)適合系統(tǒng)實際需要的應用層通信協(xié)議,由于CAN總線的可靠性高,使應用層通信協(xié)議得以大大簡化.目前市場上有多種不同型號的CAN控制器,它們實現(xiàn)CAN協(xié)議部分電路的結構和功能大多相同,只是與單片機接口部分的結構和方式有一些差異.

為了提高硬件電路的效率,簡化電路設計上的復雜性,保證電路的電氣兼容性,本文采用PHILIPS公司生產的P89C668單片機和CAN控制器SJA1000設計了CAN接口節(jié)點電路,并介紹了相關的軟件設計.

1 CAN總線節(jié)點接口硬件電路設計

CAN節(jié)點接口硬件電路原理如圖1所示.采用PHILIPS公司生產的P89C668單片機、CAN控制器SJA1000和CAN總線收發(fā)器PCA82C250設計接口電路來實現(xiàn)CAN總線通信.


                   圖1 CAN總線接點接口硬件電路原理

P89C668單片機內帶64kB Flash存儲器,該存儲器既可并行編程,在系統(tǒng)編程ISP中也可串行編程,在實際的成型產品中可通過ISP升級用戶程序. 在Boot ROM程序中,可通過一個默認的串行下載器(UART)對Flash存儲器作ISP編程,而在Flash代碼區(qū)中并不需要調用下載器的代碼,用戶程序可通過調用在Boot ROM中的標準子程序對Flash存儲器擦除和再編程(即IAP).

P89C688在6個時鐘周期內執(zhí)行一條指令,一個OTP位讓用戶可選擇傳統(tǒng)的12個時鐘周期.P89C688用先進CMOS工藝制造,是80C51單片機家族的衍生品,其指令集和80C51相同.該單片機有四個8位I/O口,三個16位定時器/事件計數(shù)器,多中斷源,四個優(yōu)先級,可嵌套中斷結構,一個增強型UART和片內振蕩器以及時序電路.P89C668新增特性使其成為一個功能強大的單片機,可為某些應用提供PWM、高速的I/O和加/減計數(shù).

SJA1000 是PHILIPS 公司生產的獨立CAN 通信控制器,它既支持CAN2.0A,又支持CAN2.0B,與PCA82C200 CAN 控制器兼容(BasicCAN),并可替代PCA82C200;增加了一種新的工作模式PeliCAN,使其支持具有很多新特性的CAN2.0B 協(xié)議;集成了CAN 協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對通信數(shù)據(jù)的成幀處理;具有多主結構、總線訪問優(yōu)先權、硬件濾波等特點.

PC82C250為CAN總線收發(fā)器,是CAN 控制器和物理總線的接口,提供對總線的驅動發(fā)送能力、對CAN控制器的差動發(fā)送能力和對CAN控制器的差動接收能力.它具有很強的抗瞬間干擾和保護總線的能力,以及三種不同的工作方式即高速、斜率控制和待機,如表1所示.總線上的某一個節(jié)點掉電不會影響總線,在40米內應用的速度可達1M baud,最多可掛110個節(jié)點.

從圖1 可看出,該硬件電路主要由單片機P89C668、CAN 獨立控制器SJA1000 和CAN 收發(fā)器PCA82C250 組成.

單片機P89C668 負責對SJA1000 進行初始化,通過控制SJA1000實現(xiàn)數(shù)據(jù)的發(fā)送與接收等通信任務.

SJA1000 的AD0~AD7連接到P89C668 的P0口;

CS連接到P89C668的P1.1,P1.1 為0 時選中SJA1000,可控制SJA1000;

SJA1000 的RD/E、WR、ALE/AS 分別連接到P89C668 的RD(P3.7)、WR(P3.6)、P1.0;

SJA1000的(INT)連接到P89C668 的P3.2(INT0),這樣,P89C668 可以通過中斷方式訪問SJA1000;

SJA1000的模式選擇引腳MODE 接高電平時選擇Intel 模式;

為了保證時鐘同步,SJA1000 的CLKOUT 引腳使能,向P89C668 提供時鐘源.

2 CAN 總線節(jié)點接口軟件設計

實現(xiàn)CAN 總線通信,要對CAN 總線節(jié)點接口設計相應的總線通信程序;在總線通信之前,必須進行SJA1000 控制器初始化.在上電或復位后,單片機通過運行其自身復位程序初始化SJA1000.CAN總線通信程序大致由SJA1000 初始化、發(fā)送和接收三部分組成.以下分別對他們進行簡單的描述.

2.1  SJA1000 初始化

在上電后,CAN 控制器的RST 腳獲得一個復位脈沖,使之進入復位模式.在開始對SJA1000 各個配置寄存器進行設定之前,主控制器通過讀復位/請求標識來檢測SJA1000是否進入復位模式.為了避免微控制器的上電復位時間和SJA1000 的復位時間的偏差,微控制器要等待SJA1000 完成上電復位后才能對SJA1000 配置寄存器進行配置,存有配置信息的寄存器只能在復位模式下才可進行寫入.SJA1000 初始化程序在復位模式下,主控制器要配置下面的寄存器:

(1)模式寄存器(僅在PeliCAN 模式下選擇應用操作模式)
接收過濾模式   
自檢測模式   
偵聽模式

(2)時鐘分頻寄存器
使用BasicCAN 或PeliCAN 模式
CLKOUT 引腳是否可以使用
CAN 輸入比較器是否被跳過
TX1 輸出是否專門用于接收中斷輸出

(3)總線定時寄存器
定義總線的位速率
定義位周期內的采樣點位采樣點
定義一個位周期的采樣數(shù)量

(4)接收代碼和接收掩碼寄存器
定義要接收消息的接收代碼
定義與接收代碼相關位進行比較的接收掩碼

(5)輸出控制寄存器
定義CAN 總線輸出引腳TX0 和TX1 的配置

在將這些配置信息配置到SJA1000配置寄存器后,通過消除復位模式,請求使SJA1000進入操作模式.一定要確保復位標志真的被刪除,并且在沒有進行CAN 總線通信前進入操作模式,這可以通過讀該標志來實現(xiàn). 當硬件復位處于掛起狀態(tài),即CAN 控制器的RST 引腳為低電平時,復位模式/請求標志不能被清除.

下面是SJA1000 的初始化程序.
CAN_INI: MOV DPTR, #MOD; 模式寄存器
MOV A, #01H
MOVX @DPTR, A
NOP
MOVX A, @DPTR
ANL A, #01H
JZ CAN_INI; 等待SJA1000 進入復位模式
MOV DPTR, #BTR0; 總線定時0
MOV A, #BandRate0
MOV DPTR, #BTR1; 總線定時1
MOV A, # BandRate1
MOV DPTR, #OCR; 輸出控制寄存器
MOV A, #1AH
MOVX @DPTR, A
MOV DPTR, #CDR; 時鐘分頻器
MOV A, #0C0H
MOV DPTR, #ACR0; 接收代碼寄存器ACR0
MOV A, #ModuleAddress; 設置為模塊的地址
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOV @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
MOV DPTR, #AMF0; 接收掩碼寄存器AMF0
MOV A, #0FFH; 接收代碼設置為
0X0FFFFFFFF
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
INC DPTR
MOV A, #0FFH
MOVX @DPTR, A
MOV DPTR, #IER ; 中斷使能寄存器IER
MOV A, #09H; 允許接收中斷和數(shù)據(jù)溢出中斷
MOV DPTR, #CMR; 命令寄存器
MOV A, #04H; 釋放接收緩沖器
MOVX @DPTR, A
LOOP: MOV DPTR, #MOD
MOV A, #08H; 設置SJA1000 工作模式為普通模式,單濾波接收
MOVX @DPTR, A
MOV DPTR, #MOD
MOV A, @DPTR
ANL A, #01H
JNZ LOOP; 等待復位標識被清除
RET

2.2 CAN 總線發(fā)送程序

對SJA1000控制器進行初始化建立CAN總線通信后,就可以通過CAN總線發(fā)送和接收報文.發(fā)送程序負責節(jié)點的報文發(fā)送.發(fā)送報文時,用戶只需將需要發(fā)送的數(shù)據(jù)按一定的格式組合成一幀的報文,并送入SJA1000發(fā)送緩存區(qū)中,然后啟動SJA1000發(fā)送即可.發(fā)送程序分發(fā)送數(shù)據(jù)幀和遠程幀兩種.通過設置RTR以決定是發(fā)送數(shù)據(jù)幀還是遠程幀.

SJA1000的報文主要有中斷控制和查詢兩種發(fā)送方式.主動發(fā)送報文建議采用查詢方式,一次發(fā)送不成功,可再次發(fā)送,這樣發(fā)送程序的處理比較簡單,可采用查詢SJA1000控制部分狀態(tài)標識符的方法.下面給出以查詢方式發(fā)送報文的發(fā)送程序.
CAN_SEND: MOV DPTR, #SR; 狀態(tài)寄存器SR
MOVX A, @DPTR;
ANL A, #04H
JZ CAN_SEND; 等待發(fā)送寄存器釋放
MOV R7, #0AH
MOV R0, #TXB_Data; 待發(fā)送數(shù)據(jù)的首地址
MOV DPTR, #TXB_Addr; 發(fā)送寄存器的基地址
LOOP1: MOV A, @R0; 將數(shù)據(jù)寫入發(fā)送寄存器
MOVX @DPTR, A
INC DPTR
INC R0
DJNZ R7, LOOP1
MOV DPTR, #CMR; 命令寄存器
MO A, #01H; 發(fā)送請求命令
MOVX @DPTR, A
RET

2.3 CAN總線接收程序

SJA1000 根據(jù)規(guī)則自動接收消息,接收到的消息放入接收緩沖器,同時接收緩沖器狀態(tài)標志位RBS 置為1,接收程序根據(jù)RBS 值來決定接收報文與否.SJA1000 報文的接收也有兩種方式:中斷和查詢.對通信的實時性要求不高時,可采用查詢方式,否則采用中斷方式.以下給出中斷接收方式程序.

CAN_INT: CLR EA; 關所有中斷
MOV DPTR, #IER; 中斷寄存器IER 使能
MOVX A, @DPTR
MOV R6, A; 保存SJA1000 中斷允
MOV A, #00H ; 重設SJA1000 中斷允許模式為不允許任何中斷
MOVX @DPTR, A
LCALL RECEIVE; 接收信息
JZ ReceivOk; 接收到的信息正確則跳轉,否則進行錯誤處理.. ..; 錯誤處理
ReceivOk: MOV DPTR, #IER
MOV A, R6; 恢復SJA1000 中斷允許模式
MOVX @DPTR, A
SETB EA; 開放中斷
RETI
RECEIVE: CLR A
MOV DPTR, #SR; 狀態(tài)寄存器SR
JZ ERROR; 不是正常的消息接收中斷則跳轉
LOOP2: MOV DPTR, #RXB_Addr; 接收寄存器的基地址
MOV R1, #RXB_Data; 存放所接收數(shù)據(jù)的首地址
MOV R7, #0AH
LOOP3: MOVX A, @DPTR; 接收數(shù)據(jù)
MOV @R1, A; 保存數(shù)據(jù)
INC DPTR
INC R1
DJNZ R7, LOOP3
MOV DPTR, #CMR; 命令寄存器
MOV A, #0X04; 釋放接收緩沖器
MOVX @DPTR, A
MOV DPTR, #SR
MOVX A, @DPTR
CJNE A, #01H, LOOP2; 等待接收隊列為空
MOVD PTR, #IR; 中斷寄存器IR
MOVX A, @DPTR; 清空SJA1000 的接收中斷標識位
CLR A; 返回值ACC=0,表示接收消息正確
LJMP END_RECEIVE
ERROR: .. ..; 接收消息錯誤處理
MOVA, #01H; 返回值ACC=1,表示接收消息不正確
NED_RECEIVE: RET

3 結語

以上介紹了P89C668單片機及其與CAN控制器SJA1000之間的接口方法,并給出了SJA1000在PeliCAN模式下的SJA1000初始化程序、發(fā)送程序和接收程序.可在此基礎上實現(xiàn)更復雜的CAN總線通信處理,如報警處理、錯誤處理等.
 

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉