80C152单片机上HDLC通信规程中的应用

徐卓农 张永忠

  摘要:80C152单片机的工作原理和特点及其在HDLC通信规程中的应用,给出了它的编程方法,并对其系统误码率进行了分析。

  关键词:全局串行通道 HDLC规律 CRC差错检验

  80C152是一种基于MCS-51的高集成度8位微控制器,也是一种通用通信控制器。它既适用于外围系统或器件的智能管理,也适用于低成本,高速串行通信场合。80C152是80C51的派生产品,保留了80C51的所有功能;增加了新的功能和外围电路,包括:一种叫做全局串行通道(GSC)的高速多协议串行通讯接口,两个直接存储器存取(DMA)通道,HOLD/HLDA总线控制,第5、6、7个I/O口。较大的片内RAM容量。因而特别适用于综合业务数字网(ISDN)、局域网和用户定义的串行多机系统。

  1 80C152的主要特性与结构

  80C152的主要特性如下:

  (1)MCS-51兼容的UART;

  (2)多种省电工作方式;

  (3)可寻址64K字节数据存储器;

  (4)可寻址64K字节程序存储器;

  (5)两个通用定时/计数器;

  (6)多协议串行通信I/O口(最大2.048Mbps/2.4Mbps),支持CSMA/CD和SDLC/HDLC,用户定义协议;

  (7)全双工/半双工通信;

  (8)256字节片内RAM;

  (9)两个片内DMA通道;

  (10)保持/响应(HOLD/HLDA)总线控制;

  (11)7个I/O口;

  (12)58个SFR;

  (13)11个中断源,除包含80C51的5个中断源外,新增的6个中断源用于全局串行通道。

  上述(1)~(5)是与80C51相同的特性,(6)~(13)是80C152所特有或比80C51提高的特性。

  其结构简图如图1所示。

  2 全局串行通道

  全局串行通道(GSC)是一个多协议、高性能的串行接口,用作通信控制器。GSC接口支持同步数据链路控制(SDLC)、具有冲突检测的载波监听多址访问(CSMA/CD)、用户客义协议和高速数据链路控制(HDLC)协议的子集。GSC功能包括:地址识别、冲突解决、CRC产生、标志产生、自动重发送和硬件应答特性。在使用片内时钟时可实现高至2Mbps数据速率,在使用外部时钟可实现高至2.4Mbps数据速率。在使用串行通道的应用中,GSC可实现国际标准化组织(ISO)参考模型中所描述的开放系统互连(OSI)的数据链数层和物理链路层。

  2.1 GSC通道的DMA服务

  有两种方法来控制GSC:一是CPU控制;二是DMA控制。在用户软件处理一些任务时(如装入TFIFO、读RFIFO、检查状态标志、发送过程一般跟踪),采用CPU控制。当任务数据增加及使用较高的数据速率。CPU所需开销成为主要时间消耗,最后,会达到CPU花费100%的时间去响应GSC请求。DMA通道可由用户软件设置为由DMA控制器来处理GSC数据传送。80C152有两个DMA通道,一个通道用于接收,一个通道用于发送。使用DMA通道时,CPU可省去为GSC缓冲器基本服务所需的时间。DMA通道可提供的服务类型为:装入TFIFO、从RFIFO中移出数据、在收发结束时通千CPU和响应一定的出错条件。在使用DMA通道时,准备串行发送的数据源或目的可以是内部存储器、外部数据存储器或任何SFR。对DMA和GSC寄存器进行初始化手的唯一任务是允许适当地中断并通知DMA控制器什么时候启动DMA。在DMA启动后,CPU所需做的事就是响应出错条件或等待传送结束。80C152专门为GSC数据传送提供了6个中断源,它们是:GSCRV(GSC接收正确)、GSCRE(GSC接收出错)、GSCTV(GSC发送正确)、GSCTE(GSC发送出错)、DMA0(DMA通道0完成)、DMA1(DMA通道1完成)。

  2.2 80152中的DMA

  80C152包含两个相同的可16位寻址的通用8位DMA通道;DMA0和DMA1。与每个通道相关的有7个SFR。SARLn和SARHn分别保存源地址的低位和高位字节,合在一起构成16位源地址寄存器。DARLn和DARHn分别存储目的地址的低位和高位字节,合在一起构成16位目的地址寄存器。BCRLn和BCRHn分别保存将被传送字节数据地址的低位和高位字节,合在一起成字节计数寄存器。DCONn包含控制和标志位。

  对DMA通道的初始化需设置控制寄存器、源地址和目的地址寄存器。

  控制寄存器DCON的装入值及意义如图2所示。

  DCONn中的DASn(目的地址空间位)和IDAn(目的地址自动加1位)用于指出数据传送的物理目的空间。DCONn中的SASn(源地址空间位)和ISAn(源地址自动加1位)用于指出数据传送的物理源空间。采用DMA控制器来处理GSC数据传送时,当DMA通道用于接收服务时,首先将接收机传送来的数据自动送入到接收缓冲器RFIFO中,其源地址寄存器应置成RFIFO地址(SARHN=x x H,SARLN=0F4H);然后,将接收缓冲器中的数据传送到目的地址指定的物理空间,其可以是外部RAM、内部RAM或SFR;最后,对收到的数据进行CRC校验,并通知CPU是否正确接收到该帧数据。当DMA通道用于发送服务时,首先将要发送的数据传送到先入先出发送缓冲器TFIFO中,其目的地址寄存器应置成TFIFO地址(DARHN=xxH,DARLN=85H);然后,将先入先出发送缓冲器TFIFO中的数据传送给发射机;最后,对发送出去的数据进行CRC校验,并通知CPU是否正确发送了该帧数据。

  DCONn中的DM(请求方式位)和TM(传送方式位)用于选择DMA的工作方式。当DMA服务于全局串行通道(GSC)时,应采用串行口请求方式。当DCONn中的GO位置1时,将启动DMA通道工作于全局串行传输方式。当全局串行口接收或发送完一帧数据后,DCONn中的DONE位被置1,并将该信号传送给CPU来产生中断。

  3 HDLC操作

  高级数据链路控制(High Data Link Control)规程,简称HDLC规程,是面向位的链路控制规程。它与基本型规程不同,链路的监控功能是通过一定的位组合所表示的命令和响应来实现的,这些命令和响应可以与信息报文一起传送。HDLC规程具有透明传输、可靠性高、传输效率高并具有极大的灵活性等特点。它是由IBM公司开发的通信协议,已广泛应用于工业领域。它基于主/从结构,要求每个从部都有唯一的地址。从部只有在允许通信时才能且只能和主站通信,这就消除了串行线路上由于几个从部同时发送引起冲突的可能 性。其帧结构如图3所示。

  BOF是HDLC的帧开始标志,为01111110。这是HDLC中仅有的两个包含连续6个1的可能组合之一,另一个可能的组合是中止符。这是因为HDLC采用了一种叫做位插入的过程,每发现有连续5个1时在下一位自动插入一个0,接收器在收到连续5个1之后自动删去插入的0。所有位插入和位删除操作均由GSC完成。BOF除了标志帧的开始,还用作时钟同步和决定地址与控制字位置的参考点。

  ADDRESS的地址字段,用于表示报文发往何站。每个从站必须有唯一的地址,主站必须知道每个从站的指定地址。然而有些报文需要发往一个以上的站,这些报文成为广播地址或群地址报文。全1构成的地址总是自动地被GSC接收,在HDLC中定义为广播地址。群地址是指适用于一个以上站的地址,GSC提供了几个地址屏蔽位,以使GSC接收群地址。如果需要的话,用户软件可以接收所有的地址位,这种屏蔽方式使GSC不加区分地接收所有地址。

  CONTROL是控制段,它用于系统初始化、标志帧的序号,并在报文发送完成后通知从站响应,对以前发送帧进行应答。由于GSC硬件没有提供控制段的管理功能,用户软件担负着控制段的插入、解释和格式化。尾随控制段的信息通常用于报文传输、出错报告和其他各种功能。这些功能由控制段的格式完成,有三种格式可供使用:报文格式、监控格式和无序号格式。

  INFO是报文段,它包含线路中一个器件希望发给另一个器件的报文(数据),其长度可为用户所定,但必须是8位的倍数。报文段由前面的控制段和后面的CRC为接收站所标识。GSC把接收的位通过CRC发生器来决定报文段的末尾。当最后一位或EOF收到后,剩下的位组成CRC。

  CRC是循环冗余检测,是一种普通用于串行通信的错误检测方法。

  4 系统误码率的分析

  80C152提供两种CRC算法:16位和32位算法。在大多数HDLC应用中,16位CRC被使用,支持16位CRC的硬件结构如图4所示。

  16位CRC发生器生成的多项式为:

  G(X)=X16+X12+X5+1 (1)

  CRC工作时,它把收到的位与现行CRC的位15进行异或,放到一个暂存器中。在CRC右移一位时,位15和接收位的异或值再与位4和位11进行异或。暂存器中的位移入位0中。HDLC所需的CRC长度为16位,接收时自动从帧中除去CRC,它不传到CPU。然后把最后16位传往CRC发生器,以保证留下正确的值。检验剩下值是否为001110100001111B(1D0FH)。如不匹配,则产生错误。用户软件允许该中断,从而使CPU可对此进行处理。

  CRC校验可以检测长度不大于16的所有突发错误、所有奇数个错误和两个独立错误,以及其他大量错误图样。其计算公式如下:

  Eerror:数据位中最大偶数位错

  Pe:信道误码率

  根据上述计算公式可得,采用全局串行通道(GSC)来实现HDLC规程的数据传输,其系统误码率及帧漏检概率如表1所示。

  表1 全局串行通道的系统误码率及帧漏检概率

信道误码率

帧漏检概率

系统误码率

10

-3

1.88×10

-3

1.46×10

-5

10

-4

3.03×10

-7

2.30×10

-9

10

-5

3.18×10

-11

2.41×10

-13

10

-6

3.20×10

-15

2.42×10

-17

  5 编程应用实例

  下面介绍采用DMA控制全局串行通道(GSC)来实现HDLC规程的编程方法。在该系统中应用两路DMA通道分别控制数据的收、发,其数据收、发子程序的流程图如图5所示。

  在现代通信系统和计算机网络中,其链路层和物理层多数均采用HDLC规程。采用80C152单片机来实现HDLC规程,具有成本低、硬件结构简单、软件编程容易等特点,又能够保证高速、可靠的数据传输,具有广泛的应用前景。

摘自 单片机与嵌入式系统应用


微信扫描分享本文到朋友圈
扫码关注5G通信官方公众号,免费领取以下5G精品资料

本周热点本月热点

 

  最热通信招聘

  最新招聘信息

最新技术文章

最新论坛贴子