CN101937406B - 一种VxWorks操作系统中实现驱动1394设备的方法和系统 - Google Patents
一种VxWorks操作系统中实现驱动1394设备的方法和系统 Download PDFInfo
- Publication number
- CN101937406B CN101937406B CN2009101081611A CN200910108161A CN101937406B CN 101937406 B CN101937406 B CN 101937406B CN 2009101081611 A CN2009101081611 A CN 2009101081611A CN 200910108161 A CN200910108161 A CN 200910108161A CN 101937406 B CN101937406 B CN 101937406B
- Authority
- CN
- China
- Prior art keywords
- descriptor
- dma
- register
- data packet
- setting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Communication Control (AREA)
Abstract
本发明提供了一种VxWorks操作系统中实现驱动1394设备的方法和系统,其中方法包括步骤:a)初始化;b)中断处理;c)使能DMA读写,接收和发送数据。系统包括:初始化单元,用于设置链路层芯片的相关寄存器和物理层寄存器的相关位,使处于准备状态,初始化DMA接收描述符和DMA发送描述符;中断处理单元,用于处理各类中断;数据发送单元,以DMA方式发送数据;数据接收单元,以DMA方式接收数据。本发明实现了在VxWorks操作系统下驱动1394设备。
Description
技术领域
本发明涉及计算机技术领域,更具体地说,涉及一种VxWorks操作系统中实现驱动1394设备的方法和系统。
背景技术
IEEE(Institute of Electrical and Electronics Engineers,美国电气和电子工程师协会)1394是由苹果(APPLE)公司提出的一种高速串行接口标准,苹果公司称之为FireWire(火线),索尼(Sony)称之为i.Link,德州仪器(TexasInstruments)称之为Lynx。1995年,IEEE制定并颁布了IEEE 1394-1995标准,并在2000年推出了IEEE 1394A标准,可以支持100Mbps、200Mbps和400Mbps的传输速率。在最新的IEEE1394B标准中,支持的传输速率提高到了800Mbps、1.6Gbps和3.2Gbps。
IEEE1394总线除了传输速率高外,还具有接口简单,使用方便,良好的兼容性和可升级性等优点,并且可以独立于主机,支持点到点的连接,各个节点可以脱离主机自主执行事务。该标准自发布以来已经得到了很多国内外的知名IT厂商的关注和大力的支持,许多厂商为了使该技术能够广泛应用和推广,而设计出基于OHCI规范的链路层芯片,使得通过CPU控制链路层芯片来实现点到点的数据交互成为一种可能。
VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(Real-Time Operating System,RTOS),是嵌入式开发环境的关键组成部分。其良好的持续发展能力、高性能的内核、高可靠性和卓越的实时性被广泛应用在通信、军事、航空、航天等精尖技术及实时性要求极高的领域中。作为一个计算机系统,不可避免的需要使用外部I/O设备,正是I/O设备的驱动程序为其提供了可访问性和可操作性。目前,VxWorks操作系统提供了对多种I/O设备驱动程序包括串口、并口、网卡、ATA等的支持,但是没有提供对具有1394标准接口的外部设备(简称1394设备)的驱动支持,而鉴于1394设备的应用日益广泛和诸多的优越性,在VxWorks操作系统中实现驱动1394设备是非常有必要的。
发明内容
本发明的目的在于针对现有技术的不足和缺陷,提供一种在VxWorks操作系统中实现驱动具有1394设备的方法和系统。
为实现上述目的,本发明实施例提供了如下技术方案:一种VxWorks操作系统中实现驱动1394设备的方法,包括步骤:
a)初始化;
b)中断处理;
c)使能DMA读写,接收和发送数据。
所述a)初始化进一步包括步骤:
a1)设置链路层寄存器和物理层寄存器,使寄存器处于准备状态;
a2)初始化DMA接收描述符和DMA发送描述符;
a3)安装中断服务程序,通过设置链路层芯片的中断屏蔽寄存器来使中断打开;
a4)软复位总线,使能链路层。
所述a1)设置链路层寄存器和物理层寄存器,使寄存器处于准备状态具体包括步骤:
设置总线选项寄存器;设置主机控制器控制寄存器LPS位;设置节点标识和状态寄存器中的总线号;使能PostedWrites位;清除链路层控制寄存器;使能周期定时器和周期控制器;清除中断寄存器;设置自标识DMA缓存区并使能自标识DMA;设置配置ROM映射寄存器并初始化ConfigROM;获得最大数据包的大小,单位为字节;设置异步接收过滤寄存器;设置字节交换。
所述a2)初始化DMA接收描述符和DMA发送描述符具体包括步骤:
确定需要的发送描述符和接收描述符的个数;
为发送数据和接收数据分配内存空间;
初始化发送描述符链表和接收描述符链表;
将每一个描述符链表的头节点的地址赋值到相应的命令寄存器中,DMA控制器根据寄存器中的地址来进行命令解析。
所述为发送和接收数据分配内存空间具体实现为:一次性在物理内存空间内开辟一段连续的空间,分别存储发送和接收的数据包,所述连续空间划分成若干相等的内存块。发送缓冲区的单个内存块的大小是一个最大的数据包的大小,接收缓冲区的单个内存块大小是一个最大的数据包的大小的整数倍,整个存储空间是静态的,在运行过程中不释放。
所述DMA的读操作包括步骤:数据包上下文处理任务接收到DMA的中断产生的信号后,在当前的接收描述符中查询是否有数据包过来,并且判断是否有跨描述符,然后根据获得的信息将接收数据包的地址和大小一起通过消息队列的方式传递给解包任务。
所述DMA的写操作包括步骤:应用程序将需要发送的数据包封装好后,先将数据包的信息放入到一个动态的链表中,然后依次从按照发送描述符的格式来插入到发送描述符链表中,通过设置相应的寄存器来启动DMA的发送,当发送第一个数据包完毕后会产生一个发送完成中断,在该中断中会继续从动态链表中获取数据包插入到描述符链表中,直到完成全部数据包的发送。
所述中断包括:不可恢复性中断,循环连续包中断,总线复位中断,请求发送完成中断,响应发送完成中断,请求包中断,响应包中断,等时接收中断,等时发送中断和自标识包中断。
一种VxWorks操作系统中实现驱动1394设备的系统,包括:
初始化单元,用于设置链路层芯片的相关寄存器和物理层寄存器的相关位,使处于准备状态,初始化DMA接收描述符和DMA发送描述符;
中断处理单元,用于处理各类中断;
数据发送单元,以DMA方式发送数据;
数据接收单元,以DMA方式接收数据。
所述初始化单元进一步包括:
寄存器初始化单元,用于设置总线选项寄存器;设置主机控制器控制寄存器中的LPS位;设置节点标识和状态寄存器中的总线号;使能PostedWrites位;清除链路层控制寄存器;使能周期定时器和周期控制器;清除中断寄存器;设置自标识DMA缓存区并使能自标识DMA;设置配置ROM映射寄存器并初始化ConfigROM;获得最大包的大小,单位为字节;设置异步接收过滤寄存器;设置字节交换;
内存分配单元,用于一次性在物理内存空间内开辟一段连续的空间,分别存储发送和接收的数据包,所述连续空间划分成若干相等的内存块;
DMA描述符初始化单元,用于初始化DMA发送描述符链表和DMA接收描述符链表;
中断挂接单元,用于挂接中断服务程序。
可见,与现有技术相比,本发明实施例提供的技术方案,实现了在VxWorks操作系统中驱动1394设备。
附图说明
图1为IEEE 1394硬件拓扑结构示意图;
图2为IEEE 1394协议栈结构示意图;
图3为IEEE 1394驱动架构示意图;
图4为IEEE 1394B两个设备之间的数据包流向图;
图5为本发明实施例提供的一种内存空间分配示意图;
图6为本发明实施例DMA接收描述符链表结构示意图;
图7为本发明实施例数据包接收数据流示意图;
图8为本发明实施例DMA发送描述符链表结构示意图;
图9为本发明实施例数据包发送数据流示意图;
图10为本发明实施例提供的一种VxWorks操作系统中实现驱动1394设备的方法流程图;
图11为本发明实施例提供的一种VxWorks操作系统中实现驱动1394设备的系统结构示意图。
具体实施方式
下面将结合附图及实施例对本发明作进一步说明,本发明实施例以在VxWorks操作系统中驱动具有1394标准接口的外部设备,特别是以驱动德州仪器(TI)公司推出的OHCI(Open Host Controller Interface)链路层芯片和物理层芯片为例来详细说明。
1394总线的拓扑结构是一个树形的结构,树形结构就是所有连接在一起的设备不能形成一个环(圈),否则就不能正常地工作,但是IEEE 1394B提出了一个避免环状结构的方法,即使设备连接形成一个环(圈)也能正常工作。
请参阅图1所示,图1为IEEE 1394B总线硬件拓扑结构。一个IEEE1394系统由众多可寻址的节点(node)组成,节点(node)是一个1394网络中的基本组成单位。
请参阅图2所示,图2为IEEE1394协议栈结构示意图。IEEE 1394标准定义了三个基本协议层,分别是事务层,链路层,物理层,用于在请求者和响应者之间的数据传输过程中完成相关的服务,后来新增加了总线管理层和应用层,每层负责完成自己的服务。本发明实施例是基于链路层中的异步传输模式来实现驱动的。
请参阅图3所示,图3为IEEE1394B驱动架构示意图,本发明实施例驱动只实现了协议栈中的数据链路层,提供了一些应用程序接口函数给用户,可以直接在应用层上调用该接口函数来进行数据包的DMA传送,将数据通过物理层和传输线缆到达接收的节点。
请参阅图4所示,图4为IEEE 1394B两个设备之间的数据包流向图,在点对点的数据传输中,节点一(发送端设备)中由应用程序来进行发起一个请求包,通过发送端的DMA经由1394的线缆传送到节点二(接收端设备),节点二通过接收DMA接收到数据包后传递给接收任务,接收任务根据包格式解包后发送一个响应数据包,通过其发送DMA经由1394线缆传送到节点一,然后节点一的接收DMA接收到响应数据包后传递给接收任务,这样完成了一次数据交互的过程。
数据链路层主要实现了接收DMA和发送DMA的数据描述符链表,该链表在内存中被维护,通过该链表和DMA控制器进行通讯。
请参阅图5所示,本发明采用统一的内存分配方案,即在初始化过程中,在物理内存中开辟一段连续的空间,分别存储发送和接收的数据包。整个存储空间为静态的,在运行过程中不释放。用于发送数据包的单个内存块的大小是一个最大的数据包的大小,用于接收数据包的单个内存块大小是一个最大的数据包的大小的整数倍。
目前,1394OHCI(Open Host Controller Interface,开放式主机控制接口协议)支持7种DMA(Direct Memory Access,直接内存访问)类型,每种DMA类型都有自己的寄存器空间,并且至少支持一个“逻辑数据流上下文(Context)”,即DMA通道。每个DMA通道由一个DMA上下文链表(Contextprogram)和另外两个寄存器:上下文控制寄存器(ContextControl register)和命令地址寄存器(CommandPtr register)组成。上下文链表是指DMA描述符链表,这个链表位于主内存中。描述符链表中的每个描述符定义了待传输的数据包格式和控制信息,并由相应的DMA控制器将数据放入对应的FIFO(First Input First Output,先进先出)数据缓存器中,然后发出中断请求。上下文控制寄存器可以控制DMA的开始和结束,并返回传输状态;命令地址寄存器用来保存描述符链表的开始地址以及描述符的个数。
为了满足驱动程序高效操作和实现的需要,本发明实施例定义了如下的几个数据结构:
DMA接收描述符结构体(DMA CMD)
DMA发送描述符结构体(AT_DMA_PRG)
DMA接收上下文结构体(DMA_RCV_CTX)
DMA发送上下文结构体(DMA_TRM_CTX)
描述1394OHCI的结构体(TI_OHCI)
请参阅图6所示,图6为DMA接收描述符链表结构。图中接收DMA描述符指针(prg_cpu)用于保存在初始化时由用户来动态分配的指定个数的DMA接收描述符中的第一个描述符的地址。描述符指针0(prg_cpu[0])、描述符指针1(prg_cpu[1])、描述符指针2(prg_cpu[2])、描述符指针3(prg_cpu[3])到描述符指针N(prg_cpu[N])用于保存动态分配的每个描述符的地址。
所述控制位(Control),接收缓冲区地址(Data Address),下一个描述符地址(Branch Addres)以及状态位(Status)组成的一个块在数据结构上构成一个DMA_CMD结构体。需要说明的是,下一个描述符地址(BranchAddress)里面包含了两部分,一部分是下一个描述符的地址,一部分是一个4比特的标志位。该标志位用来标识该下一个描述符是否有效。如果是1则为有效,如果是0则为无效,且表示结束。
第一个描述符中的BanchAddress变量存放了下一个描述符的地址并且该标志位为1,第二个描述符的BranchAddress变量存放了第三个描述符的地址,并且设置该标志位为1,依次类推,直到最后一个描述符,最后一个描述符的BranchAddress变量存放了第一个描述符的地址,但是该标志位为0,表示结束,这样形成了一个环链。
接收缓冲区指针(buf_cpu)用于保存初始化时由用户分配的指定个数的DMA接收缓冲区的第一个缓冲区的地址,接收缓冲区指针0(buf_cpu[0])、接收缓冲区指针1(buf_cpu[1])、接收缓冲区指针2(buf_cpu[2])到接收缓冲区指针N(buf_cpu[N])保存了每一个DMA接收描述符对应的接收缓冲区的地址。
以上分配好之后,将第一个描述符的地址存放到异步接收命令指针寄存器中,异步接收DMA将会从该描述符来执行相关操作。当异步接收上下文设置寄存器的DMA启动位置位后,那么DMA接收机制将启动,只要有数据包从线缆上发送过来,该DMA接收控制器就把数据存放到指定的接收缓冲区。
请参阅图7所示,图7为数据包接收流程示意图。图中实线表示一次实际的操作,而虚线代表依次将要发生的操作。每个内存块的大小是数据包的整数倍。从内存块1到N的数据包地址和长度通过消息队列的方式传递给解析数据包任务。接收数据包的流程包括步骤:接收数据包时,数据包上下文处理任务接收到DMA的中断产生的信号后,在当前的接收描述符中查询是否有数据包过来,并且判断是否有跨描述符,然后根据获得的信息将接收数据包的地址和大小一起通过消息队列的方式(Vxworks系统中的功能)传递给解析数据包任务,接收的数据会依次放在如图5中的静态内存中。
本发明实施例中,因为数据包的大小可能是不确定的,但是每一个描述符对应的接收缓冲区(也就是分配好的内存中的某一块)有可能不是刚好装满剩余的空间,那么就需要使用下一个描述符对应的缓冲区来存放数据包的另一部分。本发明实施例中,每一个描述符对应的接收缓冲区在内存中是连续的,但是缓冲区长度是有限的,最终总会到末尾,如果在末尾发生跨描述符的情况,将会导致接收的数据包在内存中不完整,需要判断后手动从最后一个描述符号和第一个描述符中的缓冲区中根据指定的包的大小将这个数据包整合在一起就可以了。最后一个描述符号对应的缓冲区用完了将使用第一个接收缓冲区,DMA自动使用哪一个描述符是由描述符中的状态标识来判断的。举例说明,假设接收到了一个新的数据包,长度是9字节,它应该存放到当前的描述符指向的接收缓冲区。但是当前的描述符对应的缓冲区中由于上一次接收了数据包而只剩下空闲的5个字节,此时,当前的描述符对应的缓冲区接收完后需要使用下一个描述符对应的接收缓冲区的4字节。
请参阅图8所示,图8为DMA发送描述符链表结构。图8中的发送描述符链表由单个的发送描述符组成,根据需要和实际的情况来选择链表节点的个数。单个的发送描述符结构符合AT_DMA_PRG结构体。图中发送DMA描述符指针(prg_cpu)用于保存在初始化时由用户来动态分配的指定个数的DMA发送描述符中的第一个描述符的地址。发送描述符指针0(prg_cpu[0])、发送描述符指针1(prg_cpu[1])、发送描述符指针2(prg_cpu[2])、发送描述符指针3(prg_cpu[3])到发送描述符指针N(prg_cpu[N])保存了动态分配的每个描述符的地址。
需要进一步说明的是,图8中的“下一个描述符”的地址一栏中,包含了最低的4个比特位数值,称之为Z,用来表示发送所需要的16字节的命令块数值。由OHCI规范可知,带有*_Immdiate的描述符Z值为2,其它的描述符的Z为1,这样可以得知,如果带有数据负载,则Z值为3,否则为2。发送DMA可以知道当前的数据包需要使用的16字节的命令块的个数来决定是否发送完毕。
以上分配好之后,就可以用来发送数据包。
请参阅图9所示,图9为数据包发送流程示意图。图中实线表示一次实际的操作,而虚线代表依次将要发生的操作。每个内存块的大小是数据包的整数倍。发送数据包的流程包括步骤:
首先进行应用程序组包,把需要发送的数据包按照标准的格式填充好,驱动程序会将该数据包先挂到一个双向链表中。如果数据包很多,将依次往后排列。然后判断是否有空闲描述符号来决定是否继续发送该数据包,如果有则先用现有的描述符来发送可以发送的数据包,如果没有则等待,直到发送完成中断产生后将会有空闲的发送描述符。然后依次从待发送的双向链表中取数据包来插入到发送描述符中启动发送DMA进行发送,直到发送完毕。
本发明实施例中,使用三种命令描述符进行插包,和接收数据包不同。如果是没有负载(数据内容)的数据包,则使用OUTPUT_LAST_Immdiate描述符,如果是有负载(只有包头)的数据包,则使用OUTPUT_MORE_Immdiate描述符和OUTPUT_LAST描述符,完成将每一个数据包插入到发送描述符链表中。然后通过设置异步发送上下文设置寄存器中的相关位来启动DMA发送。
请参阅图10所示,图10为本发明实施例提供的一种初始化方法流程图,包括步骤:
步骤1001:设置链路层芯片的相关寄存器和物理层寄存器的相关位,使处于准备状态,具体包括以下步骤:
设置Bus options(总线选项)寄存器;
设置主机控制器控制(HCControl)寄存器中的LPS位,LPS称之为连接电源状态,是HCControl寄存器中的一个控制位,该位是用来使能链路层芯片和物理层芯片之间连接的一个控制位,使能以后,可以通过链路层芯片来执行物理层的读和写操作,否则,链路层将不能执行物理层的读写操作;
设置Node indentification and status(节点标识和状态)寄存器中的总线号;使能PostedWrites(通告写,是指在数据写到主机内存之前发送一个应答信号)位;
清除链路层控制寄存器;使能周期定时器和周期控制器;
清除中断寄存器;
设置自标识DMA缓存区并使能自标识DMA;
设置Configuration ROM mapping(配置ROM映射)寄存器并初始化Configrom;
获得最大包的大小,单位为字节;
设置异步接收过滤寄存器;
设置字节交换。
步骤1002:初始化DMA接收描述符和DMA发送描述符;
具体包括具体步骤:
确定所需要的发送描述符和接收描述符的个数,根据自己需要来设置;
为发送和接收数据分配内存空间;
初始化发送和接收描述符链表;
将每一个描述符链表的头节点的地址赋值到相应的命令寄存器中,DMA控制器根据寄存器中的地址来进行命令解析。
步骤1003:安装中断服务程序,通过设置链路层芯片的中断屏蔽寄存器来使中断打开;
需要说明的是,本发明实施例中是通过VxWorks操作系统的API(Application Programming Interface,应用程序接口)函数来安装,通过设置IntMask(中断屏蔽)寄存器来设置所需要的中断位。
本发明实施例中,DMA数据的接收和发送都需要对CPU申请中断来告诉程序的当前状态,系统处理的效率也可以体现在该中断处理函数中。当系统需要进入中断时,通过读取中断事件寄存器,判断是哪种类型的中断,本发明实施例中出现的中断类型包括但不局限于:不可恢复性中断,循环连续包中断,总线复位中断,请求发送完成中断,响应发送完成中断,请求包中断,响应包中断,等时接收中断,等时发送中断,自标识包中断等,如果有上述类型的中断发生,则首先清楚对应的中断标识位,然后处理该中断。
步骤1004:软复位总线,使能链路层;
需要说明的是,软复位总线,通过写物理寄存器的相关位来完成,使能链路层通过设置HCControl寄存器来完成。
根据上述的方法,本发明实施例还提供了一种VxWorks操作系统中实现驱动1394设备的系统,如图11所示,系统包括:
初始化单元1101,用于设置链路层芯片的相关寄存器和物理层寄存器的相关位,使处于准备状态,初始化DMA接收描述符和DMA发送描述符;
本发明实施例中,所述初始化单元1101进一步包括:
寄存器初始化单元11011,用于设置Bus options(总线选项)寄存器;设置HCControl(主机控制器控制)寄存器中的LPS位,LPS称之为连接电源状态,是HCControl寄存器中的一个控制位,该位是用来使能链路层芯片和物理层芯片之间连接的一个控制位,使能以后,可以通过链路层芯片来执行物理层的读和写操作,否则,链路层将不能执行物理层的读写操作;设置Nodeindentification and status(节点标识和状态)寄存器中的总线号;使能PostedWrites位;清除链路层控制寄存器;使能周期定时器和周期控制器;清除中断寄存器;设置自标识DMA缓存区并使能自标识DMA;设置Configuration ROM mapping(配置ROM映射)寄存器并初始化Configrom;获得最大包的大小,单位为字节;设置异步接收过滤寄存器;设置字节交换。
内存分配单元11012,一次性在物理内存空间内开辟一段连续的空间,分别存储发送和接收的数据包,所述连续空间划分成若干相等的内存块。发送缓冲区的单个内存块的大小是一个最大的数据包的大小,接收缓冲区的单个内存块大小是一个最大的数据包的大小的整数倍,整个存储空间是静态的,在运行过程中不释放;
DMA描述符初始化单元11013,用于初始化DMA发送描述符链表和DMA接收描述符链表;
中断挂接单元11014,用于挂接中断服务程序。
进一步的,本系统还包括:
中断处理单元1102,用于处理各类中断;
进一步的,本系统还包括:
数据发送单元1103,以DMA方式发送数据;
进一步的,本系统还包括:
数据接收单元1104,以DMA方式接收数据。
需要说明的是,本发明实施例提供的各单元之间的连接关系是为了清楚的阐释其信息交互控制过程的需要,因此仅视为逻辑上的连接关系,而不应仅限于物理连接。
通过上述系统,本发明提供的实施例实现了在VxWorks操作系统中对1394设备的驱动。
综上所述,本发明实施例以TI(Texas Instrument)公司推出的OHCI链路层芯片和物理层芯片为例,对本发明实施例的原理及实施方式进行了阐述。对于本技术领域人员来说,通过本发明实施例提供的技术方案即可开发出其他独立芯片的1394驱动程序。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本发明实施例应用了具体的实施例对本发明实施例的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明实施例的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明实施例的限制。
Claims (3)
1.一种VxWorks操作系统中实现驱动1394设备的方法,其特征在于,包括步骤:
a)初始化;
b)中断处理;
c)使能DMA读写,接收和发送数据;
所述a)初始化进一步包括步骤:
a1)设置链路层寄存器和物理层寄存器,使寄存器处于准备状态;
a2)初始化DMA接收描述符和DMA发送描述符;
a3)安装中断服务程序,通过设置链路层芯片的中断屏蔽寄存器来使中断打开;
a4)软复位总线,使能链路层;其中,
所述a1)设置链路层寄存器和物理层寄存器,使寄存器处于准备状态具体包括步骤:
设置总线选项寄存器;设置主机控制器控制寄存器LPS位;设置节点标识和状态寄存器中的总线号;使能PostedWrites位;清除链路层控制寄存器;使能周期定时器和周期控制器;清除中断寄存器;设置自标识DMA缓存区并使能自标识DMA;设置配置ROM映射寄存器并初始化ConfigROM;获得最大数据包的大小,单位为字节;设置异步接收过滤寄存器;设置字节交换;
所述a2)初始化DMA接收描述符和DMA发送描述符具体包括步骤:
确定需要的发送描述符和接收描述符的个数;
为发送数据和接收数据分配内存空间,所述为发送和接收数据分配内存空间具体实现为:一次性在物理内存空间内开辟一段连续的空间,分别存储发送和接收的数据包,所述连续空间划分成若干相等的内存块,发送缓冲区的单个内存块的大小是一个最大的数据包的大小,接收缓冲区的单个内存块大小是一个最大的数据包的大小的整数倍,整个存储空间是静态的,在运行过程中不释放;
初始化发送描述符链表和接收描述符链表;
将每一个描述符链表的头节点的地址赋值到相应的命令寄存器中,DMA控制器根据寄存器中的地址来进行命令解析;
在所述c)中,所述DMA的读操作包括步骤:数据包上下文处理任务接收到DMA的中断产生的信号后,在当前的接收描述符中查询是否有数据包过来,并且判断是否有跨描述符,然后根据获得的信息将接收数据包的地址和大小一起通过消息队列的方式传递给解包任务,所述跨描述符用于指示接收的数据包在内存中不完整,需要判断后从最后一个描述符号和第一个描述符中的缓冲区中根据指定的包的大小将这个数据包整合在一起;
在所述c)中,所述DMA的写操作包括步骤:应用程序将需要发送的数据包封装好后,先将数据包的信息放入到一个动态的链表中,然后依次按照发送描述符的格式来插入到发送描述符链表中,通过设置异步发送上下文设置寄存器中的相关位来启动DMA的发送,当发送第一个数据包完毕后会产生一个发送完成中断,在该中断中会继续从动态链表中获取数据包插入到描述符链表中,直到完成全部数据包的发送,其中,所述发送描述符的格式为:如果是没有数据内容的数据包,则使用OUTPUT_LAST_Immdiate描述符,如果是只有包头的数据包,则使用OUTPUT_MORE_Immdiate描述符和OUTPUT_LAST描述符。
2.根据权利要求1所述的方法,其特征在于,所述中断包括:不可恢复性中断,循环连续包中断,总线复位中断,请求发送完成中断,响应发送完成中断,请求包中断,响应包中断,等时接收中断,等时发送中断和自标识包中断。
3.一种VxWorks操作系统中实现驱动1394设备的系统,其特征在于,包括:
初始化单元,用于设置链路层芯片的相关寄存器和物理层寄存器的相关位,使处于准备状态,初始化DMA接收描述符和DMA发送描述符;
中断处理单元,用于处理各类中断;
数据发送单元,以DMA方式发送数据,其中,所述以DMA方式发送数 据包括:应用程序将需要发送的数据包封装好后,先将数据包的信息放入到一个动态的链表中,然后依次按照发送描述符的格式来插入到发送描述符链表中,通过设置异步发送上下文设置寄存器中的相关位来启动DMA的发送,当发送第一个数据包完毕后会产生一个发送完成中断,在该中断中会继续从动态链表中获取数据包插入到描述符链表中,直到完成全部数据包的发送,其中,所述发送描述符的格式为:如果是没有数据内容的数据包,则使用OUTPUT_LAST_Immdiate描述符,如果是只有包头的数据包,则使用OUTPUT_MORE_mmdiate描述符和OUTPUT_LAST描述符;
数据接收单元,以DMA方式接收数据,其中,所述以DMA方式接收数据包括:数据包上下文处理任务接收到DMA的中断产生的信号后,在当前的接收描述符中查询是否有数据包过来,并且判断是否有跨描述符,然后根据获得的信息将接收数据包的地址和大小一起通过消息队列的方式传递给解包任务,所述跨描述符用于指示接收的数据包在内存中不完整,需要判断后从最后一个描述符号和第一个描述符中的缓冲区中根据指定的包的大小将这个数据包整合在一起;
其中,所述初始化单元进一步包括:
寄存器初始化单元,用于设置总线选项寄存器;设置主机控制器控制寄存器中的LPS位;设置节点标识和状态寄存器中的总线号;使能PostedWrites位;清除链路层控制寄存器;使能周期定时器和周期控制器;清除中断寄存器;设置自标识DMA缓存区并使能自标识DMA;设置配置ROM映射寄存器并初始化ConfigROM;获得最大包的大小,单位为字节;设置异步接收过滤寄存器;设置字节交换;
内存分配单元,用于一次性在物理内存空间内开辟一段连续的空间,分别存储发送和接收的数据包,所述连续空间划分成若干相等的内存块,发送缓冲区的单个内存块的大小是一个最大的数据包的大小,接收缓冲区的单个内存块大小是一个最大的数据包的大小的整数倍,整个存储空间是静态的,在运行过程中不释放;
DMA描述符初始化单元,用于初始化DMA发送描述符链表和DMA接 收描述符链表;
中断挂接单元,用于挂接中断服务程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101081611A CN101937406B (zh) | 2009-06-29 | 2009-06-29 | 一种VxWorks操作系统中实现驱动1394设备的方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009101081611A CN101937406B (zh) | 2009-06-29 | 2009-06-29 | 一种VxWorks操作系统中实现驱动1394设备的方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101937406A CN101937406A (zh) | 2011-01-05 |
CN101937406B true CN101937406B (zh) | 2012-08-22 |
Family
ID=43390743
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009101081611A Active CN101937406B (zh) | 2009-06-29 | 2009-06-29 | 一种VxWorks操作系统中实现驱动1394设备的方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101937406B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102999381B (zh) * | 2011-09-09 | 2015-03-04 | 中国航天科工集团第三研究院第八三五七研究所 | 一种提高VxWorks实时性的CPCI设备中断复用方法 |
JP5829890B2 (ja) * | 2011-11-02 | 2015-12-09 | ルネサスエレクトロニクス株式会社 | 半導体データ処理装置、タイムトリガ通信システム及び通信システム |
CN102420763B (zh) * | 2011-12-07 | 2014-05-07 | 中国航空无线电电子研究所 | Dma发送方法 |
CN102752223B (zh) * | 2012-07-26 | 2014-11-05 | 杭州海康威视数字技术股份有限公司 | 并行系统间数据传输方法及其系统 |
CN103593437A (zh) * | 2013-11-14 | 2014-02-19 | 浪潮电子信息产业股份有限公司 | 一种基于dma的数据压缩芯片结构及其实现方法 |
CN103942069B (zh) * | 2014-04-01 | 2017-06-09 | 西安睿控创合电子科技有限公司 | 一种基于X86平台Vxworks操作系统的快速启动优化方法 |
CN105824762A (zh) * | 2016-03-15 | 2016-08-03 | 乐视移动智能信息技术(北京)有限公司 | 智能终端及其内存控制方法与装置 |
CN108462651A (zh) * | 2016-12-12 | 2018-08-28 | 中国航空工业集团公司西安航空计算技术研究所 | 一种采用dma链实现的1394异步流传输的方法 |
CN107729281B (zh) * | 2017-08-31 | 2019-11-15 | 北京计算机技术及应用研究所 | 一种基于RapidIO的高速传输实现方法 |
CN108228496B (zh) * | 2017-12-04 | 2020-10-02 | 北京旋极信息技术股份有限公司 | 一种直接内存访问内存管理方法、装置和主控设备 |
CN109714336A (zh) * | 2018-12-26 | 2019-05-03 | 吴海蒙 | 一种适用于多设备间通信的嵌入式modbus协议栈 |
CN111930648B (zh) * | 2020-08-07 | 2023-01-10 | 山东云海国创云计算装备产业创新中心有限公司 | 一种缓存配置方法、装置及电子设备和存储介质 |
CN112231266B (zh) * | 2020-10-15 | 2023-03-24 | 天津津航计算技术研究所 | 一种基于查找表的arinc 429总线控制方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101324831A (zh) * | 2007-06-15 | 2008-12-17 | 中国电子科技集团公司第四十一研究所 | 基于VxWorks的打印机驱动方法 |
-
2009
- 2009-06-29 CN CN2009101081611A patent/CN101937406B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101324831A (zh) * | 2007-06-15 | 2008-12-17 | 中国电子科技集团公司第四十一研究所 | 基于VxWorks的打印机驱动方法 |
Non-Patent Citations (1)
Title |
---|
曹松等.1394接口在嵌入式系统上的设计和实现.《数据采集与处理》.2004,第19卷(第3期), * |
Also Published As
Publication number | Publication date |
---|---|
CN101937406A (zh) | 2011-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101937406B (zh) | 一种VxWorks操作系统中实现驱动1394设备的方法和系统 | |
US6651119B2 (en) | Method for allocating priorities to plurality of DMA engines for processing data packets based on bus phase and transactions status | |
JP5917474B2 (ja) | 統合マルチ転送媒体コネクタを利用するシステム及びルーティング方法 | |
US8549204B2 (en) | Method and apparatus for scheduling transactions in a multi-speed bus environment | |
JP3497834B2 (ja) | ルートリピータ、usb通信システム、usb通信制御方法 | |
KR100666515B1 (ko) | 저장 및 포워드 스위치 장치, 시스템 및 방법 | |
US6947442B1 (en) | Data transfer control device and electronic equipment | |
US20080155145A1 (en) | Discovery of a Bridge Device in a SAS Communication System | |
JPH10326251A (ja) | Usb周辺マイクロコントローラ | |
CN102263698B (zh) | 虚拟通道的建立方法、数据传输的方法及线卡 | |
US6857028B1 (en) | Data transfer control device and electronic equipment | |
WO2012100724A1 (zh) | 在pcie总线上传输报文的方法、设备和系统 | |
US7249204B2 (en) | Data transfer control device electronic equipment and method data transfer control | |
JP4837659B2 (ja) | 分割トランザクションを処理するためのバス・コントローラ | |
JP4033915B2 (ja) | データストリーム制御方法及び装置 | |
US7127530B2 (en) | Command issuing apparatus for high-speed serial interface | |
WO2001006708A1 (fr) | Dispositif de gestion de transfert de donnees et appareil electronique | |
CN113468081B (zh) | 基于ebi总线的串口转udp的装置及方法 | |
CN106126452A (zh) | 基于IIC协议的Linux操作系统与裸机通信的方法 | |
JP2000224195A (ja) | データ伝送装置 | |
CN101071406A (zh) | 接口可配置的通用串行总线控制器 | |
CN118981443B (zh) | 一种集成电路扩展方法、装置、设备及存储介质 | |
TWI345711B (zh) | ||
KR101012208B1 (ko) | Usb디바이스 내의 엔드 포인트 메모리 효율 증대법 | |
JP4582180B2 (ja) | データ伝送装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20230705 Address after: 518000 1701, Yanxiang Science and Technology Building, No. 31, High-tech Middle 4th Road, Maling Community, Yuehai Street, Nanshan District, Shenzhen, Guangdong Province Patentee after: Shenzhen Yanxiang Smart Technology Co.,Ltd. Address before: 518057 Guangdong city of Shenzhen province Nanshan District high in the four EVOC Technology Building No. 31 Patentee before: EVOC INTELLIGENT TECHNOLOGY Co.,Ltd. |