多通道控制器有什么特征?多通道控制器驱动是怎样实现的?

网友投稿 307 2022-11-22

多通道控制器有什么特征?多通道控制器驱动是怎样实现的?

1 MPC8280 处理器特性及MCC 概述

图1 MPC8280 模块结构图

一个MCC 可以支持最多128 路独立的时分串行通道。MPC8280 具有两个MCC,每个MCC连接到一个SI。MCC 的数据流可以通过SI 的四个时分复用接口TDM 中的任何一个进行数据传输。

一个MCC 中的128 个通道以32 个为一组连接到某一个TDM 接口上。MCC1 的通道(0-127)只能连接到SI1 上,MCC2 的通道(128-255)只能连接到SI2 上。MCC 的每一个通道都可独立配置为不同于其它通道的工作模式。通过配置SI 和SIRAM 可以将TDM 数据中的时隙路由到特定的MCC 通道。

每个MCC 都具有以下特性:最多达128 路独立的HDLC 或者透明传输通道,或者64 路SS7 通道;独立的发送和接收路由;每一通道都可支持HDLC、透明传输或者SS7 协议。

2 MCC 操作概述

G2_LE 内核根据中断值调用相应的中断处理函数,由此完成数据交互过程。

Channel-specific parameters 会因该通道所工作的协议不同而作不同的解释。如果TDM的配置含有MCC 超通道(super-channel)时隙的话还要用到超通道表(Super-channelTable)。

● Global Parameters MCC1 的global parameters 适用于通道0—127,MCC2 的global parameters 适用于通道128—255,分别位于相对于DPRAM 基址偏移0x8700 和0x8800 处。

●Channel-specific Parameters 这些参数仅局限于相应的MCC 通道,位于相对于DPRAM 基址偏移64×CH_NUM 处。

● Channel Extra Parameters 包含相应通道缓存描述符的基址和指针。位于相于对DPRAM 基址偏移XTRABASE+8×CH_NUM 处。其中XTRABASE 是MCC Global Parameters 之一。

● Super-channel Table 仅当在SIRAM 中配置了超通道时使用。位于相对于DPRAM基址偏移SCTPBASE 处。其中SCTPBASE 是MCC Global Parameters 之一。由于我们的应用场合未使用到超通道,所以未对该参数进行配置。

3 MCC 驱动的设计与实现

该驱动运行在嵌入式操作系统VxWorks5.5 之上,开发环境为Tornado 2.2.1 for PPC。

MCC 驱动主要分为以下几部分:

3.1 MCC 驱动初始化

主要完成 MCC 模块的初始化,具体内容包括:为MCC 控制数据结构分配内存,并根据初始化参数初始化数据结构的相关内容;初始化MCC 相关的控制寄存器;创建接收消息队列以及相应接收处理任务;最后启动MCC 进行数据收发。

(1) 分配并初始化MCC 操作所需的内存空间。

(2) 初始化循环中断表。

(3) 配置SI 寄存器和SIRAM。

设置每组MCC 通道所使用的TDM,并且配置SIRAM 以建立TDM 时隙和MCC 通道的对应关系。

(4) 初始化MCC Global Parameters。主要包括:

● MCCBASE MCC 基址指针,指向位于外部存储器的缓冲区描述符表,为最大512KB 的连续空间。

● MRBLR 最大接收缓冲区长度。必须是8 整数倍。

● GRFCNT 全局接收帧计数。初始化为GRFTHR。

● SCTPBASE 指向超通道表。

● RINTBASE 多通道接收循环中断表基址指针。

(5) 初始化缓冲区描述符BD 和数据缓冲区。

BD 表位于外部存储器,其组织结构如图2 所示。

图 2 MCC 缓冲区描述符结构组织图

(6) 安装数据接收回调函数。

(7) 初始化所使用通道的MCC Channel-specific Parameters。

(8) 初始化所使用通道的MCC Channel-extra Parameters。

(9) 如使用了超通道则初始化Super-channel Table。

(10) 配置系统接口单元SIU,根据需要设置与MCC 相关的中断并安装中断处理函数。

(11) 配置TDM 所用到的并行接口和时钟信号。

(12) 执行MCC INIT 命令。

(13) 使能TDM。

3.2 中断处理

当一个MCC 通道产生中断请求时,CP 将中断信息写入循环中断表,然后修改T/RINTPTRR并设置MCCM 寄存器中相应的TINT 或者RINTx 比特。当MCC 中断到达内核后由内核调用中断处理函数。中断处理函数首先清除中断,然后根据MCCE[RINTx]和MCCE[TINT]的值来处理相应的循环中断表。

3.3 接收数据

数据接收程序通过一个先进先出的消息队列和中断处理程序相配合来完成数据的接收。当MCC 的某个通道接收到数据后会设置相应的中断事件比特位。之后中断处理函数将收到的数据进行封装后发送到消息队列。数据接收任务从消息队列接收数据,然后根据MCC 通道号调用相应的由用户安装的数据接收回调函数。最后由回调函数完成数据的处理。

3.4 发送数据

数据的发送过程由通信协处理器完成。数据发送函数将所发送的数据复制到所使用通道的缓冲区,然后设置相应的控制寄存器,由通信协处理器完成数据从缓冲区到线路接口的发送。数据发送完成后通信协处理器设置中断寄存器MCCE 相应的RINT 比特位。并由中断处理程序通知数据发送函数数据发送已完成。

4 结束语

由于该驱动的中断处理函数检查所有循环中断表的条目并将收到的数据从 MCC 通道的数据缓存发送到消息队列,由此引入了较大的处理延迟,在数据量较大时甚至有可能会造成数据丢失。改进的关键在于中断处理函数和数据接收函数的配合。作为一种改进方法可考虑在中断处理函数内仅执行那些必须的操作,如清除中断,重新设置相关寄存器参数等。将数据处理放在另外一个单独的任务中去执行,并尽量减少数据搬移次数,优化所执行的操作等。最终在程序运行的速度和所完成的功能之间作合适的折中,从而获得所需的性能。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:分布式锁01--介绍
下一篇:分布式锁02--zookeeper
相关文章

 发表评论

暂时没有评论,来抢沙发吧~