作者Email: cai_yang@etang.com
1 介绍
MIL-STD-1553是为数据总线定义的军方标准。这种数据总线被用来为各种的系统之间的数据和信息的交换提供媒介,它类似“局域网或者LAN”。
1950年至60年代中,航空电子学是简单、独立的系统,航空、通信、飞行控制和显示器由模拟系统构成;信号主要由模拟电压、同-异步信号和接触式开关构成。
MIL-STD-1553总线的传输速度为每秒1M比特,字的长度为20个比特,数据有效长度为16个比特,信息量最大长度为32个字,传输方式为半双工方式,传输协议为命令/响应方式,故障容错有典型的双冗余方式,第二条总线处于热备份状态;信息格式有BC到RT、RT到BC、RT到RT、广播方式和系统控制方式;能挂31个远置终端,终端类型有总线控制器(BC)、远置终端(RT)和总线监听器(BM);传输媒介为屏蔽双绞线,MIL-STD-1553总线耦合方式有直接耦合和变压器耦合。
2 硬件系统
本系统采用PCI总线接口,PCI桥芯片采用PLX公司的PCI9052。1553B总线芯片采用DDC61580,CPLD主要实现DDC61580和PCI9052之间的时序及逻辑控制。硬件框图如图1所示。
详细的逻辑控制信号见CPLD逻辑部分。
2.1 PCI9052的主要特点
PCI9052是PLX技术公司为扩展适配板卡推出的能提供一种混合的高性能PCI总线目标(从)模式的接口芯片。该芯片可与多种局部总线相连,并且支持相对慢的局部总线在PCI总线上的突发传送速率达到132MB/s。9052可编程配置直接与复用或非复用的8/16/32位局部总线相连,8位和16位模式便于ISA卡直接向PCI卡转换。
PCI9052的内部结构中包含了一个独立的ISA逻辑接口,通过这个逻辑接口可以完成由ISA到PCI的平滑转换。它支持8位和16位数据宽度的ISA设备,该设备可以是内存映射,也可以是I/O映射。先读模式用于提高读取数据的吞吐量。一旦ISA接口模式使能,PCI9052只执行单个周期操作。特别指出的是,串行EEPROM必需使ISA接口模式使能。
可以使用两种方法配置PCI9052用于ISA接口模式。方法一:烧写串行EEPROM方法。使用烧写器,将数据写入串行EEPROM,参照PCI9052的DataSheet来写入恰当的数据。需要注意的是,对于ISA模式,LRESET引脚必须始终为高电平,并确认MODE引脚置为0,处于非复用模式。
方法二:热配置方法。从PCI总线通过PCI9052芯片来烧写串行EEPROM。该方法需要注意的是,LRESET引脚的极性在ISA模式时由低变为高,并确认MODE引脚置为低。
当为ISA接口模式配置时必须注意以下几点:(1)存取ISA接口引脚时要参照PCI9052引脚的C/ISA模式引脚图来连线。(2)空间0分配给ISA接口的内存存取。(3)空间1分配给ISA接口的I/O存取。(4)无论空间0的局部地址处于CS0#范围还是空间1的局部地址处于CS1#范围,ISA存取均有效。(5)标准的从周期可以使用空间2、空间3和串行EEPROM来存取。
2.2 DDC61580的主要特点
DDC61580具有以下特点:
● 全兼容MIL-STD-1553接口
● 灵活的处理器/内存接口
● 标准的4K×16RAM
● 自动BC重试
● 可编程BC间隔时间
● 灵活的RT数据缓冲区
● 可编程非法区
● 可选择消息监控
● 支持同时RT/Monitor模式
下面将详细介绍BC、RT以及MT模式的内存组织,编程方法等。
2.3 BC模式操作
BC协议支持所有的MIL-STD-1553消息格式,通过编程BC控制字和命令字的T/R*位来确定消息格式。另外,BC控制字还允许选择通道、自测试、重试、中断以及状态字掩码等。BC模式内存映射包含有8个固定的内存位置,即堆栈指针A,B、消息计数器A,B、初始堆栈指针A,B和初始消息计数器A,B。在启动消息帧之前,必须首先初始化堆栈指针和消息计数器。特别应注意的是,BC消息块最大是38个字,比如对于RT->RT传输,它包含32个数据,1个控制字,2个命令字,1个LoopBack字和2个状态字。
2.3.1 BC内存管理
BC内存管理如图2所示。该图说明了堆栈指针包含四个字的消息块描述符,即块状态字,时间标志字,消息间隔时间和消息块地址。块状态字包括消息状态、完成、有效性及总线通道;时间标志字反映了当前消息起始和结束时时间标志寄存器的值,它可以编程为分辨率为2~64us/LSB(2的幂);消息间隔时间指的是当前消息的开始到下一条消息的开始之间的时间;消息块地址提供了指向消息块第一个字的指针。
2.3.2 BC编程
对于BC编程,首先要初始化相应的寄存器以及堆栈指针、消息计数器;然后定义消息的控制字、命令字等;最后启动BC。需要注意的是BC控制字不会在1553总线上传输。BC的消息格式通过编程BC控制字的最低3位来控制。如表1所示。
BC消息帧可以通过查询和中断来进行处理。如果采用查询模式,那么可以查询配置寄存器1、中断状态寄存器、堆栈指针和消息计数器寄存器。另外,每一条BC消息结束后堆栈指针加4,所以如果要读取RT-To-BC的消息,我们应该首先从堆栈指针A中读取当前消息的堆栈指针,然后减4后来分别读出块状态字、时间标志字、消息时间间隔和上一条消息的块地址,最后从此块地址读出接收到的数据。在嵌入式系统软件处理中,我们应尽量采用中断方式。
表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,即远程终端,它包含了所有MIL-STD-1553的格式,双冗余模式编码,内部命令非法,内部格式化的BIT字和错误检测。RT的反映时间大约为4.8us。RT内存管理包含单消息模式,循环缓冲区模式(支持批量数据传输)和双缓冲区模式。通过使用双缓冲区,主机处理器很容易访问最近接收到有效数据块。对于发送、接收或广播子地址,数据块存储缓冲区可以采用单缓冲、双缓冲(两个交替的数据块)和循环缓冲区(可编程大小为128到8192个字)。在增强模式下,ACE提供RT子地址双缓冲区,RT子地址双缓冲区模式给指定的子地址分配了两个32字数据缓冲区,接收到的数据交替的存储在这两个缓冲区中。
2.4.1 RT内存管理
RT内存管理包含单消息模式,循环缓冲区模式(支持批量数据传输)和双缓冲区模式。在此主要介绍循环缓冲区模式,如图3所示。这意味着在我们设置发送、接收或广播的初始地址后,数据块地址从此地址开始到所设置的最大长度(如1024字)进行环绕。这在大批量数据传输中非常有效,它可以减轻处理器的负荷,我们在处理时可以设置循环缓冲区Rollover中断来一次性读取数据。
2.4.2 RT子地址控制字
在增强RT内存管理方式下,32个子地址控制字控制了各自的内存管理和中断。对于每一个子地址控制字,发送、接收和广播各5位控制内存大小及中断,第15位用来控制使能子地址双缓冲区。子地址控制字位如表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) |
注意,对于发送子地址,我们可以选择使用单缓冲或循环缓冲内存方式,而双缓冲模式则不用于发送子地址。
2.4.3 RT编程
对于RT编程,首先初始化相应的寄存器;然后设置非法区、初始化相应子地址的查询表及子地址控制字;最后设置配置寄存器1使设备处于RT模式。此后该设备就处于在线,只要BC发送一条消息命令与该设备相关,那么该设备就会做出反映。处理RT消息时,这里也有四个字的块描述符,即块状态字、时间标志字、数据块起始地址指针和接收到的16位命令字。与BC模式一样,要读取接收到的消息,我们应该首先从堆栈指针A中读取当前消息的堆栈指针,然后减4后来分别读出块状态字、时间标志字、上一条消息的块地址和命令字(该命令字中包含数据长度、RT地址、子地址以及是发送或接收标志);最后根据数据长度从此块地址读出接收到的数据。
2.5 MT模式操作
MT,即监控模式,它包含三种不同的总线监控模式:(1)字监控;(2)可选择的消息监控;(3)组合的RT/可选择的消息监控模式。本文主要介绍可选择的消息监控方式。消息监控包含一个命令堆栈和一个数据堆栈,它们位于RAM中固定的位置。
2.5.1 消息监控格式
在数据堆栈中的消息格式取决于要处理的消息类型。BC-To-RT命令传输会把命令字存储在监控命令字堆栈中,数据跟随在接收到的RT状态字后面一起存储在监控数据堆栈中。注意,读取到的监控消息需要:块状态字(用来决定消息是否是RT-To-RT传输),命令字(用来决定消息格式和字数,如发送、接收、模式编码、广播等),数据指针。
2.5.2 MT编程
对于MT编程,首先初始化相应寄存器及配置寄存器1来使该设备处于MT模式;然后初始化监控命令堆栈指针和数据堆栈指针,初始化可选择的监控查询表;最后启动MT。中断处理时,首先读取中断状态寄存器,判断是否是EOM中断;其次从命令字堆栈所初始化的堆栈地址开始读取块状态字、时间标志字、数据指针及命令字;最后从数据指针所指的地址中读取状态字和数据。注意,此后堆栈指针应该加4,一直到1K环绕。
3 软件部分
该软件部分主要工作在VxWorks嵌入式操作系统中,软件的任务首先是通过PCI总线查找PCI9052的存在与否,然后获取IO、内存以及中断资源以供驱动程序使用。软件的主要任务就是初始化DDC61580相关寄存器以及内存,并使之工作于其中一种模式(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逻辑部分
在该系统中,PCI9052采用的是ISA模式。对于ISA模式,首先必须确保硬件按照Datasheet上所说的进行配置,其次是EPROM内容的编写。EPROM内容最重要的就是LAS0RR、LAS1RR、LAS0BA、LAS1BA、CS0BASE和CS1BASE。它们分别对应于Local Configuration Registers偏移值为00h、04h、14h和18h。LAS0RR定义了内存地址空间大小,如0x1fff,那么它的值应为0xFFFE000;LAS1RR定义了IO地址空间大小,如0x3f,那么它的值应为0xFFFFFC1;LAS0BA为内存地址的基地址,也就是访问外部设备用的基地址,如0xD0001,表示外部设备内存基地址为0xD0000;LAS1BA为IO地址的基地址,也就是访问外部设备用的IO基地址,如0x201,表示外部设备内存基地址为0x200。CS0BASE和CS1BASE根据基地址和地址范围来定义。具体请参考PCI9052数据手册。
要访问外部设备(如基地址为0x200),PCI9052与外部设备之间就必须有相应的逻辑控制以使能够访问到外部设备。在PC机端只需要访问PCI配置寄存器读取的局部地址空间0、1即可。因为ISA->PCI之间的转换是PCI9052自动完成的。对于DDC61580,需要控制的信号有:/SELECT、/STRBD、MEM//REG、RD//WR、/MSTCLR、/READY;而对于PCI9052则需要/MEMRD、/MEMWR、/IORD、/IOWR、LRESET、CHRDY以及需要的地址信号,至于所需要的地址信号,我们可以和ISA总线进行地址译码一样。
懂得了上述PCI9052和DDC61580之间的逻辑关系,要表达出来就很容易了。具体的代码在此就不写了。
5 注意
在硬件设计上,必须严格按照DDC61580和PCI9052说明书上进行相关引脚的处理。比如对于DDC61580工作有几种模式,必须正确设置;而PCI9052 EEPROM内容的编写也一定要正确。