基于CAN的大客飛機(jī)航電系統(tǒng)局域網(wǎng)通信設(shè)計
2.2 通信控制部分
CAN總線通信控制部分如圖4所示,主要由CAN總線控制器SJA1000、單片機(jī)AT89S52和雙口RAMIDT7006組成,負(fù)責(zé)整個CAN總線通信控制以及和PCI局部總線的互連。雙口RAM作為CAN總線和PCI局部總線交換數(shù)據(jù)時的一個緩沖存儲區(qū)。單片機(jī)AT89S52是該通信卡通信控制的核心,它負(fù)責(zé)與雙口RAM以及CAN控制器SJA1000之間的通信。本文引用地址:http://www.biyoush.com/article/154762.htm
將雙口RAM的INTR和單片機(jī)的外部中斷引腳INT1相連,當(dāng)PCI9052向雙口RAM傳輸完數(shù)據(jù)后,觸發(fā)雙口RAM中斷引腳INTR,進(jìn)而觸發(fā)單片機(jī)中斷,單片機(jī)執(zhí)行中斷服務(wù)程序,讀取雙口RAM中的數(shù)據(jù)。為了使SJA1000和AT89S52時鐘同步,將SJA1000的CLKOUT引腳接至AT89S52的時鐘輸入端,作為AT89S52的外部時鐘輸入。SJA1000接收到新的數(shù)據(jù)后,給出中斷信號INT,通過觸發(fā)中斷信號INT0讓單片機(jī)實(shí)時處理這些數(shù)據(jù),單片機(jī)把這些數(shù)據(jù)處理完成后,寫入雙口RAM指定的存儲單元后,再向雙口RAM的1FFEH單元寫入任意數(shù)據(jù),即可觸發(fā)雙口RAM左端中斷,使計算機(jī)接收數(shù)據(jù)。由于SJA1000的地址數(shù)據(jù)復(fù)用,AD0~AD7可直接將其接到單片機(jī)的P0口。雙口RAM地址和數(shù)據(jù)是分開的,通過74LS373和單片機(jī)P1口相連。
2.3 PCI總線接口部分
CAN總線通信卡PCI總線接口連接如圖5所示。
PCI總線接口電路主要是PCI總線和雙口RAM的連接電路。雙口RAM是PCI總線和CAN總線數(shù)據(jù)傳輸?shù)闹修D(zhuǎn)站,由于CAN總線相對于PCI總線而言傳輸速度較慢,為了充分利用PCI通道的高速特性,一般要將單片機(jī)處理后的CAN總線數(shù)據(jù)暫時緩存在外部存儲器中,當(dāng)存儲器寫滿時再利用PCI總線的突發(fā)、快速的特性,將存儲器數(shù)據(jù)一次性讀出。這樣,既充分利用了PCI接口的高性能,CPU又能空出時間來進(jìn)行數(shù)據(jù)處理和顯示等其他操作,從而增強(qiáng)數(shù)據(jù)傳輸?shù)膶?shí)時性。
PCI9052本質(zhì)上是一個橋設(shè)備,它把PCI總線對某一段PCI總線地址空間的各種操作(包括讀、寫等)轉(zhuǎn)換為相應(yīng)的局部總線上的操作。把數(shù)據(jù)寫入E2PROM完成后,當(dāng)板卡上電,PCI9052從E2PROM中讀取數(shù)據(jù)并寫入PCI9052中的PCI寄存器和局部配置寄存器中。PC機(jī)(PCI主控設(shè)備)通過讀這些寄存器,得知系統(tǒng)中有多少存儲器以及I/O控制器要求分配相應(yīng)的地址空間,將相應(yīng)的基地址寫入PCI基址寄存器中。假設(shè)本設(shè)計中計算機(jī)給PCI9052分配的基地址為0x8400,由局部配置寄存器的值可知,本設(shè)計采用的是I/O映射,且空間大小為FFH,則計算機(jī)對I/O空間0x8400H~0x84FFH的訪問,就會通過PCI9052映射到局部空間0x00H~0xFFH。
3 仿真系統(tǒng)的軟件設(shè)計
系統(tǒng)軟件設(shè)計是在Windows XP環(huán)境下,用VisualC++6.0開發(fā),采用面向?qū)ο蟮脑O(shè)計方法。軟件主要包括主模塊、初始化模塊、控制模塊、數(shù)據(jù)管理模塊、通信模塊、顯示模塊和通信接口驅(qū)動軟件等。軟件可以通過友好界面為用戶提供通過CAN總線進(jìn)行通信的雙方的設(shè)備號、端口號、波特率、數(shù)據(jù)等,可以初始化芯片,可以進(jìn)行復(fù)位操作,可以設(shè)置波特率。向用戶展示CAN總線的通信過程和結(jié)果,體現(xiàn)CAN線協(xié)議的功能。軟件流程圖如圖6所示。
評論