专利名称:Hdlc控制器及hdlc控制器上报中断的方法
技术领域:
本发明涉及数据通信技术,尤其涉及一种高级数据链路控制(HDLC, High Level Data Link Control)控制器及HDLC控制器上报中断的方法。
背景技术:
目前,El接口作为一种2M串行接入方式在数据通信系统中得到了广 泛应用, 一般路由器等通信设备上都支持E1接口。按照是否支持通道化, El接口分为CE1和El - F。图1示出了 El - F接口电路示意图,包括HDLC 控制器和成帧器(Framer) , Fmmer与电缆相连,HDLC控制器和Framer 之间通过时分复用(TDM, Time Division Multiplexing)接口对接。其中, Framer为外置芯片,而HDLC控制器既可以由系统主CPU集成,也可以外 接在CPU上。图2示出了 HDLC控制器集成在CPU上的结构示意图,CPU内部集成 HDLC控制器,并提供TDM接口与Framer芯片对接。但是,这种方式需要 CPU提供可用的HDLC控制器资源和TDM接口 ,这对于成本压力越来越大 的中低端通信设备来说,无疑是很大的限制。图3示出了 HDLC控制器外置的结构示意图,CPU通过本地总线(Local bus )外接HDLC控制器与Framer芯片互通。由于Local bus是一般CPU都 具有的总线资源,因此这种方式不受CPU是否内置HDLC控制器资源的限 制。其中,HDLC控制器主要包括接收方向上的HDLC单元(RHDLC)、 发送方向上的HDLC单元(THDLC)、接收方向上的先入先出緩冲存储器 (RFIFO )和发送方向上的先入先出缓冲存储器(TFIFO ) , RFIFO和TFIFO 的深度均固定为32B。在接收方向上,线路侧的数据通过Framer芯片解码后通过TDM接口传送到RHDLC, RHDLC将数据送入RFIFO,只要RFIFO 中有数据,逻辑就上报中断到CPU,通知Local bus来读取数据;在发送方 向上,CPU将要发送的数据通过Local bus写入TFIFO,只要TFIFO中有数 据,逻辑就启动THDLC发送数据,当TFIFO为空时,逻辑上报中断到CPU, 通知Local bus继续进行后续数据发送。由以上描述可见,图3所示外接HDLC控制器是通过中断与CPU交互, 从而触发Local bus操作的,中断的产生与RFIFO/TFIFO的状态有关。由于 RFIFO/TFIFO的深度只有32B,因此当有长数据帧收发时,HDLC控制器就 会产生大量的收发中断不断触发CPU的Local bus操作,从而占用大量的 Local bus带宽以及CPU的时间片,这样不仅给Local bus的带宽性能带来很 大挑战,同时也会造成CPU占有率饱和,从而影响到整个通信设备的性能。 甚至当业务繁忙时,会因为RFIFO/TFIFO的深度较小而产生数据包丢失。 另外,当设备上同时有其它业务需要处理时,如果HDLC控制器产生的中断 过多,也会造成CPU对其它业务处理的延迟。发明内容有鉴于此,本发明的目的在于提供一种HDLC控制器及HDLC控制器 上报中断的方法,优化HDLC控制器上报中断的频率和次数,提升设备处理性能。为达到上述目的,本发明提供的技术方案如下一种HDLC控制器,在接收方向上包括第一接收方向上的先入先出 緩冲存储器RFIFOl、第二接收方向上的先入先出緩冲存储器RFIF02、接收 检帧单元、接收方向上的高级数据链路控制单元RHDLC和接收逻辑,所述 RFIF02的深度大于RFIFO 1的深度,其中,RHDLC,用于接收Framer发来的数据,对收到的数据进行解帧处理打 上帧头、帧尾,并送入RFIF02;RFIF02,用于存储RHDLC发来的数据,并在接收逻辑的控制下将数据传送给RFIFOl;接收检帧单元,位于RFIFOl和RFIF02之间,用于在RFIF02向RFIFOl 传送数据的过程中检测数据帧,在检测到帧尾时向接收逻辑发送帧尾通知;接收逻辑,用于在接收到帧尾通知后,停止RFIF02和RFIFOl之间的 数据传递,向CPU上报RME中断,通知CPU用Local bus来读取RFIFOl 中的数据;在RFIFOl满时,停止RFIF02和RFIFOl之间的数据传递,向 CPU上报RPF中断,通知CPU用Local bus来读取RFIFOl中的数据;在收 到CPU在数据读取完毕后写入的RMC标识后,触发RFIF02向RFIFOl继 续传递数据。 '所述RFIFO1和RFIF02的深度根据实际业务的数据包长确定。在发送方向上,所述HDLC控制器进一步包括发送方向上的先入先 出緩沖存储器TFIFO、发送检帧单元、发送方向上的高级数据链路控制单元 THDLC和发送逻辑,其中,TFIFO,用于存储CPU写入的数据;发送检顿单元,位于TFIFO和THDLC之间,用于在THDLC发送TFIFO 中数据的过程中,通过检测数据帧帧尾确定从TFIFO中发送出去的数据帧 个数;发送逻辑,用于在收到来自CPU的发送请求标识后,判断已使用的 TFIFO长度TFIFO—USED是否小于设置的低水标TFIFO—DOWN,在 TFIFO—USED小于TFIFO—DOWN时向CPU返回INT—TX中断,通知CPU 向TFIFO中写入数据;并且,通过计算CPU写入的XME标识个数与发送 检帧单元检测到的已发送数据帧个数之差确定TFIFO中的数据帧个数,在 TFIFO内有一帧或一帧以上的数据时,或者在TFIFO—USED超过设置的高 水标TFIFO—UP时,触发THDLC发送TFIFO中的数据;其中,所述XME 标识为CPU在向TFIFO中写完一帧数据时发送的标识。所述TFIFO的深度、TFIFO的高低水标TFIFO DOWN和TFIFO—UP 根据实际业务的数据包长确定。所述HDLC控制器通过Local bus与CPU连接。一种HDLC控制器上报中断的方法,在HDLC控制器内设置RFIFOl 和RFIF02,且RFIF02的深度大于RFIFOl的深度,该方法包括在接收方向上,HDLC控制器收到来自Framer的数据后,对收到的数 据进行解帧处理打上帧头、帧尾送入RFIF02,并将RFIF02中存储的数据 传到RFIFOl ,当一个数据帧传送完毕时以及RFIFOl满时,都向CPU上报 中断,通知CPU用Local bus来读取RFIFOl中的数据,同时停止RFIF02 和RFIFOl之间的数据传递;并且,在收到CPU在数据读取完毕后写入的 RMC标识后,触发RFIF02向RFIFOl继续传递数据。所述RFIFOl和RFIF02的深度根据实际业务的数据包长确定。所述HDLC控制器内还包括TFIFO,该方法进一步包括在发送方向上,HDLC控制器收到来自CPU的发送请求标识后,判断 TFIFO_USED是否小于设置的低水标TFIFO—DOWN,在TFIFO—USED小于 TFIFO_D〇WN时向CPU返回INT—TX中断,通知CPU向TFIFO中写入数 据;并在TFIFO内有一帧或一帧以上的数据时或者在TFIFO—USED超过设 置的高水标TFIFO—UP时,发送TFIFO中的数据。所述HDLC控制器通过计算CPU写入的XME标识个数与已发送的数 据帧个数之差确定TFIFO中的数据帧个数,其中,所述XME标识为CPU 在向TFIFO中写完一帧数据时发送的标识。所述TFIFO的深度、TFIFO的高低水标TFIFO—DOWN和TFIFOJJP 根据实际业务的数据包长确定。由此可见,在接收方向上,采用本发明所提供的 一 大 一 小两级接收FIFO 结构,既可以通过大的RFIF02来保证HDLC控制器在接收方向上有足够的 数据緩存能力,避免数据包丢失,也可以通过合理设置RFIFOl深度,避免 因深度不足而产生过多中断或者因深度太大而造成CPU —次中断处理时间 过长,减少中断对其它业务的影响;另外,HDLC控制器在一个数据帧传送 完毕或RFIFOl满时才向CPU上报中断,而不是RFIFO中一有数据就向CPU上报中断,优化了接收方向中断产生的频率和次数,减少了 Local bus操作, 降低了CPU占有率,提升了设备处理性能。进一步地,在发送方向上,也可以通过合理设置TFIFO的深度来避免 因深度不足而产生过多中断;并且,高低水标TFIFO—DOWN和TFIFO—UP 的灵活设置可以更好地控制发送方向上中断产生的次数和频率;另外,在 TFIFO内容TFIFO—USED超过TFIFO—UP,或者在TFIFO中有完整的一帧 数据时才启动THDLC发送数据,而不是TFIFO中一有数据就即刻发送,可 以避免因CPU业务繁忙只将一帧数据的一部分写入TFIFO就忙于处理其它 业务而造成的under run 4告i吴。
.图1为现有技术中的El -F接口电路示意图;图2为现有技术中HDLC控制器集成在CPU上的结构示意图;图3为现有技术中HDLC控制器外置的结构示意图;图4为本发明实施例中的HDLC控制器结构示意图;图5为图4所示HDLC控制器接收方向的处理流程图;图6为图4所示HDLC控制器发送方向的处理流程图。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,下面参照附图并举 实施例,对本发明作进一步详细说明。由背景技术描述可见,在图3所示CPU外接HDLC控制器的情况下, HDLC控制器是通过中断与CPU交互的,过多或过频的中断会占用大量的 Local bus带宽及CPU的时间片,影响设备的处理性能。考虑到中断的产生 与收发FIFO的状态有关,本发明的基本思想是通过合理配置HDLC控制 器收发FIFO的结构和深度,优化中断产生的频率和次数,以减少Local bus 操作,降低CPU占有率。图4示出了本发明实施例中的HDLC控制器结构示意图。HDLC控制器 的接收方向和发送方向相互独立,接收方向包括RHDLC 、 RFIFO1 、 RFIF02 、 接收检帧单元和接收逻辑;发送方向包括THDLC、 TFIFO、发送检帧单元 和发送逻辑。下面分别对图4所示HDLC控制器接收方向和发送方向的处理 过程进行详细说明。图5示出了图4所示HDLC控制器接收方向的处理流程图,包括以下 步骤步骤5 01: RHDLC接收到Framer发来的数据后,对数据进行解帧处理 打上帧头、帧尾,并送入RFIF02。RFIF02的深度可根据实际业务的数据包长进行合理设置。较佳地,可 将RFIF02的深度设置得大一些,以保证RFIF02有足够的深度来容纳数据 包,避免因RFIF02太小而造成的数据包丢失。本实施例中,将RFIF02的 深度设置为6K。步骤502:只要RFIF02中有数据,接收逻辑银控制RFIF02向RFIFOl传递。RFIFOl的深度要比RFIF02的深度小,可根据实际业务的数据包长进 行合理设置,不宜过小,也不宜过大。过小则会产生像现有技术中那样的深 度不足问题,在接收长数据帧时产生过多的中断;过大则会造成CPU的一 次中断处理时间过长,影响CPU对其它业务的响应。本实施例中,将RFIFOl 的深度设置为512B。步骤503:接收检帧单元位于RFIF02和RFIFOl之间,用于在RFIF02 向RFIFOl传送数据的过程中检测数据帧。当接收的数据帧的帧长小于 RFIF()l的深度时,RFIF02会将该数据帧一次性传输到RFIFOl中;在该帧 传输完毕时,接收检帧单元就会检测到一个数据帧帧尾,此时接收检帧单元 向接收逻辑发送帧尾通知;接收逻辑收到帧尾通知后,停止RFIF02和 RFIF()l之间的数据传递,并向CPU上报帧接收结束中断(下称RME中断), 通知CPU用Local bus来读取RFIFO 1中的数据。当接收的数据帧的帧长大于RFIFOl的深度时,在RFIF02向RFIFOl 传送数据的过程中,可能会遇到若干次RFIFO1满的情况。每当RFIFO1满 时,接收逻辑就停止RFIF02和RFIFOl之间的数据传递,并向CPU上报 RFIFOl满中断(下称RPF中断),通知CPU用Local bus来读取RFIFOl 中的数据。在该长数据帧的最后一部分传入RFIFOl时,接收4企测单元会检 测到一个数据帧帧尾,随即向接收逻辑发送帧尾通知;接收逻辑收到帧尾通 知后,停止RFIF02和RFIFOl之间的数据传递,并向CPU上报RME中断, 通知CPU用Local bus来读取RFIFOl中的数据。步骤504: CPU收到HDLC控制器发来的RME中断或RPF中断后,触 发Local bus从RFIFOl读取数据,并在数据读耳又完毕后向HDLC控制器写 入读取确i人标识(下称RMC标识)。步骤505:接收逻辑收到CPU写入的RMC标识后,触发RFIF02向 RFIFOl继续传递数据,返回执行步骤502。采用图4所示的两级接收FIFO结构以及图5所示的中断上报方式,能 够达到以下有益效果一、RFIFOl深度的合理设置,可以解决现有技术中RFIFO深度不足的 问题,避免在接收长数据帧时产生过多的中断;并且,也不会使CPU —次 中断处理时间过长,以免对CPU处理其它业务产生影响。二 、 RFIF02的设置可以保证HDLC控制器在接收方向上有足够的数据 緩存能力,避免数据包丢失。三、在一个数据帧传送完毕或RFIFOl满时向CPU上报中断的方式, 优化了接收方向中断产生的频率和次数,减少了 Local bus操作,降低了 CPU 占有率,提升了设备处理性能。图6示出了图4所示HDLC控制器发送方向的处理流程图,包括以下 步骤步骤601:当CPU有数据帧需要向HDLC控制器发送时,CPU首先向 HDLC控制器写入一个发送请求标识(下称XF标识),用以确认TFIFO空间是否可用。步骤602: HDLC控制器的发送逻辑收到CPU写入的XF标识后,判断 已使用的TFIFO长度即TFIFO内容TFIFOJJSED是否小于预先设置的低水 标TFIFO—DOWN,如果小于,则向CPU返回一个发送确认中断(下称 INT—TX中断),通知CPU可以向TFIFO中写入数据;否则,不返回INT—TX中断。步骤603: CPU收到INT—TX中断后,触发Local bus向TFIFO中写入 数据,并在写完一帧数据时,向HDLC控制器写一个发送结束标识(下称 XME标识),表示一帧结束。步骤604:发送逻辑统计TFIFO中的数据帧个数,在TFIFO内部有一 帧或 一 帧以上的数据时,触发THDLC发送TFIFO中的数据;并且,发送逻 辑判断TFIFO内容TFIFOJJSED是否超过预先设置的高水标TFIFO_UP, 如果超过,也触发THDLC发送TFIFO中的数据。其中,发送检帧单元位于TFIFO和THDLC之间,用于在THDLC发送 TFIFO中数据的过程中,通过检测数据帧帧尾确定乂人TFIFO中发送出去的 数据帧个数。发送逻辑通过计算CPU写入的XME标识个数与发送检帧单元 检测到的已发送的数据帧个数之差确定TFIFO中的数据帧个数。其中,TFIFO的深度、TFIFO的高低水标TFIFO—DOWN和TFIFO—UP 都可根据实际业务的数据包长进行合理设置。本实施例中,可将TFIFO的 深度设置为2K,以避免因FIFO深度不足而产生过多中断。TFIFO—DOWN 和TFIFO一UP的值可相同或不同,它们都是软件可编程的,用户可以根据实 际需求进行灵活调整,这样可以更好地控制中断产生的个数和频率以及启动 THDLC发送数据的时机。另外,在TFIFO中有完整的 一帧数据时才启动 THDLC发送数据,而不是TFIFO中一有数据就即刻发送,可以避免因CPIJ 业务繁忙只将一帧数据的一部分写入TFIFO就忙于处理其它业务而造成的 under rim错误。需要说明的是,本发明所提供的HDLC控制器接收方向结构和发送方向上结构既可以结合使用,也可以分开使用。最后需要说明的是,本发明所提供的技术方案不仅适用于El接口 ,也适用于其它接口,如T1接口、串口等。以上所述对本发明的目的、技术方案和有益效果进行了进一步的详细说 明,所应理解的是,以上所述并不用以限制本发明,凡在本发明的精神和原 则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1、一种HDLC控制器,其特征在于,在接收方向上包括第一接收方向上的先入先出缓冲存储器RFIFO1、第二接收方向上的先入先出缓冲存储器RFIFO2、接收检帧单元、接收方向上的高级数据链路控制单元RHDLC和接收逻辑,所述RFIFO2的深度大于RFIFO1的深度,其中,RHDLC,用于接收Framer发来的数据,对收到的数据进行解帧处理打上帧头、帧尾,并送入RFIFO2;RFIFO2,用于存储RHDLC发来的数据,并在接收逻辑的控制下将数据传送给RFIFO1;接收检帧单元,位于RFIFO1和RFIFO2之间,用于在RFIFO2向RFIFO1传送数据的过程中检测数据帧,在检测到帧尾时向接收逻辑发送帧尾通知;接收逻辑,用于在接收到帧尾通知后,停止RFIFO2和RFIFO1之间的数据传递,向CPU上报RME中断,通知CPU用Local bus来读取RFIFO1中的数据;在RFIFO1满时,停止RFIFO2和RFIFO1之间的数据传递,向CPU上报RPF中断,通知CPU用Local bus来读取RFIFO1中的数据;在收到CPU在数据读取完毕后写入的RMC标识后,触发RFIFO2向RFIFO1继续传递数据。
2、 根据权利要求1所述的HDLC控制器,其特征在于,所述RFIFOl和 RFIF02的深度根据实际业务的数据包长确定。
3、 根据权利要求1或2所述的HDLC控制器,其特征在于,在发送方向 上,所述HDLC控制器进一步包括发送方向上的先入先出緩冲存储器TFIFO、 发送检帧单元、发送方向上的高级数据链路控制单元THDLC和发送逻辑,其 中,TFIFO,用于存储CPU写入的数据;发送检帧单元,位于TFIFO和THDLC之间,用于在THDLC发送TFIFO 中数据的过程中,通过检测数据帧帧尾确定从TFIFO中发送出去的数据帧个数; 发送逻辑,用于在收到来自CPU的发送请求标识后,判断已使用的TFIFO长度TFIFO—USED是否小于设置的低水标TFIFO_DOWN,在TFIFOJJSED小 于TFIFO_DOWN时向CPU返回INT_TX中断,通知CPU向TFIFO中写入数 据;并且,通过计算CPU写入的XME标识个数与发送检帧单元检测到的已发 送数据帧个数之差确定TFIFO中的数据帧个数,在TFIFO内有 一帧或 一 帧以上 的数据时,或者在TFIFO一USED超过设置的高水标TFIFO—UP时,触发THDLC 发送TFIFO中的数据;其中,所述XME标识为CPU在向TFIFO中写完一帧 数据时发送的标识。
4、 根据权利要求3所述的HDLC控制器,其特征在于,所述TFIFO的深 度、TFIFO的高低水标TFIFO一DOWN和TFIFO—UP根据实际业务的数据包长 确定。
5、 根据权利要求1所述的HDLC控制器,其特征在于,所述HDLC控制 器通过Local bus与CPU连接。
6、 一种HDLC控制器上报中断的方法,其特征在于,在HDLC控制器内 设置RFIFOl和RFIF02,且RFIF02的深度大于RFIFOl的深度,该方法包括在接收方向上,HDLC控制器收到来自Framer的数据后,对收到的数据进 行解帧处理打上帧头、帧尾送入RFIF02,并将RFIF02中存储的数据传到 RFIFOl,当一个数据帧传送完毕时以及RFIFOl满时,都向CPU上报中断, 通知CPU用Local bus来读取RFIFOl中的数据,同时停止RFIF02和RFIFOl 之间的数据传递;并且,在收到CPU在数椐读取完毕后写入的RMC标识后, 触发RFIF02向RFIFOl继续传递数据。
7、 根据权利要求6所述的方法,其特征在于,所述RFIFOl和RFIF02的 深度根据实际业务的数据包长确定。
8、 根据权利要求6或7所述的方法,其特征在于,所述HDLC控制器内 还包括TFIFO,该方法进一步包括在发送方向上,HDLC控制器收到来自CPU的发送请求标识后,判断 TFIFO—USED是否小于设置的低水标TFIFO—DOWN,在TFIFO—USED小于 TFIFO—DOWN时向CPU返回INT—TX中断,通知CPU向TFIFO中写入数据;并在TFIFO内有一帧或一帧以上的数据时或者在TFIFOJJSED超过设置的高 水标TFIFO—UP时,发送TFIFO中的数据。
9、 根据权利要求8所述的方法,其特征在于,所述HDLC控制器通过计 算CPU写入的XME标识个数与已发送的数据帧个数之差确定TFIFO中的数据 帧个数,其中,所述XME标识为CPU在向TFIFO中写完一帧数据时发送的标 识。
10、 根据权利要求8所述的方法,其特征在于,所述TFIFO的深度、TFIFO 的高低水标TFIFO DOWN和TFIFO UP根据实际业务的数据包长确定。
全文摘要
本发明公开了一种HDLC控制器及HDLC控制器上报中断的方法。所述HDLC控制器在接收方向包括RHDLC、RFIFO1、RFIFO2、接收检帧单元和接收逻辑;在发送方向包括THDLC、TFIFO、发送检帧单元和发送逻辑。利用本发明所提供的技术方案,能够优化HDLC控制器向CPU上报中断的次数和频率,提高设备处理性能。
文档编号H04L1/00GK101321038SQ20081011705
公开日2008年12月10日 申请日期2008年7月23日 优先权日2008年7月23日
发明者谢世成 申请人:杭州华三通信技术有限公司