网络通信
返回首页

利用Intel8274多协议串行控制器实现基于SDLC协议的串行通讯

2006-05-07 来源:国外电子元器件

    摘要:文章从软、硬件设计的角度分别讨论了利用Intel 8274多协议串行控制器来实现基于同数据链路控制(SDLC)协议的串行通讯,介绍了多协议串行控制Intel 8274的主要特点,给出了Intel 8274和TMS320F206在某雷达项目中实现了串行通讯的硬件电路设计和软件程序。同时指出了使用Intel 8274应注意的问题。

    关键词:SDLC Intel 8274 串行通讯 TMS320F206

最早由IBM公司制定的面向比特型的数据链路控制规程——同步数据链路控制(SDLC)协议由于个有透明传输、可靠性高、传输效率高以及具有很大的灵活性等优点,已被越来越广泛地采用。但由于这种链路协仪功能比较完善,因此实现起来也相对要复杂一些。随着近年来大规模集成电路与微处理机、DSP技术的迅速发展,市场上已经出现了多种实现这一规程的专用芯片,从而使得这种协议的实现发越来越简单,其应用越来越普遍。Intel 8274芯片就是其中比较典型的一种。它是由Intel公司生产的专门为异步、IBM双同步和SDLC/HDLC协议的高速通讯线路与Intel公司的微机机系统的连接而设计的多协议串行控制器(MPSC)。

1 同步数据链路控制(SDLC)协议

同步数据链路控制(SDLC:Synchronous Data Link Control)是由IBM公司制定的一种链路通讯协议,现已成为系统网络结构(SNA)的数据链路控制协议,是目前可靠性和传输较高的最先进的传输控制协议之一。另一种相类似的通讯协议是高级数据链路控制(HDLC)协议。由于SDLC的制定要早于HDLC,同时因为IBM公司也共同参与了HDLC的制定,所以HDLC实际上包含了SDLC,从而使SDLC协议成为HDLC协议的一个子集。

在SDLC协议中,被传输的一组信息数据被称为“帧”。完整的一个帧包含标志字序列字段、数据站地址字段、数据站地址字段、控制字段、信息字段和帧校验序列字段等。标志字序列利用特定的数据组合01111110表示,所有的帧必须以01111110开始,并且以01111110结束。在传输的其它字段中,为了防止出现01111110而使接收方错误的认为是帧结束,SDLC协议采用0插入方法,即当传输的信息数据中出现连续的5个1,就由发送方在这5个1之后插入一个0.接收方在接收数据的时候,如果发现有5个连续的1,就将其后的一个0删去。另外SDLC协议还规定了帧的各个字段必须是以8比特为传输的最小。SDLC能够被广泛应用的另一个原因在于它可以进行严格的差错控制,因为SDLC采用了最为有效的循环冗余校验码(CRC16来)来进行差错控制。

2 Intel 8274多协议串行控制器[1]

Intel 8274具有灵活的体系结构,其主要特点在于只使用很少的软、硬件即可方便地实现多种不同的通讯协议,如异步、字节同步和位同步(HDLC/SLC)等等。

Intel 8274的主要性能指标有:

●可进行异步和同步操作;

●具有两个独立的全双工发送器和接收器;

●与8048/51/85/85/88CPU,8237/57 DMA控制器以及8089I/O处理机完成兼容;

●有4个独立的DMA通道;

●波特率达0~880k波特;

●异步操作:5~8位字符,奇、偶校验或无校验,1、1.5或2个停止位;

●可进行帧格式、越界和奇偶性错误码检测;

●在字节同步时可使内部或外部的字节同步,具有一或两具同步字符,能自动产生和校验循环冗余检码(CRC-16),并可与IBM公司的双同步协议兼容;

●位同步时能产生和识别SDLC/HDLC标志,识别8位地址,自动插入和删除零位,自动产生和校验循环冗余校验码(CCITT)X.25标准兼容。

当Intel 8274用于SDLC工作方式时,在初始化结束后,如果微处理机写放发送启动,则Intel8274处于发送状态。此时Intel 8274将自动发送SDLC同步标志01111110,直至微处理机给出发送信息字段。在发送过程中,Intel 8274能够自动检测信息字段中是否含有连续的5个1,如果有,则在每5个连续1的组成的序列之后自动插入一个0。当发送数据缓冲器和输出移位寄存器均没有可发送的数据位时,Intel 8274就会自动发送两个字节的CRC(循环冗余校验码),以终止该帧。当微处理机写入接收启动命令字后,Intel 8274即处于接收状态,此时,它可自动搜索SDLC标志字,以判断帧的开始。

Intel 8274与微处理机的系统接口的由8个缓冲器组成,表1是其读写操作方式。其中数据缓冲器由A1=0寻址,命令端口由A1=1寻址。命令、参数和状态信息保存在Intel 8274的22个寄存器中。每个通道有8个写寄存器和3个读寄存器。这些信息均可以通过命令端口进行读写。

表1 读写操作方式

CS A1 A0 读操作 写操作
0 0 0 读通道A数据 写通道A数据
0 1 0 读通道A状态 写通道A命令/参数
0 0 1 读通道B数据 写通道B数据
0 1 1 读通道B状态 写通道B命令/参数
1 X X 高阻抗 高阻抗

Intel 8274在使用方式上同样可以有多种灵活的配置方式,如查询、等待、中断和DMA等。

3 串行通讯的硬件实现

由于Intel 8274是专门为了与Intel公司的微型机系统相匹配而设计的,因此该芯片与一些Intel公司的CPU、DMA控制器等可以做到无缝连续。这里介绍的是通过TI公司的DSP芯片TMS320F206来对Intel 8274进行控制所组成通讯系统。

TMS320F206是TI公司新近推出的TMS320C2XX系列DSP,该系列DSP具有非常高的性价比,相对TMS320C2X系列来说,它的指令集可兼容,而速度提高了2~4倍,且价格降低了一半,因而在简单的控制和通讯领域有着非常广泛的应用。

图1是一个由TMS320F206、Intel 8274组成的基于RS-485标准和SDLC协议的串行通讯接口系统的具体结构图。该电路非常简单。图中由TMS320F206充当微处理机来对Intel 8274进行控制,而Intel 8274只使用了其中的一个接收/发送通道,并且由于采用了中断方式,因此,它们之间只有14根连接线(其中控制线4根,数据总线8根,地线总线2根)。

4 串行通讯的软件设计

在以往的Intel 8274的应用中,大部分都是工作在查询模式。虽然查询方式的程序设计简单,但由于必须使用控制芯片(微处理器、DSP)来不断地查询寄存器中的状态标志位,因而不能进行其它工作,这使得整个程序的效率很低。尤其是在实时性要求较强的场合下不太适用。因此,设计时需将Intel 8274工作在中断模式。

在笔者的应用中,该串行通讯的流程首先是TMS320F206需要从另一个同步串行口接收数据,然后,相关部分对该数据进行处理程序通过Intel 8274发送出去。因此Intel 8274只有在同步串行口接收到数据后才处于发送状态,其它时候则处于接收状态。

TMS320F206串行通讯的相关软件如下(未注明寄存器均指B通道寄存器):

Intel 8274初始化程序:

……

splk #0004h,60h ;wr0:复位

out 60h,0003h

splk #0020h,60h ;wr4:SDLC方式

out 60h,0003h

splk #0046h,60h ;wr0:指示寄存器指向wr6

out 60h,0003h

splk #0054h,60h ;wr6:接收匹配地址54h

out 60h,0003h

splk #0097h,60h ;wr0:指示寄存器指向wr7

out 60h,0003h

splk #007eh,60h ;wr7:同步标志7eh

out 60h,0003h

splk #0002h,60h ;A通道wr0

out 60h,0002h

splk #0020h,60h ;A通道wr2:中断方式

out 60h,0002h

splk #0031h,60h ;wr0:指示寄存器指向wr1

out 60h,003h

splk #001ch,60h ;wr1:全部接收中断方式,不启动发送器

out 60h,0003h

splk #0023h,60h ;wr0:指示寄存器指向wr3

out 60h,0003h

splk #00cdh,60h ;wr3:8位接收,接收CRC、接收器启动

out 60h,003h ;地址匹配接收模式

……

下面是切换Intel 8274至发送状态的同步接收中断服务程序中:

……

rco485s:splk #000bh,60h ;485总线转入发送状态

out 60h,iosr

splk #0085h,60h ;wr0:指示寄存器指向wr5

out 60h,0003h

splk #0069h,60h ;wr5:发送CRC、发送器启动

out 60h,0003h

splk #0001h,60h ;wr0:指示寄存器指向wr1

out 60h,0003h

splk #001eh,60h ;wr1:发送中断启动

out 60h,0003h

lacl #0ah ;等待0ah周期循环,

loop: sub #1h ;使发送足够同步标志

nop

bcnd loop,GT

lar ar3,6fh

mar *,ar3 ;置ar3为当前辅助寄存器

out *+,0001h ;发送第一个数据到Intel 8274

……

Intel 8274发送/接收中断服务程序:

……

;Intel 8274接收

r485: lar ar1,70h

mar *,ar1 ;置ar1为当前辅助寄存器

in *+,0001h ;从Intel 8274接收一个数据

……

;Intel 8274发送

s485:mar *,ar3 ;置ar3为当前辅助寄存器

out *+,0001h ;发送一个数据到Intel 8274

……

lacl #60h ;等待60h周期循环,

loop1: sub #1h ;使能发送两个字节CRC

nop ;和至少一个同步标志

5 应用Intel 8274的注意事项

在图1的硬件设计中,必须注意是Intel 8274的TXCB管脚(或TXCA管脚)。由于TXCB管脚在作为Intel 8274的发磅器时钟的同时又是一个输入管脚,而作为485串行通讯数据总线上的发送器时钟要求对于源端是输出管脚,这样,就必须从外部引入一个发送同步时钟CLKT。这是使用Intel 8274时在硬件上应注意的问题。

在软件设计中,第一个要注意的问题是Intel 8274的16个写寄存器的使用问题。在Intel 8274中,每个通道有8个写寄存器和3个读寄存器,但却只有2根地址线。因此该芯片专门设计了一个内部指示寄存器,以专门用于在存取8274命令/状态时选择读/写哪个命令或状态寄存器。该指示寄存器位于WR0寄存器的D2~D0位。上电复位后,指示寄存器的内容为0。因此第一次写入命令寄存器的命令将写入WR0,同时这个命令的低三位写入指示寄存器,并标志着下次将读/取的寄存器号。而指示寄存器的内容在完成读或写操作之后就被复位,因些在读或写一个寄存器之前,都必须先向WR0(指示寄存器)写入一条指令。在上面的程序中,尤其是初始化段,可以明显地看到这一过程。

第二个需要注意的问题是SDLC的同步标志字。SDLC协议规定,在帧起始和结束的时候,必须发送至少1个同步标志01111110。在一般的实际应用中,TMS320F206的时候会远远高于Intel 8274的时候,因此,从同步串行口接收完数据,并将Intel 8274切换至发送状态起,到向Intel 8274发送第一个数据之前,根本来不及让Intel 8274自动发送至少一个SDLC协议的步标志字。为解决这一问题,在实际编程过程中,设计得可有意在它们之间加入一个10个周期左右的循环(虚框内的程序)。同样,从Intel 8174发送完一帧数据之后到切换Intel 8274至接收状态之间,设计也可有意加入一个循环(虚框内的程序)。在这个循环中,Intel 8274首先会自动插入两个字节的CRC循环冗余校验码,然后才暗SDLC的同步标志字,因此这个循环的周期数要大于第一个循环的周期数。这两个循环周期的具体参数与TM320F206和Intel 8274所使用的时钟有关,因此需要设计者在实际系统调试中加以确定。

6 Intel 8274串行通讯系统的应用

在笔者研制的某雷达项目中,要求其中一条通讯线路的信息交换需通过满足RS-485标准和SDLC信息交换规程要求的串行通讯总线来进行。其数据传送速度要求为800kbps,相对不稳定度为10-4。为了满足这些要求,笔者在设计中使用了如图1所示的由TMS320F206为主控制芯片,Intel 8274为串行通讯协议控制芯片所构成的串行通讯接口系统。该系统在调试过程中,从示波器中可以明显地反映出上面所提到的两个循环周期对Intel 8274自动插入SDLC同步标志字的个数的影响。插入这些循环周期并经过调试使该串行口的工作得以正常,从而简单、高效地实现了基于SDLC协议的串行通讯,达到了系统的设计要求。

进入网络通信查看更多内容>>
相关视频
  • 微波毫米波电路分析与设计

  • 天线原理与基本参数

  • Digi-Key: Follow Me 系列(1) 直播回放及答疑记录

  • 无线感测网络

  • 微波五讲

  • 天线原理 哈工大 林澍

精选电路图
  • 简洁的过零调功器电路设计与分析

  • 单稳态控制电路设计与分析

  • 光控电路设计与分析

  • IGBT模块通过控制门极阻断过电流

  • 运算放大器IC741的基本工作原理及在电路中的实现方式

  • 基于TDA1554的立体声放大器电路

    相关电子头条文章