1553B總線在嵌入式系統(tǒng)中的應(yīng)用 作者: 時(shí)間:2007-03-09 來源:網(wǎng)絡(luò) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對(duì)面交流海量資料庫(kù)查詢 收藏 作者Email: cai_yang@etang.com 1 介紹 MIL-STD-1553是為數(shù)據(jù)總線定義的軍方標(biāo)準(zhǔn)。這種數(shù)據(jù)總線被用來為各種的系統(tǒng)之間的數(shù)據(jù)和信息的交換提供媒介,它類似“局域網(wǎng)或者LAN”。 1950年至60年代中,航空電子學(xué)是簡(jiǎn)單、獨(dú)立的系統(tǒng),航空、通信、飛行控制和顯示器由模擬系統(tǒng)構(gòu)成;信號(hào)主要由模擬電壓、同-異步信號(hào)和接觸式開關(guān)構(gòu)成。 MIL-STD-1553總線的傳輸速度為每秒1M比特,字的長(zhǎng)度為20個(gè)比特,數(shù)據(jù)有效長(zhǎng)度為16個(gè)比特,信息量最大長(zhǎng)度為32個(gè)字,傳輸方式為半雙工方式,傳輸協(xié)議為命令/響應(yīng)方式,故障容錯(cuò)有典型的雙冗余方式,第二條總線處于熱備份狀態(tài);信息格式有BC到RT、RT到BC、RT到RT、廣播方式和系統(tǒng)控制方式;能掛31個(gè)遠(yuǎn)置終端,終端類型有總線控制器(BC)、遠(yuǎn)置終端(RT)和總線監(jiān)聽器(BM);傳輸媒介為屏蔽雙絞線,MIL-STD-1553總線耦合方式有直接耦合和變壓器耦合。 2 硬件系統(tǒng) 本系統(tǒng)采用PCI總線接口,PCI橋芯片采用PLX公司的PCI9052。1553B總線芯片采用DDC61580,CPLD主要實(shí)現(xiàn)DDC61580和PCI9052之間的時(shí)序及邏輯控制。硬件框圖如圖1所示。 詳細(xì)的邏輯控制信號(hào)見CPLD邏輯部分。 2.1 PCI9052的主要特點(diǎn) PCI9052是PLX技術(shù)公司為擴(kuò)展適配板卡推出的能提供一種混合的高性能PCI總線目標(biāo)(從)模式的接口芯片。該芯片可與多種局部總線相連,并且支持相對(duì)慢的局部總線在PCI總線上的突發(fā)傳送速率達(dá)到132MB/s。9052可編程配置直接與復(fù)用或非復(fù)用的8/16/32位局部總線相連,8位和16位模式便于ISA卡直接向PCI卡轉(zhuǎn)換。 PCI9052的內(nèi)部結(jié)構(gòu)中包含了一個(gè)獨(dú)立的ISA邏輯接口,通過這個(gè)邏輯接口可以完成由ISA到PCI的平滑轉(zhuǎn)換。它支持8位和16位數(shù)據(jù)寬度的ISA設(shè)備,該設(shè)備可以是內(nèi)存映射,也可以是I/O映射。先讀模式用于提高讀取數(shù)據(jù)的吞吐量。一旦ISA接口模式使能,PCI9052只執(zhí)行單個(gè)周期操作。特別指出的是,串行EEPROM必需使ISA接口模式使能。 可以使用兩種方法配置PCI9052用于ISA接口模式。方法一:燒寫串行EEPROM方法。使用燒寫器,將數(shù)據(jù)寫入串行EEPROM,參照PCI9052的DataSheet來寫入恰當(dāng)?shù)臄?shù)據(jù)。需要注意的是,對(duì)于ISA模式,LRESET引腳必須始終為高電平,并確認(rèn)MODE引腳置為0,處于非復(fù)用模式。 方法二:熱配置方法。從PCI總線通過PCI9052芯片來燒寫串行EEPROM。該方法需要注意的是,LRESET引腳的極性在ISA模式時(shí)由低變?yōu)楦?,并確認(rèn)MODE引腳置為低。 當(dāng)為ISA接口模式配置時(shí)必須注意以下幾點(diǎn):(1)存取ISA接口引腳時(shí)要參照PCI9052引腳的C/ISA模式引腳圖來連線。(2)空間0分配給ISA接口的內(nèi)存存取。(3)空間1分配給ISA接口的I/O存取。(4)無論空間0的局部地址處于CS0#范圍還是空間1的局部地址處于CS1#范圍,ISA存取均有效。(5)標(biāo)準(zhǔn)的從周期可以使用空間2、空間3和串行EEPROM來存取。 2.2 DDC61580的主要特點(diǎn) DDC61580具有以下特點(diǎn): ● 全兼容MIL-STD-1553接口 ● 靈活的處理器/內(nèi)存接口 ● 標(biāo)準(zhǔn)的4K%26;#215;16RAM ● 自動(dòng)BC重試 ● 可編程BC間隔時(shí)間 ● 靈活的RT數(shù)據(jù)緩沖區(qū) ● 可編程非法區(qū) ● 可選擇消息監(jiān)控 ● 支持同時(shí)RT/Monitor模式 下面將詳細(xì)介紹BC、RT以及MT模式的內(nèi)存組織,編程方法等。 2.3 BC模式操作 BC協(xié)議支持所有的MIL-STD-1553消息格式,通過編程BC控制字和命令字的T/R*位來確定消息格式。另外,BC控制字還允許選擇通道、自測(cè)試、重試、中斷以及狀態(tài)字掩碼等。BC模式內(nèi)存映射包含有8個(gè)固定的內(nèi)存位置,即堆棧指針A,B、消息計(jì)數(shù)器A,B、初始堆棧指針A,B和初始消息計(jì)數(shù)器A,B。在啟動(dòng)消息幀之前,必須首先初始化堆棧指針和消息計(jì)數(shù)器。特別應(yīng)注意的是,BC消息塊最大是38個(gè)字,比如對(duì)于RT->RT傳輸,它包含32個(gè)數(shù)據(jù),1個(gè)控制字,2個(gè)命令字,1個(gè)LoopBack字和2個(gè)狀態(tài)字。 2.3.1 BC內(nèi)存管理 BC內(nèi)存管理如圖2所示。該圖說明了堆棧指針包含四個(gè)字的消息塊描述符,即塊狀態(tài)字,時(shí)間標(biāo)志字,消息間隔時(shí)間和消息塊地址。塊狀態(tài)字包括消息狀態(tài)、完成、有效性及總線通道;時(shí)間標(biāo)志字反映了當(dāng)前消息起始和結(jié)束時(shí)時(shí)間標(biāo)志寄存器的值,它可以編程為分辨率為2~64us/LSB(2的冪);消息間隔時(shí)間指的是當(dāng)前消息的開始到下一條消息的開始之間的時(shí)間;消息塊地址提供了指向消息塊第一個(gè)字的指針。 2.3.2 BC編程 對(duì)于BC編程,首先要初始化相應(yīng)的寄存器以及堆棧指針、消息計(jì)數(shù)器;然后定義消息的控制字、命令字等;最后啟動(dòng)BC。需要注意的是BC控制字不會(huì)在1553總線上傳輸。BC的消息格式通過編程BC控制字的最低3位來控制。如表1所示。 BC消息幀可以通過查詢和中斷來進(jìn)行處理。如果采用查詢模式,那么可以查詢配置寄存器1、中斷狀態(tài)寄存器、堆棧指針和消息計(jì)數(shù)器寄存器。另外,每一條BC消息結(jié)束后堆棧指針加4,所以如果要讀取RT-To-BC的消息,我們應(yīng)該首先從堆棧指針A中讀取當(dāng)前消息的堆棧指針,然后減4后來分別讀出塊狀態(tài)字、時(shí)間標(biāo)志字、消息時(shí)間間隔和上一條消息的塊地址,最后從此塊地址讀出接收到的數(shù)據(jù)。在嵌入式系統(tǒng)軟件處理中,我們應(yīng)盡量采用中斷方式。 表1 MIL-STD-1553消息格式 BIT2(MODE CODE) BIT1(BROADCAST) BIT0(RT-TO-RT) Message Format 0 0 0 BC-To-RT(if T/R*=0) or RT-To-BC(if T/R*=1) 0 0 1 RT-To-RT 0 1 0 Broadcast 0 1 1 RT-To-RTs(Broadcast) 1 0 0 Mode Code 1 0 1 Not Used 1 1 0 Broadcast Mode Code 1 1 1 Not Used 2.4 RT模式操作 RT,即遠(yuǎn)程終端,它包含了所有MIL-STD-1553的格式,雙冗余模式編碼,內(nèi)部命令非法,內(nèi)部格式化的BIT字和錯(cuò)誤檢測(cè)。RT的反映時(shí)間大約為4.8us。RT內(nèi)存管理包含單消息模式,循環(huán)緩沖區(qū)模式(支持批量數(shù)據(jù)傳輸)和雙緩沖區(qū)模式。通過使用雙緩沖區(qū),主機(jī)處理器很容易訪問最近接收到有效數(shù)據(jù)塊。對(duì)于發(fā)送、接收或廣播子地址,數(shù)據(jù)塊存儲(chǔ)緩沖區(qū)可以采用單緩沖、雙緩沖(兩個(gè)交替的數(shù)據(jù)塊)和循環(huán)緩沖區(qū)(可編程大小為128到8192個(gè)字)。在增強(qiáng)模式下,ACE提供RT子地址雙緩沖區(qū),RT子地址雙緩沖區(qū)模式給指定的子地址分配了兩個(gè)32字?jǐn)?shù)據(jù)緩沖區(qū),接收到的數(shù)據(jù)交替的存儲(chǔ)在這兩個(gè)緩沖區(qū)中。 2.4.1 RT內(nèi)存管理 RT內(nèi)存管理包含單消息模式,循環(huán)緩沖區(qū)模式(支持批量數(shù)據(jù)傳輸)和雙緩沖區(qū)模式。在此主要介紹循環(huán)緩沖區(qū)模式,如圖3所示。這意味著在我們?cè)O(shè)置發(fā)送、接收或廣播的初始地址后,數(shù)據(jù)塊地址從此地址開始到所設(shè)置的最大長(zhǎng)度(如1024字)進(jìn)行環(huán)繞。這在大批量數(shù)據(jù)傳輸中非常有效,它可以減輕處理器的負(fù)荷,我們?cè)谔幚頃r(shí)可以設(shè)置循環(huán)緩沖區(qū)Rollover中斷來一次性讀取數(shù)據(jù)。 2.4.2 RT子地址控制字 在增強(qiáng)RT內(nèi)存管理方式下,32個(gè)子地址控制字控制了各自的內(nèi)存管理和中斷。對(duì)于每一個(gè)子地址控制字,發(fā)送、接收和廣播各5位控制內(nèi)存大小及中斷,第15位用來控制使能子地址雙緩沖區(qū)。子地址控制字位如表2所示。 表2 子地址控制字位 15 RX: DOUBLE BUFFER ENABLE 14 TX: EOM INT 13 TX: CIRC BUF INT 12 TX: MEMORY MANAGEMENT 2 (MM2) 11 TX: MEMORY MANAGEMENT 1 (MM1) 10 TX: MEMORY MANAGEMENT 0 (MM0) 9 RX: EOM INT 8 RX: CIRC BUF INT 7 RX: MEMORY MANAGEMENT 2 (MM2) 6 RX: MEMORY MANAGEMENT 1 (MM1) 5 RX: MEMORY MANAGEMENT 0 (MM0) 4 BCST: EOM INT 3 BCST: CIRC BUF INT 2 BCST: MEMORY MANAGEMENT 2 (MM2) 1 BCST: MEMORY MANAGEMENT 1 (MM1) 0 BCST: MEMORY MANAGEMENT 0 (MM0) 注意,對(duì)于發(fā)送子地址,我們可以選擇使用單緩沖或循環(huán)緩沖內(nèi)存方式,而雙緩沖模式則不用于發(fā)送子地址。 2.4.3 RT編程 對(duì)于RT編程,首先初始化相應(yīng)的寄存器;然后設(shè)置非法區(qū)、初始化相應(yīng)子地址的查詢表及子地址控制字;最后設(shè)置配置寄存器1使設(shè)備處于RT模式。此后該設(shè)備就處于在線,只要BC發(fā)送一條消息命令與該設(shè)備相關(guān),那么該設(shè)備就會(huì)做出反映。處理RT消息時(shí),這里也有四個(gè)字的塊描述符,即塊狀態(tài)字、時(shí)間標(biāo)志字、數(shù)據(jù)塊起始地址指針和接收到的16位命令字。與BC模式一樣,要讀取接收到的消息,我們應(yīng)該首先從堆棧指針A中讀取當(dāng)前消息的堆棧指針,然后減4后來分別讀出塊狀態(tài)字、時(shí)間標(biāo)志字、上一條消息的塊地址和命令字(該命令字中包含數(shù)據(jù)長(zhǎng)度、RT地址、子地址以及是發(fā)送或接收標(biāo)志);最后根據(jù)數(shù)據(jù)長(zhǎng)度從此塊地址讀出接收到的數(shù)據(jù)。 2.5 MT模式操作 MT,即監(jiān)控模式,它包含三種不同的總線監(jiān)控模式:(1)字監(jiān)控;(2)可選擇的消息監(jiān)控;(3)組合的RT/可選擇的消息監(jiān)控模式。本文主要介紹可選擇的消息監(jiān)控方式。消息監(jiān)控包含一個(gè)命令堆棧和一個(gè)數(shù)據(jù)堆棧,它們位于RAM中固定的位置。 2.5.1 消息監(jiān)控格式 在數(shù)據(jù)堆棧中的消息格式取決于要處理的消息類型。BC-To-RT命令傳輸會(huì)把命令字存儲(chǔ)在監(jiān)控命令字堆棧中,數(shù)據(jù)跟隨在接收到的RT狀態(tài)字后面一起存儲(chǔ)在監(jiān)控?cái)?shù)據(jù)堆棧中。注意,讀取到的監(jiān)控消息需要:塊狀態(tài)字(用來決定消息是否是RT-To-RT傳輸),命令字(用來決定消息格式和字?jǐn)?shù),如發(fā)送、接收、模式編碼、廣播等),數(shù)據(jù)指針。 2.5.2 MT編程 對(duì)于MT編程,首先初始化相應(yīng)寄存器及配置寄存器1來使該設(shè)備處于MT模式;然后初始化監(jiān)控命令堆棧指針和數(shù)據(jù)堆棧指針,初始化可選擇的監(jiān)控查詢表;最后啟動(dòng)MT。中斷處理時(shí),首先讀取中斷狀態(tài)寄存器,判斷是否是EOM中斷;其次從命令字堆棧所初始化的堆棧地址開始讀取塊狀態(tài)字、時(shí)間標(biāo)志字、數(shù)據(jù)指針及命令字;最后從數(shù)據(jù)指針?biāo)傅牡刂分凶x取狀態(tài)字和數(shù)據(jù)。注意,此后堆棧指針應(yīng)該加4,一直到1K環(huán)繞。 3 軟件部分 該軟件部分主要工作在VxWorks嵌入式操作系統(tǒng)中,軟件的任務(wù)首先是通過PCI總線查找PCI9052的存在與否,然后獲取IO、內(nèi)存以及中斷資源以供驅(qū)動(dòng)程序使用。軟件的主要任務(wù)就是初始化DDC61580相關(guān)寄存器以及內(nèi)存,并使之工作于其中一種模式(BC、RT或MT)。比如下面一段程序就是使DDC61580工作于RT模式。 //Start RT Test for(i=0;i<256;i++) _acMemWrite(STACK_A + i ,0x0000); _acMemWrite(STACK_POINTER_A ,0x0000); //Initialize Stack //Initialize lookup for(i=0;i<128;i++) _acMemWrite((LOOKUP_A + i) ,0xffff); for(i=0;i<32;i++) _acMemWrite((0x400 + i) ,0xffff); _acMemWrite(0x162 ,0x0260); //sa2,transmit _acMemWrite(0x1a2 ,0x8000); //sa2 _acMemWrite(0x143 ,0x0400); //sa3,receive _acMemWrite(0x1a3 ,0x0260); //sa3,single message,EOM interrupt enabled for(i=0;i<32;i++) _acMemWrite((0x3c0 +i) ,0x0000); //sa2 for(i=0;i<32;i++) _acMemWrite((0x400 + i) ,i); _acRegWrite(REG_CFG1_RW,0x8f80); //0x8f80 4 CPLD邏輯部分 在該系統(tǒng)中,PCI9052采用的是ISA模式。對(duì)于ISA模式,首先必須確保硬件按照Datasheet上所說的進(jìn)行配置,其次是EPROM內(nèi)容的編寫。EPROM內(nèi)容最重要的就是LAS0RR、LAS1RR、LAS0BA、LAS1BA、CS0BASE和CS1BASE。它們分別對(duì)應(yīng)于Local Configuration Registers偏移值為00h、04h、14h和18h。LAS0RR定義了內(nèi)存地址空間大小,如0x1fff,那么它的值應(yīng)為0xFFFE000;LAS1RR定義了IO地址空間大小,如0x3f,那么它的值應(yīng)為0xFFFFFC1;LAS0BA為內(nèi)存地址的基地址,也就是訪問外部設(shè)備用的基地址,如0xD0001,表示外部設(shè)備內(nèi)存基地址為0xD0000;LAS1BA為IO地址的基地址,也就是訪問外部設(shè)備用的IO基地址,如0x201,表示外部設(shè)備內(nèi)存基地址為0x200。CS0BASE和CS1BASE根據(jù)基地址和地址范圍來定義。具體請(qǐng)參考PCI9052數(shù)據(jù)手冊(cè)。 要訪問外部設(shè)備(如基地址為0x200),PCI9052與外部設(shè)備之間就必須有相應(yīng)的邏輯控制以使能夠訪問到外部設(shè)備。在PC機(jī)端只需要訪問PCI配置寄存器讀取的局部地址空間0、1即可。因?yàn)镮SA->PCI之間的轉(zhuǎn)換是PCI9052自動(dòng)完成的。對(duì)于DDC61580,需要控制的信號(hào)有:/SELECT、/STRBD、MEM//REG、RD//WR、/MSTCLR、/READY;而對(duì)于PCI9052則需要/MEMRD、/MEMWR、/IORD、/IOWR、LRESET、CHRDY以及需要的地址信號(hào),至于所需要的地址信號(hào),我們可以和ISA總線進(jìn)行地址譯碼一樣。 懂得了上述PCI9052和DDC61580之間的邏輯關(guān)系,要表達(dá)出來就很容易了。具體的代碼在此就不寫了。 5 注意 在硬件設(shè)計(jì)上,必須嚴(yán)格按照DDC61580和PCI9052說明書上進(jìn)行相關(guān)引腳的處理。比如對(duì)于DDC61580工作有幾種模式,必須正確設(shè)置;而PCI9052 EEPROM內(nèi)容的編寫也一定要正確。 linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論