APP下载

1553B总线远程终端的一种设计

2014-12-01姜晓庄

科技创新导报 2014年28期
关键词:堆栈指针寄存器

姜晓庄

摘 要:该文首先简要介绍了MTL-STD-1553B总线情况,然后介绍了某产品的总线设计,该产品是在BU-61580的基础上设计的总线的远程中端(RT);详细介绍了该产品的设计方法,并针对该产品总线消息帧特点,着重介绍了BU-61580消息堆栈的设计。经验证,产品能可靠地完成与总线控制器(BC)的通信。

关键词:MTL-STD-1553B RT 远程终端 消息

中图分类号:TP4 文献标识码:A 文章编号:1674-098X(2014)10(a)-0051-04

A Design of MSL-STD-1553Bs Remote Terminal

JIANG Xiaozhuang

(China Airbome Missile Academy,Luoyang Henan,471009,China)

Abstract:This paper introduces the situation MSL-STD-1553B first,then introduces the bus design of one product,it is an remote terminal(RT),designed based on BU-61580.Then introduces the design method of the product in detail,and focus on the design of message stack according to the characteristics of the product. After verification,the product can communication with BUS CONTROLLER reliably.

Key words:MTL-STD-1553B RT remote terminal message

随着计算机计数的发展,航空电子综合化也在飞速的发展,综合化系统中的每个子系统都通过总线发送和接收消息,现代航空电子综合化系统通常采用MTL-STD-1553B多路传输数据总线通讯系统,MTL-STD-1553B通信网络系统包括终端和电缆等,总线的传输速度1M比特。终端类型有总线控制器(BC)、远程终端(RT)和总线监视器(BM)。

BU-61580是美国DDC公司生产的MTL-STD-1553B总线协议芯片,可以分别作为BC/RT/MT。它具有灵活的处理器/存储器接口、帧自动重复总线控制、自动重试总线控制、可靠性高等特点,能满足各类应用环境的要求。本文介绍的是一种远程终端(RT)的设计。

1 系统概述

该产品采用dsp(TMS320F240)加BU-61580进行总线设计,设计完成后,该产品可以作为通信系统的远程终端(RT)进行工作。

该产品总线接口协议有如下特点:该系统总线消息分为周期消息和事件消息,周期消息和事件消息以信息帧的形式发送,每帧发送计数到的周期消息和需要发送的事件消息。为了适应该总线消息的特点,产品作为远程终端对BU-61580消息接收响应进行了特殊的优化设计。

该产品总线部分的功能设计主要由两部分组成,硬件设计和软件设计。

2 硬件设计

通过硬件连接,BU-61580的寄存器和数据空间被映射为dsp的外扩存储器,dsp通过访问和修改其外部存储空间,完成对BU-61580的设置及总线数据读写工作,其硬件链接如图1所示。

BU-61580主要管脚设计有以下内容:

clock in:接16 M时钟。

MSTCLR:控制器复位,上电后至少100ns的低电平。

D15~D0:直接与dsp数据线D15~D0连接。

A15~A0:BU-61580的A11~A0接dsp的A11~A0,A15~A12悬空。

SELECT及MEM/REG:dsp的A15~A12译码作为SELECT和MEM/REG,完成地址空间映射dsp的0x8000和0x9000映射为61580的数据空间和寄存器空间的起始地址(此处若仅使用数据空间,则在译码时将dsp的DS作为译码条件之一)。

RD/WR:读写有效信号,直接与dsp 的RD/WR连接。

STRBD:与SELECT一起初始化控制主处理器与BU-61580的数据传输。此处直接与dsp的STRBD连接。

READYD:与主机的握手信号,高电平标识地址线数据线占用。可通过译码后送dsp连接,在译码时可加入SELECT等信号作为译码条件。

INT:芯片中断,本文直接连接dsp外部中断1。

TRIGGER_SEL:在16bit缓存模式下,无连接。

MSB/LSB:在缓存模式下,MSB/LSB用来说明哪一个比特是当前被传输的。M S B/L S B的逻辑功能由POLARITY_SEL输入控制,只用于在8bit缓存模式下。此设计不用,无连接。

ADD_LAT:CPU地址占用。此处置高电平。

16bit/8bit:传输模式选择。如果是逻辑1,表示16bit,反之则为8bit。该文为逻辑1,置高电平。

POLARITY_SEL:POLARITY_SEL读极性选择,该文选择与dsp读写相同,置高电平。

ZERO_WAIT:在缓存模式下,用于选择零状态模式和非零状态模式,这里置低电平,不需要确认握手信号的连接。

TRANSPARENT/BUFFERED:选择透明模式或者缓存模式,该文选缓存模式,置低电平。

SSFLAG/EXT_TRIG:子系统标志或外部触发输入,该文不用,无连接。endprint

TAG_CLK:外部时间标签时钟,该文不使用外部时间标签时钟。无连接。

TX/RXA TX/RXB:总线通道A和B,经过耦合器后接出。

RTAD4-RTAD0及RTADP:终端地址及奇校验设置,此处由上位机设置。

3 软件设计

软件主要有两部分组成,主程序和中断处理程序。

主程序完成dsp的初始化、61580初始化、根据接收的消息标志,完成消息处理,以及根据需要更新需要发送的消息,如图2所示。关于dsp的初始化此处不再详细描述,重点介绍61580初始化。

消息中断处理程序完成已接收消息的标志置位,对于需要及时处理的消息,在中断中完成处理,详述见下文。

3.1 BU-61580芯片初始化

该产品总线通信协议有以下特点:消息分为两类,周期类消息、事件消息;周期类消息每个周期打包发送;消息可双通道通信;对于不同时间,同一个子地址消息,重点考虑最新的消息内容。

根据上述协议特点,对BU-61580进行如下设置:RT增强模式、单消息模式、消息结束中断等。

其具体工作流程如下:dsp上电后,由dsp通过访问61580的寄存器空间(本文中,其空间映射为dsp的0x9000地址为起始的数据空间)完成61580的工作模式设置。

具体寄存器设置,可见如下代码:

/*定义BU-61580寄存器空间基地址*/

unsigned int *pAceReg= (unsigned int *)0x9000;

/*BU-61580寄存器初始化*/

*(pAceReg+3)=0x0001;

* pAceReg=0x2013;

*(pAceReg+1)=0x8f80;

*(pAceReg+2)=0x8410;

*(pAceReg+7)=0x8080;

*(pAceReg+8)=0x0008;

*(pAceReg+9)=0x0000;

dsp通过访问61580的数据空间(映射为dsp的0x8000地址为起始的数据空间),完成堆栈指针设置,Stack Pointer A的设置(本文不使用堆栈B),查询表设置(分配发送数据空间映射,分配接收数据的空间映射,子地址控制字配置:发送、接收消息结束中断),待发送消息的初始化等,具体代码参考:

/*定义BU-61580数据空间基地址*/

unsigned int * pAceMem= (unsigned int *)0x8000;

/* BU-61580数据空间初始化*/

/*清空数据空间*/

……

/*配置数据空间*/

*(pAceReg+0x0100) = 0x0000; /*堆栈指针A配置*/

/*配置查询表*/

for(i=0;i<0x60;i++)

{

*(pAceReg+0x0140+i) = 0x0400+i*32;

}

for(i=0;i<0x20;i++)

{

*(pAceReg+0x01A0+i) = 0x0420;

}

/*初始化发送消息*/

……

3.2 消息中断处理设计

在初始化中将BU-61580的中断响应设置为消息结束中断,所以在每次完成消息的接受或发送后,BU-61580都会向dsp发送中断请求,当dsp收到中断请求后,产生中断并进入中断处理程序,对于需要立即处理的消息,在中断内直接处理,对以处理量较大消息设消息标志,放主程序处理,主程序根据中断标志处理数据。

在进入中断处理程序后,首先需要进行的工作是从消息堆栈中读出消息描述,根据消息描述进行标志置位及消息处理。在从消息堆栈中读取消息时需要注意以下几个问题。

(1)消息堆栈长度为0x100、每个消息描述长度为4,可存储64个消息描述,当消息描述超过64时会产生溢出并循环覆盖,当接收将要溢出的最后一帧消息后,其堆栈指针会从0x0fc变为0x000,此时进行消息描述读取时需注意。

(2)当1553中断请求未能及时响应,而再次接收到消息时,可能出现两种情况,第一种是,当dsp相应中断,准备去处理第一个消息时,第二个消息已经接收完毕,此时BU-61580的消息堆栈指针指向第二个消息的栈顶。若直接读取堆栈指针进行数据处理可能将前一个消息丢失;第二种情况是,当dsp响应中断,准备去处理第一个消息时,第二个消息正在接收,此时61580的消息堆栈指针指向第二个消息的栈顶。若直接读取堆栈指针进行数据处理的时不仅会丢失前一个消息,而且可能由于第二个消息未接收完毕,处理信息时还是旧信息,而有可能将最新的消息丢失。

针对上述两个问题,对消息处理进行以下设计:设置指针变量PreStackTop储存上一次处理消息时的栈顶,当有新消息时读取消息堆栈指针存放至StackTop,每一次中断都循环判断PreStackTop与StackTop是否相等,不相等时,根据PreStackTop读取并处理消息,然后将PreStackTop加4(若PreStackTop加4后为0x100则将PreStackTop清零),循环处理,直至与StackTop相等,同时在进行消息处理前首先判断消息是否接收完成,若未完成则结束中断处理,等待下一次中断处理。原理及程序流程见图3和图4。

4 结语

为了实现1553B总线通信,本文设计了一种基于dsp加61580的总线远程终端,可以作为总线终端进行通信,经测试该系统能较好地完成同总线控制器(BC)的正常通信,并且在消息量较大的情况下也能稳定工作。本文介绍了该系统硬件和软件的详细设计内容,具有较实用的参考价值。

参考文献

[1] 伏鹍,陈绍炜.61580芯片与DSP芯片的连接关系分析[J].信息安全与通信保密,2009(3):82-84.

[2] 顾骧.用于1553总线控制器的存储单元设计[J].电子科技大学,2003,32(3).

[3] 林强.dsp在1553总线接口技术中的应用[J].微计算机应用,2004,25(3).

[4] MSL-STD-1553A/B NOTICE 2 RT and BC/RT/MT,ADVANCED COMMUNICATION ENGINE (ACE)[Z].endprint

TAG_CLK:外部时间标签时钟,该文不使用外部时间标签时钟。无连接。

TX/RXA TX/RXB:总线通道A和B,经过耦合器后接出。

RTAD4-RTAD0及RTADP:终端地址及奇校验设置,此处由上位机设置。

3 软件设计

软件主要有两部分组成,主程序和中断处理程序。

主程序完成dsp的初始化、61580初始化、根据接收的消息标志,完成消息处理,以及根据需要更新需要发送的消息,如图2所示。关于dsp的初始化此处不再详细描述,重点介绍61580初始化。

消息中断处理程序完成已接收消息的标志置位,对于需要及时处理的消息,在中断中完成处理,详述见下文。

3.1 BU-61580芯片初始化

该产品总线通信协议有以下特点:消息分为两类,周期类消息、事件消息;周期类消息每个周期打包发送;消息可双通道通信;对于不同时间,同一个子地址消息,重点考虑最新的消息内容。

根据上述协议特点,对BU-61580进行如下设置:RT增强模式、单消息模式、消息结束中断等。

其具体工作流程如下:dsp上电后,由dsp通过访问61580的寄存器空间(本文中,其空间映射为dsp的0x9000地址为起始的数据空间)完成61580的工作模式设置。

具体寄存器设置,可见如下代码:

/*定义BU-61580寄存器空间基地址*/

unsigned int *pAceReg= (unsigned int *)0x9000;

/*BU-61580寄存器初始化*/

*(pAceReg+3)=0x0001;

* pAceReg=0x2013;

*(pAceReg+1)=0x8f80;

*(pAceReg+2)=0x8410;

*(pAceReg+7)=0x8080;

*(pAceReg+8)=0x0008;

*(pAceReg+9)=0x0000;

dsp通过访问61580的数据空间(映射为dsp的0x8000地址为起始的数据空间),完成堆栈指针设置,Stack Pointer A的设置(本文不使用堆栈B),查询表设置(分配发送数据空间映射,分配接收数据的空间映射,子地址控制字配置:发送、接收消息结束中断),待发送消息的初始化等,具体代码参考:

/*定义BU-61580数据空间基地址*/

unsigned int * pAceMem= (unsigned int *)0x8000;

/* BU-61580数据空间初始化*/

/*清空数据空间*/

……

/*配置数据空间*/

*(pAceReg+0x0100) = 0x0000; /*堆栈指针A配置*/

/*配置查询表*/

for(i=0;i<0x60;i++)

{

*(pAceReg+0x0140+i) = 0x0400+i*32;

}

for(i=0;i<0x20;i++)

{

*(pAceReg+0x01A0+i) = 0x0420;

}

/*初始化发送消息*/

……

3.2 消息中断处理设计

在初始化中将BU-61580的中断响应设置为消息结束中断,所以在每次完成消息的接受或发送后,BU-61580都会向dsp发送中断请求,当dsp收到中断请求后,产生中断并进入中断处理程序,对于需要立即处理的消息,在中断内直接处理,对以处理量较大消息设消息标志,放主程序处理,主程序根据中断标志处理数据。

在进入中断处理程序后,首先需要进行的工作是从消息堆栈中读出消息描述,根据消息描述进行标志置位及消息处理。在从消息堆栈中读取消息时需要注意以下几个问题。

(1)消息堆栈长度为0x100、每个消息描述长度为4,可存储64个消息描述,当消息描述超过64时会产生溢出并循环覆盖,当接收将要溢出的最后一帧消息后,其堆栈指针会从0x0fc变为0x000,此时进行消息描述读取时需注意。

(2)当1553中断请求未能及时响应,而再次接收到消息时,可能出现两种情况,第一种是,当dsp相应中断,准备去处理第一个消息时,第二个消息已经接收完毕,此时BU-61580的消息堆栈指针指向第二个消息的栈顶。若直接读取堆栈指针进行数据处理可能将前一个消息丢失;第二种情况是,当dsp响应中断,准备去处理第一个消息时,第二个消息正在接收,此时61580的消息堆栈指针指向第二个消息的栈顶。若直接读取堆栈指针进行数据处理的时不仅会丢失前一个消息,而且可能由于第二个消息未接收完毕,处理信息时还是旧信息,而有可能将最新的消息丢失。

针对上述两个问题,对消息处理进行以下设计:设置指针变量PreStackTop储存上一次处理消息时的栈顶,当有新消息时读取消息堆栈指针存放至StackTop,每一次中断都循环判断PreStackTop与StackTop是否相等,不相等时,根据PreStackTop读取并处理消息,然后将PreStackTop加4(若PreStackTop加4后为0x100则将PreStackTop清零),循环处理,直至与StackTop相等,同时在进行消息处理前首先判断消息是否接收完成,若未完成则结束中断处理,等待下一次中断处理。原理及程序流程见图3和图4。

4 结语

为了实现1553B总线通信,本文设计了一种基于dsp加61580的总线远程终端,可以作为总线终端进行通信,经测试该系统能较好地完成同总线控制器(BC)的正常通信,并且在消息量较大的情况下也能稳定工作。本文介绍了该系统硬件和软件的详细设计内容,具有较实用的参考价值。

参考文献

[1] 伏鹍,陈绍炜.61580芯片与DSP芯片的连接关系分析[J].信息安全与通信保密,2009(3):82-84.

[2] 顾骧.用于1553总线控制器的存储单元设计[J].电子科技大学,2003,32(3).

[3] 林强.dsp在1553总线接口技术中的应用[J].微计算机应用,2004,25(3).

[4] MSL-STD-1553A/B NOTICE 2 RT and BC/RT/MT,ADVANCED COMMUNICATION ENGINE (ACE)[Z].endprint

TAG_CLK:外部时间标签时钟,该文不使用外部时间标签时钟。无连接。

TX/RXA TX/RXB:总线通道A和B,经过耦合器后接出。

RTAD4-RTAD0及RTADP:终端地址及奇校验设置,此处由上位机设置。

3 软件设计

软件主要有两部分组成,主程序和中断处理程序。

主程序完成dsp的初始化、61580初始化、根据接收的消息标志,完成消息处理,以及根据需要更新需要发送的消息,如图2所示。关于dsp的初始化此处不再详细描述,重点介绍61580初始化。

消息中断处理程序完成已接收消息的标志置位,对于需要及时处理的消息,在中断中完成处理,详述见下文。

3.1 BU-61580芯片初始化

该产品总线通信协议有以下特点:消息分为两类,周期类消息、事件消息;周期类消息每个周期打包发送;消息可双通道通信;对于不同时间,同一个子地址消息,重点考虑最新的消息内容。

根据上述协议特点,对BU-61580进行如下设置:RT增强模式、单消息模式、消息结束中断等。

其具体工作流程如下:dsp上电后,由dsp通过访问61580的寄存器空间(本文中,其空间映射为dsp的0x9000地址为起始的数据空间)完成61580的工作模式设置。

具体寄存器设置,可见如下代码:

/*定义BU-61580寄存器空间基地址*/

unsigned int *pAceReg= (unsigned int *)0x9000;

/*BU-61580寄存器初始化*/

*(pAceReg+3)=0x0001;

* pAceReg=0x2013;

*(pAceReg+1)=0x8f80;

*(pAceReg+2)=0x8410;

*(pAceReg+7)=0x8080;

*(pAceReg+8)=0x0008;

*(pAceReg+9)=0x0000;

dsp通过访问61580的数据空间(映射为dsp的0x8000地址为起始的数据空间),完成堆栈指针设置,Stack Pointer A的设置(本文不使用堆栈B),查询表设置(分配发送数据空间映射,分配接收数据的空间映射,子地址控制字配置:发送、接收消息结束中断),待发送消息的初始化等,具体代码参考:

/*定义BU-61580数据空间基地址*/

unsigned int * pAceMem= (unsigned int *)0x8000;

/* BU-61580数据空间初始化*/

/*清空数据空间*/

……

/*配置数据空间*/

*(pAceReg+0x0100) = 0x0000; /*堆栈指针A配置*/

/*配置查询表*/

for(i=0;i<0x60;i++)

{

*(pAceReg+0x0140+i) = 0x0400+i*32;

}

for(i=0;i<0x20;i++)

{

*(pAceReg+0x01A0+i) = 0x0420;

}

/*初始化发送消息*/

……

3.2 消息中断处理设计

在初始化中将BU-61580的中断响应设置为消息结束中断,所以在每次完成消息的接受或发送后,BU-61580都会向dsp发送中断请求,当dsp收到中断请求后,产生中断并进入中断处理程序,对于需要立即处理的消息,在中断内直接处理,对以处理量较大消息设消息标志,放主程序处理,主程序根据中断标志处理数据。

在进入中断处理程序后,首先需要进行的工作是从消息堆栈中读出消息描述,根据消息描述进行标志置位及消息处理。在从消息堆栈中读取消息时需要注意以下几个问题。

(1)消息堆栈长度为0x100、每个消息描述长度为4,可存储64个消息描述,当消息描述超过64时会产生溢出并循环覆盖,当接收将要溢出的最后一帧消息后,其堆栈指针会从0x0fc变为0x000,此时进行消息描述读取时需注意。

(2)当1553中断请求未能及时响应,而再次接收到消息时,可能出现两种情况,第一种是,当dsp相应中断,准备去处理第一个消息时,第二个消息已经接收完毕,此时BU-61580的消息堆栈指针指向第二个消息的栈顶。若直接读取堆栈指针进行数据处理可能将前一个消息丢失;第二种情况是,当dsp响应中断,准备去处理第一个消息时,第二个消息正在接收,此时61580的消息堆栈指针指向第二个消息的栈顶。若直接读取堆栈指针进行数据处理的时不仅会丢失前一个消息,而且可能由于第二个消息未接收完毕,处理信息时还是旧信息,而有可能将最新的消息丢失。

针对上述两个问题,对消息处理进行以下设计:设置指针变量PreStackTop储存上一次处理消息时的栈顶,当有新消息时读取消息堆栈指针存放至StackTop,每一次中断都循环判断PreStackTop与StackTop是否相等,不相等时,根据PreStackTop读取并处理消息,然后将PreStackTop加4(若PreStackTop加4后为0x100则将PreStackTop清零),循环处理,直至与StackTop相等,同时在进行消息处理前首先判断消息是否接收完成,若未完成则结束中断处理,等待下一次中断处理。原理及程序流程见图3和图4。

4 结语

为了实现1553B总线通信,本文设计了一种基于dsp加61580的总线远程终端,可以作为总线终端进行通信,经测试该系统能较好地完成同总线控制器(BC)的正常通信,并且在消息量较大的情况下也能稳定工作。本文介绍了该系统硬件和软件的详细设计内容,具有较实用的参考价值。

参考文献

[1] 伏鹍,陈绍炜.61580芯片与DSP芯片的连接关系分析[J].信息安全与通信保密,2009(3):82-84.

[2] 顾骧.用于1553总线控制器的存储单元设计[J].电子科技大学,2003,32(3).

[3] 林强.dsp在1553总线接口技术中的应用[J].微计算机应用,2004,25(3).

[4] MSL-STD-1553A/B NOTICE 2 RT and BC/RT/MT,ADVANCED COMMUNICATION ENGINE (ACE)[Z].endprint

猜你喜欢

堆栈指针寄存器
Lite寄存器模型的设计与实现
嵌入式软件堆栈溢出的动态检测方案设计*
分簇结构向量寄存器分配策略研究*
基于堆栈自编码降维的武器装备体系效能预测
基于改进Hough变换和BP网络的指针仪表识别
ARM Cortex—MO/MO+单片机的指针变量替换方法
高速数模转换器AD9779/AD9788的应用
一种用于分析MCS-51目标码堆栈深度的方法
一种可重构线性反馈移位寄存器设计
基于堆栈的24点游戏解决方案