MPC860的HDLC通道驱动程序的设计与实现

发布者:火星叔叔最新更新时间:2010-01-13 来源: 中国IT实验室关键字:MPC860  SCC  HDLC  驱动程序 手机看文章 扫描二维码
随时随地手机看文章

      阐述了MPC860芯片及其SCC接口的基本工作原理,介绍了在SCC通道上实现HDLC协议的基本设计思想及具体实现,并给出了主要功能函数的设计流程。
  
  HDLC作为一种基于点到点/多点的数据链路层协议,常常用来连接路由器和网关等网络设备。摩托罗拉公司生产的MPC860微处理器是当前应用非常广泛的嵌入式微处理器,良好的性价比和强大的通信与网络协议处理能力以及丰富的通信接口支持使其非常适合构建VOIP网关;特别是其SCC接口本身支持HDLC协议,因此可以通过它的一个SCC接口来为VOIP网关和信令网之间提供链路支持。VOIP作为一种基于IP的数据传输技术,广泛地利用Internet全球互连环境,将传统的PSTN电话网和Internet网络合二为一,因此可以有效地降低系统成本和管理成本。作为一种高效且经济的数据和话音通信方式,它是当前技术研究和开发的热点。实现VOIP的关键是IP网关,其中信令网关主要将信令网的信令信息转换成Internet网络的相关报文控制信息。本文介绍如何在MPC860板的SCC2通道上实现HDLC的驱动程序,从而为信令网和网关之间提供链路支持。

  1 HDLC简介 

  HDLC是一个在同步网上传输数据并面向位的数据链路层协议,具有透明传输、可靠性高、传输效率高以及灵活性高等特点。它采用点对点或多点(多路播送或一对多)连接的主/从结构,要求每个从站都有唯一的地址,从站只有在允许通信时才能且只能和主站通信,这就消除了串行线路上由于几个从站同时发送引起冲突的可能性。其它的通用的二层协议如SS#7、AppleTalk、 LAPB、LAPD等都是基于HDLC及其帧结构的。HDLC帧结构如图1所示。

  F:标志位,每个HDLC帧以8位序列(01111110)标志帧的开始和结束,这是HDLC中仅有的两个包含连续六个1的可能组合。为了避免在其它域中出现这种组合,HDLC采用了一种叫作位插入的办法实现组合,即每发现有连续五个1时便在下一位自动插入一个0,接收器在收到连续五个1之后又自动删去插入的0。标志位除了标志帧的开始和结束外,还可用作时钟同步,接收设备不断地搜寻标志位,以实现帧同步,从而保证接收部分对后续字段的正确识别。另外,在帧与帧的空载期间,可以连续发送这种标志序列,用作时间填充。

  A:目的地址位,用于指示报文发往何站。每个从站必须有唯一的地址,主站必须知道每个从站的指定地址。全“1”构成的地址在HDLC中定义为广播地址,全“0”构成的地址在HDLC中定义为无站地址,用于测试数据链路的状态。

  C:控制位,用于系统初始化、标志帧的序号,并在报文发送完成后通知从站响应,对以前发送帧进行应答。尾随控制段的信息通常用于报文传输、出错报告和其它各种功能,这些功能由控制段的格式完成。有三种格式可供使用:报文格式、监控格式和无序号格式。

  I:信息域,是可选的。如果信息存在,它必须有8位整数数量的长度。

  CRC:帧校验位,长度为16位或32位,帧校验序列用于对帧进行循环冗余校验,其校验范围从地址字段的第一比特到信息字段的最后一比特的序列,并且规定为了透明传输而插入的“0”不在校验范围内。 

  HDLC常被用来向X.25、ISDN和帧中继网等提供信令和控制数据链路。

  2 MPC860及其SCC接口

  MPC860是美国摩托罗拉公司生产的一种通用的32位嵌入式通信控制器。它是以RISC体系结构为基础并在片内集成有微处理器和多种外设接口的专用通信芯片,具有强大的通信和网络协议处理能力,可广泛应用于各种通信和网络产品中。它主要由嵌入式PowerPC内核、系统接口单元(SIU)和通信处理器模块(CPM)组成。它的CPM提供了丰富的串行通道,包括四个串行通信控制器(SCC)、两个串行管理单元(SMC)、一个串行外围接口(SPI)和一个I2C接口。 

  其中,SCC是MPC860最强大的通信设备。四个SCC端口通过相应的配置可支持不同的协议,如以太网、IEEE802.3 10M局域网、HDLC、appleTalk、通用异步收发协议UART、同步UART、串行红外线接口IrDA、二进制同步通信BISYNC及透明发送等网络协议,可以分别用于网桥、路由器、网关、LAN、WAN及专用网。因此,本文将其中的一个SCC端口配置成HDLC模式用在VOIP信令网关中,为信令网和网关之间提供链路支持。SCC数据通信基本流程如图2所示。

  当处于接收状态时,数据首先进入FIFO。当接收FIFO充满时,CPM向SCC发请求,并由CPM RISC处理该请求,然后通过写SDMA将数据按照缓存描述符的指示存入指定的缓存中。缓存描述符是进行数据收发的基础,它由三个部分组成:头16个比特用来描述收发的状态模式;接下来是数据长度描述符,表示即将存入缓存的数据长度;最后是数据指针,它指向即将存入数据的缓存。发送过程与接收过程基本上是一样的,通过缓存描述符,能够正确读写缓存。

3 驱动程序的设计思想及其实现

  这里选择VxWorks作为本CPU板的操作系统。VxWorks是美国风河系统公司推出的一种高性能、可裁减的实时嵌入式操作系统,以其良好的可靠性和卓越的实时性被广泛应用于通信、军事、航天等领域。因此,程序的设计必须按照这个操作系统的结构来构建。本文的主要目的是将MPC860处理器的一个SCC通道配置成为HDLC模式,以支持VxWorks操作系统下的HDLC通信,所以程序的设计主要围绕这个目的进行,在此并没有按照传统驱动的模式构建驱动程序,而是直接对硬件进行操作。首先设置通道参数,将其配置成HDLC模式,然后设计基本功能函数。当驱动程序运行时,首先要进行SCC通道的初始化以及存储区的初始化,然后才开始执行收发功能,在这当中要加上中断控制。按照这个程序的基本流程,具体的实现分为下面几步(在本设计中将SCC2配置成HDLC模式)。

  3.1 定义参数RAM

  

  参数RAM主要包括通道参数RAM和通道协议参数RAM两部分,SCC通道的主要参数都在这个里面配置。它们包含CPM RISC用来正确操作SCC通道的特定协议所用的信息。

  3.2 初始化SCC2

  (1)将MPC860的PA12、PA13引脚作为SCC2的收发引脚。

  (2)MPC860有四个BGR和八个外部时钟引脚,将SCC的收发时钟分别配置成内部时钟和外部时钟。
  (3)将SCC2配置为NMSI模式。

  (4)初始化SDCR寄存器,给予SDMA一个仲裁ID以提供U总线上的优先级。

  (5)初始化SCC2的参数RAM(这步对所有的协议都是通用的):

  ①设置Rx/TxBD 表的基址相对于双端口RAM的偏移量;

  ②设置收发缓冲区描述符表基址相对于IMMR寄存器中值的偏移量;

  ③设置Rx/Tx 的函数代码;

  ④在MRBLR中设置接收缓存的最大空间。

  (6)针对SCC2的HDLC模式进行初始化;

  ①通过C_MASK和C_PRES 设置CCITT-CRC;

  ②对CPM维护的五个计数器DISFC、CRCEC、 ABTSC、 NMARC和RETRC清零;

  ③在MFLR中定义最大帧长度,通常定义为0x0100,表示最大帧长度为256字节;

  ④在RFTHR中定义接收到多少个HDLC帧时产生一个中断申请,当将RFTHR置位0x0001时,表示每接收到一个帧产生一个中断申请;

  ⑤设置接收地址,hmask用来定义地址掩码,当hmsk=0x0000时,表示接收所有帧。

  每个SCC有四个地址存储器HADDR1~HADDR4,所以每个SCC可识别四个地址,包括广播地址。接收时,通过与HDLC帧的目的地址进行比较,确定接收该帧还是丢弃。

  3.3 初始化收发缓存区描述符 

  (1)在初始化缓存区描述符的过程中,收发都必须停止。通过将GSMR_L2的ENT和ENR置零,然后配置CPCR中的CP命令就可以禁止收发。

  (2)配置收发缓存区描述符:

  ①配置当前接收缓存区描述符表的基地址,即IMMR的基地址再加上收发缓存区描述符表相对于IMMR的偏移地址。由于发送缓存区描述符表紧跟在接收缓存区描述符表的后面,因此发送缓存区描述符表的基地址为接收缓存区描述符表的基地址加上整个接收缓存区描述符表的长度。

  ②初始化发送缓存区描述符表和接收缓存区描述符表。如果收发缓存区都为空,分别将每一个发送缓存区描述符表和接收缓存区描述符表的状态模式参数中的状态位E置1、数据长度置0,
并将它们的地址设置成相应的值。如果收缓存区或发缓存区不为空,则应该先将这些缓存区清零。值得注意的是,最后一个收发缓存区描述符表的W位必须置1。

  (3)初始化完成后,应该将ENT和ENR位置

  3.4 收发功能的实现

  3.4.1 接收函数

  SMR_L2寄存器的ENR位置1的前提下,HDLC控制器进入接收允许状态。在正式读入数据前,必须先检测帧开始标志,并匹配地址,然后决定是否进入接收状态。进入接收状态后,首先提取RxBD的状态模式字节,若接收未准备好,则继续等待,若准备好了,则开始接收。由于一个数据包可以放置于多个缓存,所以检测RxBD状态模式字节的L位,以判断是否为本帧的最后一个缓存:如果不是,则关闭这个缓存,处理下一个缓存描述字;如果是,接收完最后一个缓存的数据后结束接收过程。对于最后一个buffer,需要检测是否有接收错误。

  3.4.2 发送函数  

  发送函数流程图如图4所示。

  在GSMR_L2寄存器的ENT位置1的前提下,HDLC控制器进入发送允许状态。首先提取TxBD的状态模式字节,若发送未准备好,则继续等待,若准备好了,则进入发送状态,在发送数据中间插入适当的标志位后就可以发送。由于一个发送数据包可以包含多个缓存,所以检测TxBD状态模式字节的L位,以判断是否为最后一个缓存:如果不是,则关闭这个缓存,处理下一个缓存描述字;如果是,控制器进入关闭发送状态。对于最后一个buffer,需要做两件事情:(1)检测是否有发送错误。(2)以剩下的实际数据长度作为发送帧中数据段的长度发送出去。

  3.5 中断处理

  在这个驱动程序中,只处理SCC2产生的中断。首先确定是否是CPM产生的中断,然后读取寄存器CPM中断向量寄存器(CIVR)的VN字段判断是否为SCC2产生的中断。如果是的话,就读取SCEE确定中断类型,然后做出相应的处理。

  本程序通过在MPC860上做环回测试,情况良好。但在程序实现过程中,中断的控制还有待于进一步完善。

关键字:MPC860  SCC  HDLC  驱动程序 引用地址:MPC860的HDLC通道驱动程序的设计与实现

上一篇:面向嵌入式视频处理平台的Linux移植
下一篇:谈论嵌入式实时系统的关键特征

推荐阅读最新更新时间:2024-05-02 20:58

基于ARM嵌入式系统的SPI驱动程序设计
嵌入式系统已被广泛应用于国防电子、数字家庭、工业自动化、汽车电子等多种领域。在嵌入式开发过程中,许多系统通常使用串口驱动来满足通信要求,但在实际应用中,使用SPI通信方式会更加高效和快捷。SPI接口是一种高速、高效的串行接口技术,因而SPI设备在数据通信应用中十分方便。本文基于ARM9芯片的S3C2440和Linux操作系统,设计了一种SPI驱动程序,该驱动程序功能可靠灵活、易于移植,可应用于多种嵌入式平台,实现arm与设备之间的通信。 1 硬件说明 1.1 S3C2440开发平台 采用三星公司的SoC芯片S3C2440 作为核心处理器,主频为400 MHz,并与64 MB SDRAM和64 MB NAND Flash共同组成
[单片机]
WindowsNT4.0下设备驱动程序的开发与应用
    摘要: 介绍了Windows NT4.0内核模式设备驱动程序开发中的一般性过程。通过提供一个最小化驱动程序的核心代码,解释各组成部分的结构功能和使用方法。在实践中,结合自身的开发需要,可编写出具有实用价值的驱动程序。     关键词:Win32子系统 设备驱动 系统注册表 I/O请求包     Windows NT 以其安全、稳定及界面友好等特性逐渐成为工业控制领域的前台操作系统。面对工业控制中大量采用的串/并行通信及总线控制等技术,要求用户不断开发出满足自身需要的硬件设备,同时又要求用户应用程序与这些硬件设备进行通信,发送控制命令,读取状态信息等等。Windows NT出于安全性、
[嵌入式]
51单片机——I2C总线驱动程序
为方便移植,采用多文件工程的方式。 void Delay10us()//延时10us { unsigned char a,b; for(b=1;b 0;b--) for(a=2;a 0;a--); } 起始信号:在SCL时钟信号在高电平期间SDA信号产生一个下降沿 void I2cStart()//为方便与其他函数衔接,起始之后SDA和SCL都为0,虽然这与I2C总线空闲状态不符,但并不影响程序运行 { SDA=1; Delay10us(); SCL=1; Delay10us();//建立时间是SDA保持时间 4.7us SDA=0; Delay10us();//保持时间是 4us SCL=0;
[单片机]
嵌入式Linux下高速USB主控制器的设计与实现
  在嵌入式系统的发展历程中,Linux操作系统的源码公开,结构清晰,功能强大,可移植性强等特点使其在嵌入式领域应用越来越广泛。USB接口的热插拔,即插即用,数据传输可靠,扩展方便,成本低等优点使其逐渐成为嵌入式系统的必备接口之一。随着嵌入式系统应用领域的不断扩展,人们对其性能的要求不断提高,特别是USB设备的读写速度受到越来越多的关注。然而。目前多数嵌入式系统仅支持基础的USB低速或全速外设,不能满足人们对高速数据传输的要求。为此,基于AT91RM9200平台完成了高速USB的硬件设计和Linux操作系统下主机端驱动程序的开发。    1 高速USB硬件接口设计   目前的嵌入式系统设计中,USB接口的外扩主要采用微处理
[嵌入式]
DS18B20的驱动程序
/******************************************************************** 程序名称:DS18B20演示实验 时钟频率:内部RC 8M 芯片 :DS18B20 引脚 :**PA0 DATA** **PD0--PD7接数码管扫描端1--8** **PC0--PC7接数码管扫描端。.A--G** ********************************************************************/ #include iom16v.h #include macros.h #define DQ_H PORTA|=BIT
[单片机]
基于MCP2515的Linux CAN总线驱动程序设计
1.前言 CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性、及独特的设计和适宜的价格而广 泛应用于工业现场控制、智能楼宇、医疗器械、交通工具以及传感器等领域,并已被公认为几种最有前途的现场总线之一。CAN总线规范已经被国际标准化组织制 订为国际标准ISO11898,并得到了众多半导体器件厂商的支持。 本文使用华清远见FS2416平台。FS2416使用Socket网络设备驱动和字符设备驱动两种方式向Linux内核提供MCP2515的驱动,本文详细介绍了使用Socket方式设计的基于MCP2515的Linux CAN
[单片机]
基于MCP2515的Linux CAN总线<font color='red'>驱动程序</font>设计
基于ARM9+Linux的DS18B20驱动程序设计
引言 随着嵌入式技术的发展,基于ARM和Linux的嵌入式产品越来越多, DS18B20 温度采集传感器在工业和生活上应用广泛,研究开发基于ARM9和Linux的DS18B20的驱动程序可以满足大部分温度采集平台的应用。 1 Linux设备驱动的开发过程 Linux操作系统通过各种驱动程序来操作硬件设备,它屏蔽了各种设备,设备驱动程序是操作系统内核和硬件之间的接口。从应用程序来看,硬件只是一个设备文件,应用程序可以像操作普通文件一样操作硬件设备。 1.1 设备的分类 Linux看待设备可区分为3种基本设备类型,分别为字符设备、块设备和网络设备: ①字符设备:字符设备是一种可以当作一个字节流来存取的设备,相当于一个文件,字符设备驱动
[电源管理]
基于ARM9+Linux的DS18B20<font color='red'>驱动程序</font>设计
11-S3C2440驱动学习(五)嵌入式linux-网络设备驱动(二)移植DM9000C网卡驱动程序
我们实现了一个虚拟网卡驱动程序,现在我们针对真实的网卡芯片DM9000C,编写移植DM9000C网卡驱动程序。 一、移植分析 协议类的驱动,我们的主要工作往往是将现有的驱动和我们的硬件所匹配起来。协议类的函数往往已经成型不需要我们去修改和编写。比如发包函数:hard_start_xmit函数和netif_rx上报函数都不需要我们编写。网络驱动是针对很多硬件编写出来的,我们使用的是什么硬件CPU,比如ARM9,以及我们使用的系统版本。我们只需要修改驱动,告诉驱动现在的硬件情况是怎么样的,基地址是多少,中断引脚是哪个、设置下内存管理器以满足时序等等。这也是网络驱动移植的简单之处。 (1)DM9000C 一般一款网卡芯片,出
[单片机]
11-S3C2440驱动学习(五)嵌入式linux-网络设备驱动(二)移植DM9000C网卡<font color='red'>驱动程序</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved