背景技术
在计算机或者其他电子***中的数据传输经常是这种***性能中的一个综合因素。不管计算机或者电子设备的中央处理单元(CPU)处理数据能有多快,如果数据不能以足够快的方式向CPU或从CPU通信,则***性能肯定受损。
一直用来改善数据传输性能的一种技术被称为直接存储器存取(DMA)。DMA使用一个专用控制器或者电路独立于CPU来处理数据传输,从而在数据的传输操作期间释放CPU以处理其他任务。通常,DMA用于在存储器和***设备或输入/输出(I/O)设备诸如扩展卡、网络端口、存储设备等之间传输数据。
常规DMA控制器通常很少需要CPU的照料以处理数据操作。通常,需要CPU来使DMA控制器初始化以处理一次特定的传输操作,例如通过指定操作的源和目的地和要传输的数据量。DMA控制逻辑通常包括一个字节计数器,它由CPU初始化以设定在一个操作中要传输的数据的总字节数。
一旦一个数据传输操作由CPU起动后,DMA控制逻辑就将开始传输数据,而不需CPU的任何进一步干预。在数据传输操作期间,随着DMA控制逻辑传输每一数据字节,它将字节计数器减量,直到字节计数器达到零。此时,DMA控制逻辑可以给CPU发送一个中断信号,通知CPU数据传输操作已完成。
经常使用DMA的许多***设备依赖于相对简单的协议。一些设备例如是基于字符的设备,它们在有字符可提供时给DMA控制逻辑发送信号。在这种实例中要传输的进入字符数通常是基于规则的(亦即它要么是常数要么是由协议动态定义的)。另一种设备是块设备,这些设备使用固定块大小来给DMA控制逻辑中的字节计数器编程。
另外一些***设备不那样简单。例如,通用串行总线(USB)性能规范定义了用于将***设备连接到计算机的串行数据传输协议。已开发出来的USB性能规范是用来支持范围宽广的***设备的,它们包括显示器、音频扬声器、打印机、鼠标、网络适配器、调制解调器等。这些设备都具有不同的能力和和数据传输特征,因此,USB性能规范定义了基于包的接口以便以标准化的方式包封数据来支持实际上是任何类型的***设备。然而,应该注意,在通过USB总线通信的任何数据包中包含的信息量既非一致的也是不可预测的。
另外,基础的USB协议并不简单。例如,在USB 2.0性能规范下,有4个通信协议,称为控制、批量、中断和等时。控制协议支持双向数据传输。中断和等时协议在本质上是周期性的,具有得到保证的交付日程,而等时协议不能被抑制(亦即它是实时协议)。在各个单独端点上持续不变的数据速率可能达到192Mb/s。
由于USB协议的几个特别的细微差别,常规DMA控制逻辑不太适合结合到用于USB设备的控制器中。
首先,USB设备不容易适合于加载一个字节计数到DMA字节计数器中,并且当字节计数用尽时自动关掉DMA控制逻辑和结束数据传输操作的范例。在USB性能规范下,在单一数据包内接收到的字节数目得不到保证。此外,对于实时的等时协议,消息长度是不相干的,而对于周期性的中断或非周期性的批量和控制协议,在数据被收到时消息长度经常是不知道的。
因为无论在一个消息内的总数据字节数还是在一个消息的单一包中的字节数并非总是可预测的,因此常规USB的实现通常作出简化的假设,即以包为基础关掉DMA控制逻辑。然而,通过这样做,CPU所需要的监督量常常增加,从而降低了***性能。
第二,许多CPU太慢以致不能介入某些与USB有关的DMA传输。如上所述,实时等时协议不能被调节,并且支持高达192Mb/s的持续数据速率。在单一USB数据包中可以传输的最大字节数是1024字节,所以在最大持续速率的情况下,USB控制器中的常规DMA控制逻辑对于它所服务的每一高带宽端点平均每43μs被关掉一次。另一方面,Linux操作***的嵌入实时版本需要大约100条指令和对堆栈进行50次访问以便把程序控制引导到一个中断控制器例程并返回。取决于处理器和存储器总线速度和超高速缓存存储器的大小,该***的开销通常在2到5μs范围内,而且该开销甚至不包括实际使中断处理器执行的时间。这一开销只代表一个端点,而即使对于双缓存的端点,常规DMA控制逻辑也要求能在17μs内重新起动和完成1024字节的传输,否则会丢失数据。其结果,许多CPU不能可靠介入高带宽等时传输。
第三,现代的总线结构经常能够损坏与USB有关的DMA数据内容。具体说,常规DMA控制器是面向字节的,而大多数调制解调器总线结构是面向字的。其结果,如果在一个数据包中接收到的字节数不是总线字大小的倍数的话,则常规DMA控制器执行最后字节的传输时只具有部分有效数据。在该最后字传输中剩余的数据是无效的,这样,如果该数据是指定用于一个块设备(诸如海量存储设备)的,则要求在CPU上执行的软件能保存接收到的包的大小,执行部分字的调整(这可能十分麻烦),进行必需的块溢出调整和每当数据传输操作完成时重新起动DMA控制器。这种开销也正是DMA所要提出的那种CPU开销类型,因此,为了处理与USB有关的DMA传输而要求的CPU监督的程度是不希望的。
这样,在DMA控制逻辑的技术中存在特别的需要,它解决常规DMA控制器设计中的上述限制,特别是解决每当这种控制逻辑结合与USB有关的数据传输及其类似传输使用时所产生的缺点。
具体实施方式
这里说明的实施例使用DMA控制器的一个或者多个改进来优化在不一致的DMA应用诸如USB有关应用特别是与USB2.0性能规范兼容的应用中的DMA传输操作的性能。然而,应该理解,下面说明的各种改进彼此可以单独使用。此外,这里说明的改进可以在非USB兼容应用的应用中具有实用性。因此,本发明不限于这里所说明的特定实现。
现在转向附图,其中相似的编号在几个视图中都指示相似的部件,图1表示根据本发明的含有DMA控制器的装置10的示例硬件和软件环境。为了本发明的目的,装置10实际上可以表示任何类型的计算机、计算机***或者能够作为一个USB主设备使用的其他可编程电子设备,包括客户计算机、服务器计算机、便携计算机、手持计算机、和嵌入式控制器等。装置10在下面也可以称为“计算机”,虽然应该理解,术语“装置”还可以包括与本发明一致的其他适合的可编程电子设备。
此外,应该理解,根据本发明的DMA控制器也可以用在USB从设备中。另外,这里描述的许多特征也可以在其他存储器传输应用,包括其他USB性能规范版本、以及一些非USB应用中使用的DMA控制器中实现。因此,本发明不限于下面说明的特定的USB主实现方案。
计算机10通常包括***总线12,其上连接有中央处理单元(CPU)14,CPU14包括连接到存储器16上的一个或者多个微处理器,存储器16可以表示包括随机存取存储器(RAM)器件,计算机10的主存储器,以及任何补充级别的存储器,例如超高速缓存存储器、非易失或者备份存储器(例如可编程或快闪存储器)、只读存储器等。另外,存储器16可以认为包括物理上位于计算机10中任何地方的存储器,例如在CPU14中的一个处理器中的超高速缓存存储器,以及用作虚拟存储器的任何存储能力,例如在海量存储设备或者在和计算机10连接的另一台计算机上存储的虚拟存储器。
为提供USB连接性,USB控制器18另外连接到***总线12。另外,在计算机10中可能使用的其他输入/输出(I/O)功能,例如海量存储设备、网络适配器、工作站适配器、外部输入设备诸如鼠标和键盘、视频显示器和适配器等,总体上由I/O块20表示,它也表示为连接到***总线12上。
所示的与USB2.0性能规范兼容且总体上用USB接线22与***总线12相连接的USB控制器18表示一个或者多个USB网络。USB控制器18定义一个设备端口,它通常支持一个或者多个USB通道24(也表示为通道0...N)。此外,与每一通道24关联的是一个简档寄存器26,它在下面讨论,它用于根据在每一通道上要传输的特定数据类型配置该通道以使性能最优。
每一通道24包括一个端点28,在其内部含有一个由控制逻辑电路32控制的先进先出(FIFO)缓冲器30。每一通道24还包括一个DMA控制器34,它包括由DMA控制逻辑电路38控制的一个FIFO缓冲器36。控制逻辑电路38还控制一个关联的监视定时器40的操作,该监视定时器40被配置为作为超时条件的结果在***总线12上发布一个中断(中断0)。
在每一通道内的控制逻辑电路32、38的操作是基于存储在与该通道24关联的简档寄存器中的简档信息而定制的。一旦被配置后,电路32、38就在USB布线22和可通过***总线12访问的一个寄存器或者存储器之间传输数据,如由传输路径42所示,其方式遵照USB2.0性能规范。
应该理解,USB控制器20通常是在包含一个或者多个集成电路器件以及另外的支持电子部件的电路结构中实现的。例如,每一DMA控制器34可以在相同或者不同集成电路器件中作为每一端点28来实现,而用于每一通道的控制电路可以在相同或者不同集成电路器件上实现。USB控制器还可以与另外的电路,例如***总线12、CPU14、存储器16、和/或I/O块集成而实现,例如在芯片上***(SOC)中实现。
此外,为每一通道24的USB控制器可以认为是一个单独的DMA控制器或在单一DMA控制器内的逻辑电路。
如在技术中所公知的,集成电路器件通常使用一个或者多个这里称为硬件定义程序的计算机数据文件而设计和制作,该程序规定了在该设备上的电路结构的布局。所述程序通常由设计工具产生,并随后在制造期间使用以产生布局掩膜,后者规定了制作在半导体晶片上的电路结构。通常,使用硬件定义语言(HDL)诸如VHDL、verilog、EDIF等以预定格式提供所述程序。虽然本发明已经或者以后将要在以全功能集成电路器件和使用这种器件的数据处理***中实现的电路结构的环境中说明,但是本领域的技术人员将会理解,根据本发明的电路结构也可以作为以各种形式的程序产品发布,而且不管用于实际执行这一发布的信号承载介质的特定类型如何,本发明都同样适用。信号承载介质的例子包括但不限于可记录型介质,诸如易失和非易失存储器设备、软盘和其他可移动盘、硬盘驱动器、磁带、光盘(例如CD-ROM,DVD等)等等,以及传输型介质,诸如数字和模拟通信链路。
从软件观点出发,对USB设备功能性的支持通常在USB驱动器44中实现,表示作为操作***46的一个部件驻留在存储器16中。USB数据通常由各种应用软件48使用,这在技术中是公知的。除其他功能外,USB驱动器44能够配置USB控制器20的每一通道24,包括为了用于传输各种类型USB数据而使每一DMA控制器34的性能最优化。
应该理解,为实现在本发明的各个实施例中使用的任何功能的例行程序,不管它是操作***的一部分或者一个特定的应用、部件、程序、对象、模块或指令序列,或者甚至其子集,这里都将称为“计算机程序代码”或者简称为“程序代码”。程序代码通常包括一条或多条指令,它(们)在任何时候都常驻在计算机中各种存储器和存储设备中,并当由计算机中的一个或者多个处理器或者在可编程电子设备中的任何其他可编程逻辑读取或执行时引起该计算机或设备执行各个步骤,这些步骤是执行体现本发明的各个方面的步骤或元件所必需的。此外,尽管本发明已经或者在以后将用全功能计算机或电子设备的环境来说明,但是熟悉本技术领域的人员理解,本发明的各种实施例能够以各种形式的程序产品发布,而且不管用于实际执行这一分发的信号承载介质的特定类型如何,本发明都同样适用。
另外,通常可以把程序功能以无穷数量的方式组织到例行程序、过程、方法、模块、对象或类似程序中,同样可以把程序功能分配到常驻在典型的计算机或电子设备内的各种软件层级中(例如操作***,库,API,应用程序,小应用程序等),在这样的情况下,应该理解,本发明不限于这里说明的程序功能的特定组织和分配。另外,这里说明的功能在硬件和软件之间的确切分配并不限制本发明,在其他的实现中也可以使用不同的分配。
熟悉本技术领域的人员了解,在图1中描绘的示例环境不想要限制本发明。的确,熟悉本技术领域的人员了解,可以使用其他可选硬件和/或软件环境而不背离本发明的范围。
为提供USB环境中的最优性能,USB控制器(特别是其中的每一个DMA控制逻辑电路)支持一系列的改进以利于高带宽的数据速率(例如由USB2.0性能规范支持的192Mb/s带宽),以及使软件开销简化和最小化。一系列这样的改进在图2中详细表示,图2表示为图1的一个DMA通道的DMA控制器控制逻辑38的示例配置。应该注意,FIFO和通过DMA通道的总数据流从图2中被省略了。
具体是,每一DMA控制逻辑电路包括一个状态机50,它可以由一个简档解码器52动态地配置,该简档解码器52从该DMA通道的关联的简档寄存器供给简档标识符。简档解码器产生多个配置信号,包括起动计数寄存器信号、起动包结束信号、起动字节计数信号、起动错误计数信号、起动监视信号、和部分字推迟信号。在另一可选的方案中,由解码器提供的各种信号可以直接映射到简档寄存器26中的各个位中,从而不需要简档解码器52。在该实例中,USB驱动器的责任是设定简档寄存器26中的相应各个位。
对于常规DMA控制器的一个改进是DMA计数寄存器54,它可以被有选择地失效,例如响应来自解码器52的起动计数寄存器的信号。另一个改进,如上所述,是端点监视定时器40,它例如可以响应来自解码器52的起动监视信号而被起动。当被起动时(例如通过来自状态机50的起动信号),端点监视定时器响应对在相关DMA通道上的数据包的接收(例如响应由状态机50产生的复位信号)而被复位,使得如果在指定时间后未接收到数据包,则触发一个中断,并可选地把推迟的部分字(如果有的话)传输。在一个另外可选的实现中,监视定时器40可以直接通过来自解码器52的起动监视信号而被起动,并且该定时器可以直接监视DMA通道上的数据传输。
此外,通过在状态机50中将有选择地失效的计数寄存器、端点监视定时器和包结束检测电路组合,可以由每一DMA控制逻辑电路支持多种DMA操作方式。此外,操作方式例如可以通过来自解码器52的起动计数寄存器、起动包结束和/或起动监视等信号来选择。可用方式如下:
●传统方式:用要传输的字节数加载DMA计数寄存器54。当计数用尽时,DMA控制逻辑电路自动失效。
●包结束方式:DMA控制逻辑电路,一旦起动,就传输到来的数据包的全部内容。使DMA计数寄存器54失效,因此它基本上被忽略。一个包结束检测电路(例如在状态机50中)被用于在USB总线上收到包结束信号时发送一个中断信号。
●连续方式:DMA控制逻辑电路一旦起动,它就传输到来的数据,直到由软件禁止。同样,使DMA计数寄存器54失效。此外,可以由端点监视定时器40的到期来检测数据传输的完成。
由每一DMA控制逻辑电路支持的另一个特征是部分字推迟特征,它由来自解码器52的部分字推迟信号所起动,并且它决定来到的数据包中的字节数是否是DMA字长的倍数。如果不是,则这一特征推迟最后一个字的DMA传输,直到接收到更多数据,从而防止在DMA传输操作的最后字中传输无效数据。
可以被支持的另外的特征包括跨越包边界字节计数器、条件停止和错误计数器寄存器。具体说,每一DMA通道可以包括一个相关的跨越包边界字节计数器56,它可以在软件控制下被复位,用于积累在每一进入的数据包中接收到的字节数。计数器继续积累直到由软件复位,这将使其能够例如跟踪多个包的消息的长度。可以由解码器52产生的起动字节计数信号来起动字节计数器56。
每一DMA控制逻辑电路还可以支持条件停止,从而可以在软件控制下通过设定条件停止功能(例如通过由状态机50接收到的条件停止信号)动态地关掉一个DMA通道。然而,如果当该软件设定条件停止功能时一个DMA传输正在进行,则活动的传输将把当前包完成,然后才关掉控制逻辑。这一特征例如在与连续操作方式一起使用时也许有用,这样,如果DMA通道的端点监视定时器产生中断的话,则在软件能够处理该中断并且关掉DMA控制电路之前到达的任何新数据包都将被完整地传输。
还可以使一个错误计数器寄存器58与每一DMA通道关联。这种寄存器被配置成每当DMA控制逻辑检测到一个错误时就将其更新。可以使用软件来复位该计数器,该计数器可以连续计数直到被复位。检测到的错误包括与数据的DMA传输相关的任一和所有问题,包括例如与USB等时协议相关的可能发生的溢出错误。可以由解码器52产生的起动错误计数器信号来起动错误计数器58。
另外,每一DMA控制逻辑电路希望由包括前述USB简档寄存器26的一个USB简档电路来配置。在每一简档寄存器存储的简档信息主要基于其相关通道正使用的USB协议,使得全部DMA通道可以基于在该寄存器中存储的简档数据而被恰当配置。
这样,使用DMA通道中的DMA控制逻辑的软件通常不需要理解设定和处理由USB性能规范所支持的各种通信协议的复杂性。该软件只需指定端点所支持的协议相匹配的简档以及设备的接口类型(基于存储器或寄存器的)。然后从这一选择可以自动配置硬件。
例如,简档寄存器可以支持下面表1中所示的简档。应该理解,可以使用其他简档映射作为另外可选的方案。此外应该理解,可以使用对寄存器中简档信息进行编码的各种方式。例如,11种所支持的简档可以用4位寄存器编码。在另一种方案中,每一可选特征可以被指定给寄存器中的一个或者多个位,从而软件能把一个编码值写入简档寄存器来设定所有必需的简档选项,如上所述。
表1:简档寄存器映射
值 |
协议 |
应用接口 |
简档内容 |
1 |
控制OUT |
存储器 |
DMA包结束方式,跨越包边界计数器,错误计数器 |
2 |
控制IN |
存储器 |
DMA传统方式,错误计数器 |
3 |
批量OUT |
存储器 |
DMA传统方式,部分字保持,错误计数器,跨越包边界计数器,监视定时器 |
4 |
批量IN |
存储器 |
DMA传统方式,错误计数器 |
5 |
中断OUT |
存储器 |
DMA传统方式,监视定时器,部分字推迟,错误计数器,跨越包边界计数器 |
6 |
中断OUT |
寄存器/FIFO |
DMA连续方式,错误计数器寄存器中断,监视定时器 |
7 |
中断IN |
存储器<或>寄存器/FIFO |
DMA传统方式,错误计数器 |
8 |
等时OUT |
存储器 |
DMA传统方式,监视定时器,部分字推迟,错误计数器,跨越包边界计数器 |
9 |
等时OUT |
寄存器/FIFO |
DMA连续方式,错误计数器寄存器中断,监视定时器 |
10 |
等时IN |
存储器 |
DMA传统方式,错误计数器 |
11 |
等时IN |
寄存器/FIFO |
DMA连续方式,错误计数器寄存器中断 |
对于每一简档,“错误计数器”表示错误计数器被起动,而“错误计数器寄存器中断”表示错误计数器被起动和每当错误计数器被更新时要触发一个中断。
在图示的实施例中,当需要时,DMA地址寄存器和DMA计数寄存器是由简档寄存器分别编程的。此外,在一些实现中希望允许在DMA通道空间中的任一或者全部寄存器在申请一个简档后通过简档寄存器被重写,以便允许通过软件控制定制一个特定的简档。在另外的实现中,不可以使用简档寄存器,每一相关的特征和寄存器是为特定USB协议恰当地设定的。
从上述的表可以看出,当端点支持等时协议和数据直接在端点FIFO和设备FIFO之间通过时主要使用DMA连续方式。在这一方式中,使DMA计数寄存器失效,任何错误都被积累到错误计数器寄存器中。软件或者可以在周期的基础上轮询该错误计数器寄存器,或者可以当该寄存器被增量时引起触发一个中断。然而,在这种方式下,希望不会因错误而引起DMA控制逻辑电路被关掉。还可能希望如果设备FIFO不能接受部分字传输的话能使用部分字保持特征。另外,如在方式9中指出的,也许希望使用端点监视定时器来检测实时传输中的中断。
从上述还可以看出,主要为支持控制协议而使用DMA包结束方式。在这一环境中,具有经常不确定长度的非实时信息的小包被零星接收。DMA控制逻辑电路在接收任何长度的单个包后关断。无论是部分字保持特征还是端点监视定时器都不需要或被使用,DMA计数寄存器也是这样。可选地使用跨越包边界字节计数器来确定在该包中接收到的字节数,并且可以周期地轮询错误计数器寄存器或者可以响应在数据包传输期间接收到的错误而产生中断。
对于所有其他方式,可以使用DMA传统方式。例如,当海量存储(块)设备从一个支持批量传输协议的端点接收数据时,DMA传统方式可以十分有用。DMA计数器寄存器可以装入块大小的倍数,其中数据从各个包写入各存储器块。然而,为充满这些存储器块所需要的包的数目是透明的。当充满了指定的块数时(亦即计数器寄存器用尽),可以关掉DMA控制逻辑电路。也许希望使用部分字推迟特征来保证在存储器块中不发生无效数据间隙。另外,也可能希望使用端点监视定时器以检测没有充分接收到数据。
应该理解,利用当前公开的内容,这里说明的在DMA控制逻辑中的改进的实现将完全在熟悉本计数领域的人员的能力之内。
这里说明的改进的DMA控制器的软件控制一般地但并非必需地要利用,由如上所述的USB驱动器来管理。例如,图3表示一个示例性的初始化例行程序60,它可以由一个USB驱动器执行以恰当地配置一个USB控制器的每一端点,以便利用这些设备的最优协议来和特定的USB设备进行交互作用。
例行程序60在块62开始,它设定一个端点变量以选择由该控制器支持的第一端点。然后块64把一个索引变量初始化以便为该端点选择相关联的USB简档寄存器。
接着,在块66,这里决定是否应该把第一端点配置为控制端点,例如根据是否期望使用该USB控制协议来通过该端点传输数据。如果是这样,则将控制传到决68,以便将那个端点(通过索引变量选择)的简档寄存器设定为识别相应的简档的控制标识值。一旦设定后,将控制传给块70和72来使索引和端点变量增量。然后将控制传到块74以决定该USB控制器的最后端点是否已经处理。如果不是,则将控制传到块66来处理另外的端点。否则,例行程序60就告完成。
返回到块66,这时决定下一端点不应该配置为控制端点,将控制传到块76以决定该端点是否应该被配置为批量端点,例如根据是否期望使用USB批量协议来通过该端点传输数据。如果是,则将控制传给块78,以便将那个端点的简档寄存器设定为识别相应的简档的批量标识值。一旦设定后,就把控制传给块70和72来使索引和端点变量增量,然后传给块74以处理所有剩余的端点,如果有的话。
接着,返回到块76,这时决定下一端点不应该配置为批量端点,将控制传给块80以决定该端点是否应该被配置为中断端点,例如根据是否期望使用USB中断协议来通过该端点传输数据。如果是,则将控制传给块82,以便把那个端点的简档寄存器设定为识别相应的简档的中断标识值。一旦设定后,就将控制传给块70和72来把索引和端点变量增量,然后传给块74以处理所有剩余的端点,如果有的话。
接着,返回到块80,这时决定下一端点不应该配置为中断端点,把控制传给块84以决定该端点是否应该被配置为等时端点,例如根据是否期望使用USB等时协议来通过该端点传输数据。如果是,则将控制传给块86,以便将那个端点的简档寄存器设定为识别相应的简档的等时标识值。一旦设定后,就将控制传给块70和72来使索引和端点变量增量,然后传给块74以处理所有剩余的端点,如果有的话。
如上所述,为了进一步把一个端点初始化以用于DMA传输,USB驱动器为通过该DMA通道的DMA传输分别配置DMA地址寄存器以识别适当的源和/或目的地。另外,如果选择了传统方式,则把该DMA计数寄存器也相应地设定。一旦配置后,用于该DMA通道的DMA控制器就独立于软件管理数据传输,如同常规DMA控制器一样。
下面图4表示一个示例性的中断处理例行程序100,它可以由USB驱动器响应由在该USB控制器中的一个特定端点产生的中断而执行。例行程序100在块102开始,它获得产生中断的端点的身份。接着,在块104决定是否检测到错误,例如通过轮询DMA控制器中的错误计数器寄存器。如果是,则把控制传给块106以报告该错误,使得该错误被适当处理。然后例行程序100完成。
返回到块104,如果没有检测到错误,则把控制传到块108,决定是否已经接收到USB消息的最后的数据包。具体说,例行程序100可以轮询DMA控制器中适当的字节以决定是否已经接收到USB消息的所有数据(例如根据驱动器跟踪一个到来消息)。如果尚未接收到最后的包,则例行程序100结束。否则,块108把控制传给块110以决定该端点的DMA控制器是否仍然在工作。如果是,则块110把控制传给块112以关掉DMA控制器(例如通过建立一个条件停止信号)。然后把控制传给块114来揭示一个“消息完成”状态,使得在USB驱动器中的其他程序代码以常规方式进行该消息的处理。然后例行程序100完成。返回块110,如果DMA控制器当前未起动,则控制直接传给块114来揭示“消息完成”状态,并结束例行程序100。
对于图示实施例可以进行各种修改而不离开本发明的精神和范围。因此,本发明建立在下面所附的权利要求上。