新闻中心

EEPW首页 > 手机与无线通信 > 设计应用 > 1553B总线控制器设计与调试

1553B总线控制器设计与调试

作者:时间:2009-06-25来源:网络收藏

(2)的重试与消息重复:当消息中出现状态地址错,字计数错,同步类型错,校验错时会进行标记,所以程序时应当打开错误检测位。同时由于是多余度总线,当某一个总线出现差错时,系统会根据设定在另外一个BUS上重试,也可以在本条总线重试,所以在程序时要灵活运用。然而对总线上的广播消息,由于这类消息没有状态返回,因此总线重试的意义在这里就没有了。
(3)避免冲突:总线必须考虑到各个终端的响应及处理,在安排通讯时应该避免对同一终端地址连续发送总线消息(针对同一子地址的连续消息发送除外),由于大多数终端的通讯处理是在中断情况下进行的,如果连续发送则有可能使终端丢失消息或者处理冲突,所以总线要给同一终端留下足够的处理时间。
下面是笔者编写的总线程序中的部分代码:
////////////中断函数////////////////////
ViInt32 _stdcall demo_rt_watch_function(ViUInt32 cardnum,ViUInt16 chnum,struct api_int_fifo *sIntFIFO)
{ ViUInt32 tail; // FIFO Tail index
ViUInt32 messno,wordcount,i=0,j=0; // Message number to be updated
ViStatus hr;
API_BC_MBUF api_message;
ViUInt16 rtaddr,subaddr,transrec;
API_RT_MBUF_READ mbuf;
/***********************************************
* Loop on all entries in the FIFO. Get the tail pointer and extract
* the FIFO entry it points to. When head == tail FIFO is empty
******************************************/
tail = sIntFIFO->tail_index;
while (tail != sIntFIFO->head_index )
{
// Extract the buffer ID from the FIFO and read the message from the board
messno = sIntFIFO->fifo[tail].bufferID;
if (sIntFIFO->fifo[tail].event_type==EVENT_BC_MESSAGE)
{
hr=Eph6273_BC_MessageRead(
cardnum,
// (i)card number (0 - based)
chnum,
// (i)channel number (0 - based)
messno,
// (i)index of BC message to read
api_message);
// (o)user's buffer to write message into
tail++;
// Next entry
tail = sIntFIFO->mask_index;
// Wrap the index
sIntFIFO->tail_index = tail;
// Save the index
}
return API_SUCCESS;
}
4 总线系统连接与
总线采用双铰屏蔽线传输,当终端离总线很近时(0.3米)可以直接通过隔离变压器与总线连接,当终端离总线较远(最远不应超过6.1米)时要在变压器与总线之间插入耦合器。这两种方式比较变压器耦合具有更好的抗干扰能力,能用在长距离的通讯上,而直接耦合不利于RT故障的隔离,会因为某一个RT故障造成系统网络的通讯不正常。图1就是一个简单的系统连接图,当然设计者可以根据系统需求在总线上连接更多的终端,也可以挂总线监视器用以监视总线信息。


评论


相关推荐

技术专区

关闭