论文部分内容阅读
摘要:S3C4510B是一种以ARM7TDMI为内核的嵌入式网络微处理器。对S3C4510B的HDLC模块的基本结构和工作原理进行了阐述,对S3C4510B的HDLC控制器驱动程序的基本设计思想及具体实现进行了研究。
关键词:S3C4510B;HDLC;驱动程序
中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)06-11606-03
1 引言
HDLC作为一种基于点到点/多点的数据链路层协议,常常用来连接路由器和网关等网络设备。三星公司生产的S3C4510B微处理器是当前应用非常广泛的嵌入式微处理器,良好的性价比和强大的通信与网络协议处理能力以及丰富的通信接口支持使其非常适合构建VOIP网关;特别是其具有HDLC功能模块,因此可以通过它的一个HDLC接口来为VOIP网关和信令网之间提供链路支持。VOIP作为一种基于IP的数据传输技术,广泛地利用Internet全球互连环境,将传统的PSTN电话网和Internet网络合二为一,因此可以有效地降低系统成本和管理成本。作为一种高效且经济的数据和话音通信方式,它是当前技术研究和开发的热点。本文介绍如何在S3C4510B开发板上实现HDLC控制器的驱动程序,从而为信令网和网关之间提供链路支持。
2 HDLC简介
HDLC是一个在同步网上传输数据并面向位的数据链路层协议,具有透明传输、可靠性高、传输速率高以及灵活性高等特点。它采用点对点或多点(多路播送或一对多)连接的主/从结构,要求每个从站都唯一的地址,从站只有在允许通信时才能且只能和主站通信,这就消除了串行线路上由于几个从站同时发送引起冲突的可能性。其它的通用的二层协议如SS#7、AppleTalk、LAPB、LAPD等都是基于HDLC及其帧结构的。HDLC帧结构如图1所示。
图1 HDLC帧结构
Flag (F):标志位,每个HDLC帧以8位序列(01111110)标志帧的开始和结束,这是HDLC中仅有的两个包含连续六个1的可能组合。为了避免在其它域中出现这种组合,HDLC采用了一种叫作位插入的办法实现组合,即每发现有连接五个1时便在下一位自动插入一个0,接收器在收到连续五个1之后又自动删去插入的0。标志位除了标志帧的开始和结束外,还可用作时钟同步,接收设备不断地搜寻标志位,以实现帧同步,从而保证接收部分对后续字段的正确识别。另外,在帧与帧的空载期间,可以连续发送这种标志序列,用作时间填充。
Address (A) Field:目的地址位,用于指示报文发往何站。每个从站必须有唯一的地址,主站必须知道每个从站的指定地址。全“1”构成的地址在HDLC中定义为广播地址,全“0”构成的地址在
HDLC中定义为无站地址,用于测试数据链路的状态。
Control (C) Field:控制位,用于系统初始化、标志帧的序号,并在报文发送完成后通知从站响应,
对以前发送帧进行应答。尾随控制段的信息通常用于报文传输、出错报告和其它各种功能,这些功能由控制段的格式完成。有三种格式可供使用:报文格式、监控格式和无序号格式。
Information (I) Field:信息域,是可选的。如果信息存在,它必须有8位整数数量的长度。
Frame Check Sequence (FCS) Field:帧校验位,长度为16位,帧校验序列用于对帧进行循环冗余校验,其校验范围从地址字段的第一比特到信息字段的最后一比特的序列,并且规定为了透明传输而插入的“0”不在校验范围内。
HDLC常被用来向X.25、ISDN和帧中继网等提供信令和控制数据链路。
3 S3C4510B及其HDLC模块
S3C4540B是三星公司生产的一种通用的16/32位嵌入式网络控制器。它是以RISC体系结构为基础并在片内集成有微处理器和多种外设接口的专用通信芯片,具有强大的通信和网络协议处理能力,可广泛应用于各种通信和网络产品中。它主要由ARM7TDMI内核、2个通道的HDLC控制器、I2C总线和2个串行通道接口、一个MAC控制模块组成,提供10MHz/100MHz以太网的自适应连接,对于网络产品的开发设计提供了灵活的支持。
S3C4510B的HDLC(High- level Digital Link Controller)控制器拥有2个串行通道。HDLC模块支持符合SDLC标准和HDLC标准的CPU/数据通道接口,包含2个DMA引擎;支持使用对应帧的缓冲区描述符结构,而且可以灵活地配置通道物理编码模式(NRZ,FM,MAN),选择本地或者外部时钟;支持通过锁相环路从接收数据流提取时钟信号。
图2是S3C4510B HDLC控制器功能结构,主要包括总线仲裁单元、DMA控制器、8字(1字=32 bit)的发送接收(Tx/Rx)FIFO、状态/控制寄存器和物理收发器。总线仲裁单元负责向CPU申请系统总线;DMA控制器使用缓冲描述符在无CPU干预下控制数据帧的收发;8字FIFO结构对CPU和串行接口的数据进行立即存储;物理收发器控制HDLC通道的运行模式、编解码等;状态/控制寄存器是运行的核心,程序设计人员通过设置,检测这些寄存器控制数据的收发。
注:A/B为地址总线,D/B为数据总线,C为控制线
图2 S3C4510B的HDLC模块
4 驱动程序的设计思想及其实现
这里选择uClinux作为本CPU板的操作系统。uClinux是一种可移植、可裁减的嵌入式操作系统,以其良好的可靠性和开放性被广泛应用。因此,程序的设计必须按照这个操作系统的结构来构建。本文的主要目的是使用S3C4510B处理器的HDLC功能模块,以支持uClinux操作系统下的HDLC通信,所以程序的设计主要围绕这个目的进行,在此并没有按照传统驱动的模式构建驱动程序,而是直接对硬件进行操作。当驱动程序运行时,首先要进行HDLC通道的初始化,然后才开始执行收发功能,在这当中要加上中断控制。按照这个程序的基本流程,具体的实现分为下面几步
4.1 HDLC通道初始化
HDLC通道的初始化分为七个步骤;①HDLC通道复位,恢复其默认配置;②设置工作模式寄存器(HMODE)来配置HDLC工作模式;③设置控制寄存器(HCON)来控制HDLC通道的工作;④设置中断控制寄存器(HINT)来控制HDLC通道的中断产生;⑤设置站址寄存器(HSAR0-HSAR3)和站址屏蔽寄存器(HMASK),以完成接收操作的地址比较功能;⑥建立DMA方式的发送和接收BUFFER描述符链表结构,并初始化DMA发送BUFFER描述符指针寄存器(HDMATxPTR)和DMA接收BUFFER描述符指针寄存器(HDMARxPTR);⑦使能HDLC通道的收发功能。
4.2 HDLC通道数据发送及中断处理的实现
4.2.1数据发送
DMA方式下HDLC通道的数据发送通过以下几个步骤实现:
(1)读取发送帧描述符指针寄存器HDMATxPTR,得到当前发送帧描述符的地址,进而得到整个发送帧描述符的内容。
(2)得到发送帧描述符中帧数据BUFFER起始地址。
(3)将准备好的HDLC帧拷贝到BUFFER中。
(4)设置当前帧描述符中的相应控制位。
(5)将发送帧描述符的OWERSHIP位设置为DMA所有。
(6)使能HDLC的DMA发送。
完成上面各步骤后,HDLC通道的DMA机制会自动将BUFFER中的数据拷贝到HDLC通道TxFIFO中发送出去。一帧发送完毕后,S3C4510B自动将已使用的发送BUFFER描述符的OWERSHIP位设置为CPU所有,并将帧描述符指针寄存器HDMATxPTR中的内容更新为下一个未使用的发送BUFFER描述符地址。
4.2.2 数据发送的中断处理
当一帧数据通过DMA方式发送完毕,或者发送过程中出现了可引起中断的异常情况,此时软件会进入中断处理程序。引起中断的情况由中断控制寄存器的设置决定。在编程实现中,HDLC通道的中断处理主要完成以下工作:
(1)进入中断后,首先清除S3C4510B中断指示寄存器INTPEND中相应的标志位。
(2)如果DMA发送成功,则进行数据帧发送成功状态计数,并清除HDLC通道状态寄存HSTAT中的相应状态位。如果发送出现异常,则完成相应的异常状态计数,并清除HDLC通道状态寄存器HSTAT中的相应位。其中有两个异常会影响以后的DMA操作,a.发送下冲异常(TxU),发生此异常时,处理器会自动禁止DMA发送功能,因此下一次发送时必须重新使能DMA发送功能;b.下一个发送帧描述符指针为空异常(DTxNL),发生此异常时,说明建立的DMA发送BUFFER描述符链表结构出现了错误,因此需要重新初始化DMA发送BUFFER描述符链表结构。
(3)做完上述处理可关闭HDLC通道的DMA发送功能,等待有数据需要发送时再重新打开,也可以不关闭。
4.3 HDLC通道数据接收及中断处理的实现
4.3.1 数据接收
DMA方式下HDLC通道的数据接收工作主要在HDLC通道初始化和DMA接收中断处理中完成.在编程实现中,HDLC通道数据接收主要完成以下工作:
(1)通道初始化阶段,我们建立并初始化了HDLC接收BUFFER描述符链表结构,并将链表头节点的地址写入到HDLC接收BUFFER描述符指针寄存器HDMARxPTR,这是正确完成DMA方式接收的前提,下面的工作都是在这个前提下自动完成的。
(2)当有数据到来时,DMA机制会从HDMARxPTR指向的接收BUFFER描述符中找到接收BUFFER起始地址,然后把收到的数据写入到BUFFER中。
(3)如果接收无误,S3C4510B自动更新HDMARxPTR寄存器的值,使其指向下一个还未使用的接收BUFFER描述符,以备下一次接收使用。使用过的接收BUFFER描述符的OWERSHIP位将自动设置为CPU所有,因此为了能再次使用这个接收BUFFER描述符,必须将它的OWERSHIP位重置为DMA所有。
4.3.2数据接收的中断处理
DMA方式下HDLC通道接收完一帧数据,或者接收过程中出现了可引起中断的异常情况,此时软件会进入中断处理程序。引起中断的情况由中断控制寄存器的设置决定。在我们的编程中,HDLC通道接收中断处理主要完成以下工作:
(1)进入中断后,首先清除S3C4510B中断指示寄存器INTPEND中相应的标志位。
(2)如果DMA接收正确,则进行数据帧接收成功状态计数,并清除HDLC通道状态寄存器HSTAT中的相应状态位。对接收到的数据帧作相应的处理后,要重新将是用过的接收BUFFER描述符的OWERSHIP位设置为DMA所有。
(3)如果接收出现异常,则完成相应的异常状态计数,并清除HDLC通道状态寄存器HSTAT
中的相应位。其中有两个异常会影响以后的DMA操作,a.DMA接收BUFFER描述符不属于DMA所有(DRxNO);b.DMA接收BUFFER描述符指针空(DRxNL)。发生这两个异常时,说明接收BUFFER描述符双向环形链表结构出现错误,处理器会自动禁止DMA发送功能,因此建议重构接收BUFFER描述符双向环形链表结构并重新使能DMA发送功能。
5 总结
S3C4510B是一款性价比很高的ARM处理器,功能丰富,编程简单,并且可以配合几种嵌入式实时操作系统,如pSOS,NUCLEUS等。我们使用S3C4510B和uClinux操作系统,完成了底层控制软件,经过调试,该软件性能稳定。
随着各种电子,通讯产品对性能要求的日益提高,基于先进的ARM架构的各种32位微处理器也将得到越来越广泛的应用。因此,掌握了ARM处理器的使用和编程方法,必然能在工作中事半功倍,得到良好的结果和收益。
参考文献:
[1]三星公司.著.三星S3C4510B用户手册[M].北京:北京三星公司,1999.
[2]李驹光.ARM应用系统开发详解[M].北京:清华大学出版社,2004.
[3]Alessandr Rubini & Jonathan Corbet.著. 魏永明.等.译.LINUX设备驱动程序设计[M].北京:中国电力出版社,2002.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
关键词:S3C4510B;HDLC;驱动程序
中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)06-11606-03
1 引言
HDLC作为一种基于点到点/多点的数据链路层协议,常常用来连接路由器和网关等网络设备。三星公司生产的S3C4510B微处理器是当前应用非常广泛的嵌入式微处理器,良好的性价比和强大的通信与网络协议处理能力以及丰富的通信接口支持使其非常适合构建VOIP网关;特别是其具有HDLC功能模块,因此可以通过它的一个HDLC接口来为VOIP网关和信令网之间提供链路支持。VOIP作为一种基于IP的数据传输技术,广泛地利用Internet全球互连环境,将传统的PSTN电话网和Internet网络合二为一,因此可以有效地降低系统成本和管理成本。作为一种高效且经济的数据和话音通信方式,它是当前技术研究和开发的热点。本文介绍如何在S3C4510B开发板上实现HDLC控制器的驱动程序,从而为信令网和网关之间提供链路支持。
2 HDLC简介
HDLC是一个在同步网上传输数据并面向位的数据链路层协议,具有透明传输、可靠性高、传输速率高以及灵活性高等特点。它采用点对点或多点(多路播送或一对多)连接的主/从结构,要求每个从站都唯一的地址,从站只有在允许通信时才能且只能和主站通信,这就消除了串行线路上由于几个从站同时发送引起冲突的可能性。其它的通用的二层协议如SS#7、AppleTalk、LAPB、LAPD等都是基于HDLC及其帧结构的。HDLC帧结构如图1所示。
图1 HDLC帧结构
Flag (F):标志位,每个HDLC帧以8位序列(01111110)标志帧的开始和结束,这是HDLC中仅有的两个包含连续六个1的可能组合。为了避免在其它域中出现这种组合,HDLC采用了一种叫作位插入的办法实现组合,即每发现有连接五个1时便在下一位自动插入一个0,接收器在收到连续五个1之后又自动删去插入的0。标志位除了标志帧的开始和结束外,还可用作时钟同步,接收设备不断地搜寻标志位,以实现帧同步,从而保证接收部分对后续字段的正确识别。另外,在帧与帧的空载期间,可以连续发送这种标志序列,用作时间填充。
Address (A) Field:目的地址位,用于指示报文发往何站。每个从站必须有唯一的地址,主站必须知道每个从站的指定地址。全“1”构成的地址在HDLC中定义为广播地址,全“0”构成的地址在
HDLC中定义为无站地址,用于测试数据链路的状态。
Control (C) Field:控制位,用于系统初始化、标志帧的序号,并在报文发送完成后通知从站响应,
对以前发送帧进行应答。尾随控制段的信息通常用于报文传输、出错报告和其它各种功能,这些功能由控制段的格式完成。有三种格式可供使用:报文格式、监控格式和无序号格式。
Information (I) Field:信息域,是可选的。如果信息存在,它必须有8位整数数量的长度。
Frame Check Sequence (FCS) Field:帧校验位,长度为16位,帧校验序列用于对帧进行循环冗余校验,其校验范围从地址字段的第一比特到信息字段的最后一比特的序列,并且规定为了透明传输而插入的“0”不在校验范围内。
HDLC常被用来向X.25、ISDN和帧中继网等提供信令和控制数据链路。
3 S3C4510B及其HDLC模块
S3C4540B是三星公司生产的一种通用的16/32位嵌入式网络控制器。它是以RISC体系结构为基础并在片内集成有微处理器和多种外设接口的专用通信芯片,具有强大的通信和网络协议处理能力,可广泛应用于各种通信和网络产品中。它主要由ARM7TDMI内核、2个通道的HDLC控制器、I2C总线和2个串行通道接口、一个MAC控制模块组成,提供10MHz/100MHz以太网的自适应连接,对于网络产品的开发设计提供了灵活的支持。
S3C4510B的HDLC(High- level Digital Link Controller)控制器拥有2个串行通道。HDLC模块支持符合SDLC标准和HDLC标准的CPU/数据通道接口,包含2个DMA引擎;支持使用对应帧的缓冲区描述符结构,而且可以灵活地配置通道物理编码模式(NRZ,FM,MAN),选择本地或者外部时钟;支持通过锁相环路从接收数据流提取时钟信号。
图2是S3C4510B HDLC控制器功能结构,主要包括总线仲裁单元、DMA控制器、8字(1字=32 bit)的发送接收(Tx/Rx)FIFO、状态/控制寄存器和物理收发器。总线仲裁单元负责向CPU申请系统总线;DMA控制器使用缓冲描述符在无CPU干预下控制数据帧的收发;8字FIFO结构对CPU和串行接口的数据进行立即存储;物理收发器控制HDLC通道的运行模式、编解码等;状态/控制寄存器是运行的核心,程序设计人员通过设置,检测这些寄存器控制数据的收发。
注:A/B为地址总线,D/B为数据总线,C为控制线
图2 S3C4510B的HDLC模块
4 驱动程序的设计思想及其实现
这里选择uClinux作为本CPU板的操作系统。uClinux是一种可移植、可裁减的嵌入式操作系统,以其良好的可靠性和开放性被广泛应用。因此,程序的设计必须按照这个操作系统的结构来构建。本文的主要目的是使用S3C4510B处理器的HDLC功能模块,以支持uClinux操作系统下的HDLC通信,所以程序的设计主要围绕这个目的进行,在此并没有按照传统驱动的模式构建驱动程序,而是直接对硬件进行操作。当驱动程序运行时,首先要进行HDLC通道的初始化,然后才开始执行收发功能,在这当中要加上中断控制。按照这个程序的基本流程,具体的实现分为下面几步
4.1 HDLC通道初始化
HDLC通道的初始化分为七个步骤;①HDLC通道复位,恢复其默认配置;②设置工作模式寄存器(HMODE)来配置HDLC工作模式;③设置控制寄存器(HCON)来控制HDLC通道的工作;④设置中断控制寄存器(HINT)来控制HDLC通道的中断产生;⑤设置站址寄存器(HSAR0-HSAR3)和站址屏蔽寄存器(HMASK),以完成接收操作的地址比较功能;⑥建立DMA方式的发送和接收BUFFER描述符链表结构,并初始化DMA发送BUFFER描述符指针寄存器(HDMATxPTR)和DMA接收BUFFER描述符指针寄存器(HDMARxPTR);⑦使能HDLC通道的收发功能。
4.2 HDLC通道数据发送及中断处理的实现
4.2.1数据发送
DMA方式下HDLC通道的数据发送通过以下几个步骤实现:
(1)读取发送帧描述符指针寄存器HDMATxPTR,得到当前发送帧描述符的地址,进而得到整个发送帧描述符的内容。
(2)得到发送帧描述符中帧数据BUFFER起始地址。
(3)将准备好的HDLC帧拷贝到BUFFER中。
(4)设置当前帧描述符中的相应控制位。
(5)将发送帧描述符的OWERSHIP位设置为DMA所有。
(6)使能HDLC的DMA发送。
完成上面各步骤后,HDLC通道的DMA机制会自动将BUFFER中的数据拷贝到HDLC通道TxFIFO中发送出去。一帧发送完毕后,S3C4510B自动将已使用的发送BUFFER描述符的OWERSHIP位设置为CPU所有,并将帧描述符指针寄存器HDMATxPTR中的内容更新为下一个未使用的发送BUFFER描述符地址。
4.2.2 数据发送的中断处理
当一帧数据通过DMA方式发送完毕,或者发送过程中出现了可引起中断的异常情况,此时软件会进入中断处理程序。引起中断的情况由中断控制寄存器的设置决定。在编程实现中,HDLC通道的中断处理主要完成以下工作:
(1)进入中断后,首先清除S3C4510B中断指示寄存器INTPEND中相应的标志位。
(2)如果DMA发送成功,则进行数据帧发送成功状态计数,并清除HDLC通道状态寄存HSTAT中的相应状态位。如果发送出现异常,则完成相应的异常状态计数,并清除HDLC通道状态寄存器HSTAT中的相应位。其中有两个异常会影响以后的DMA操作,a.发送下冲异常(TxU),发生此异常时,处理器会自动禁止DMA发送功能,因此下一次发送时必须重新使能DMA发送功能;b.下一个发送帧描述符指针为空异常(DTxNL),发生此异常时,说明建立的DMA发送BUFFER描述符链表结构出现了错误,因此需要重新初始化DMA发送BUFFER描述符链表结构。
(3)做完上述处理可关闭HDLC通道的DMA发送功能,等待有数据需要发送时再重新打开,也可以不关闭。
4.3 HDLC通道数据接收及中断处理的实现
4.3.1 数据接收
DMA方式下HDLC通道的数据接收工作主要在HDLC通道初始化和DMA接收中断处理中完成.在编程实现中,HDLC通道数据接收主要完成以下工作:
(1)通道初始化阶段,我们建立并初始化了HDLC接收BUFFER描述符链表结构,并将链表头节点的地址写入到HDLC接收BUFFER描述符指针寄存器HDMARxPTR,这是正确完成DMA方式接收的前提,下面的工作都是在这个前提下自动完成的。
(2)当有数据到来时,DMA机制会从HDMARxPTR指向的接收BUFFER描述符中找到接收BUFFER起始地址,然后把收到的数据写入到BUFFER中。
(3)如果接收无误,S3C4510B自动更新HDMARxPTR寄存器的值,使其指向下一个还未使用的接收BUFFER描述符,以备下一次接收使用。使用过的接收BUFFER描述符的OWERSHIP位将自动设置为CPU所有,因此为了能再次使用这个接收BUFFER描述符,必须将它的OWERSHIP位重置为DMA所有。
4.3.2数据接收的中断处理
DMA方式下HDLC通道接收完一帧数据,或者接收过程中出现了可引起中断的异常情况,此时软件会进入中断处理程序。引起中断的情况由中断控制寄存器的设置决定。在我们的编程中,HDLC通道接收中断处理主要完成以下工作:
(1)进入中断后,首先清除S3C4510B中断指示寄存器INTPEND中相应的标志位。
(2)如果DMA接收正确,则进行数据帧接收成功状态计数,并清除HDLC通道状态寄存器HSTAT中的相应状态位。对接收到的数据帧作相应的处理后,要重新将是用过的接收BUFFER描述符的OWERSHIP位设置为DMA所有。
(3)如果接收出现异常,则完成相应的异常状态计数,并清除HDLC通道状态寄存器HSTAT
中的相应位。其中有两个异常会影响以后的DMA操作,a.DMA接收BUFFER描述符不属于DMA所有(DRxNO);b.DMA接收BUFFER描述符指针空(DRxNL)。发生这两个异常时,说明接收BUFFER描述符双向环形链表结构出现错误,处理器会自动禁止DMA发送功能,因此建议重构接收BUFFER描述符双向环形链表结构并重新使能DMA发送功能。
5 总结
S3C4510B是一款性价比很高的ARM处理器,功能丰富,编程简单,并且可以配合几种嵌入式实时操作系统,如pSOS,NUCLEUS等。我们使用S3C4510B和uClinux操作系统,完成了底层控制软件,经过调试,该软件性能稳定。
随着各种电子,通讯产品对性能要求的日益提高,基于先进的ARM架构的各种32位微处理器也将得到越来越广泛的应用。因此,掌握了ARM处理器的使用和编程方法,必然能在工作中事半功倍,得到良好的结果和收益。
参考文献:
[1]三星公司.著.三星S3C4510B用户手册[M].北京:北京三星公司,1999.
[2]李驹光.ARM应用系统开发详解[M].北京:清华大学出版社,2004.
[3]Alessandr Rubini & Jonathan Corbet.著. 魏永明.等.译.LINUX设备驱动程序设计[M].北京:中国电力出版社,2002.
本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。