解决数据流中断的方法及其装置 本发明是有关于一种解决数据流中断的方法及其装置,且特别是有关于一种使用于电脑系统中,应用于等时性(Isochronous)数据流的解决数据流中断的方法及其装置。
随着多媒体时代的来临,电脑中所传送的资料包含了很多种型态,例如文字资料,声音讯号,影像讯号等等。以文字资料与声音讯号为例,两者对于传送时所要求的条件并不相同。文字资料传送时,可以不必连续传送只求资料正确性。但对于声音资料而言,由于人耳对于声音连续性的感受很敏锐,所以声音讯号必须连续传输,才不致使听者听到不悦耳的声音。此类讯号称之为等时性数据流(Streaming data),也就是指必须连续而不可中断的资料型态,例如是声讯(Audio)或视讯(Video)等。
请参考图1,其所绘示为电脑中数据流传送的方框图。兹以声讯的数据流为例做说明,且数据流在硬件中的传送是由一驱动程序(Driver)来控制的。数据流在电脑中传送地路径例如为:首先应用程序将储存在硬盘102中的声音档案(Wave File),传送至存储器104中,其中,该存储器104是用以暂存声音资料(Data),以利于声音资料的处理。接着,作业系统程序透过驱动程序控制数字资料控制器(Digital Controller,DC)106。然后,数字资料控制器106将存储器104中的资料传送至讯号处理器108。最后,讯号处理器108将模拟的声音讯号传送至播音器110,用以播放声音。如此便完成声音讯号的传送,而使得使用者得以收听到电脑所要播放的声音。其中,存储器104除了暂存硬盘102中的声音档案之外,亦可储存从网路或外界而来的声音档案。请同时参考图1及图2,其中图2所绘示为传统数据流传送的流程图。首先,步骤202中,作业系统判断是否有资料要传送,若否,则结束本流程;若是,则进入步骤204,作业系统将储存在硬盘102中的资料传送至存储器104。接着,进入步骤206,驱动程序控制数字资料控制器106将资料从存储器104传送至讯号处理器108。然后,进入步骤208,由数字资料控制器106判断是否资料已经传送完毕,若否,则回到步骤206,继续传送;若是,则进入步骤210,由数字资料控制器106传送一个中断讯号(Interrupt)给驱动程序,在告知驱动程序资料已传送完毕之后,再回到步骤202。
兹针对数字资料处理器106将资料从存储器104传送至讯号处理器108之间的传送过程做进一步的探讨。在步骤210驱动程序接收了数字资料控制器106所传送的中断讯号之后,方回到步骤202,并进入步骤204,206。然后,驱动程序才再次命令数字资料控制器106抓取资料。在这段期间中,数字资料控制器106若无法传送任何资料至讯号处理器108,则会有资料中断的情形产生。如此,播音器110所播放出来的声音讯号也因此不连续,播音效果会因此大打折扣。
所以,数字资料处理器106将第一笔资料传送完毕一直到数字资料处理器106开始传送第二笔资料之间,会有一段资料中断期。以声讯为例,在实际的状况中,每笔资料的传输大约需要10ms,而此资料中断期大约是0.1ms,约为每笔资料的1%,因此,在播音时,会有噪音出现。
传统解决讯号不连续的做法是,在数字资料控制器106中加入了一个先入先出(FirstIn First Out,FIFO)寄存器(未示于图中),用以在数字资料控制器106中暂存资料。数字资料控制器106将从存储器104读取的资料推入(Push)先入先出寄存器中,然后,再将资料由先入先出寄存器提出(Pop)给讯号处理器108。若此先入先出寄存器的储存容量够大的话,在资料中断期的这段期间内,数字资料控制器106还是可以将暂存于先入先出寄存器中的资料提出,传送给讯号处理器108,如此便可解决讯号不连续的问题。
但是,若先入先出寄存器不够大,或是资料中断期的时间太长的话,仍然会产生数据流不连续的情形。再者,在硬件设计上,数字资料控制器106也必需另外利用相当数目的逻辑门(logic gate)来完成先入先出寄存器的设计。
有鉴于此,本发明的主要目的就是在提出一种解决数据流中断的方法及其装置,借由改变驱动程序的演算法及数字资料处理器的设计,便可达到极佳的效果。不仅节省硬件空间与制造成本,而且系统相当稳定。
根据本发明的目的,提出一种解决数据流中断的方法,是利用数字讯号控制器传送储存单元中的资料,该数字讯号控制器包括基底记录单元与触发记录器,该方法包括:首先,当要传送资料时,将资料的起始地址值写入基底记录单元中。接着,触发数字资料控制器,更改触发记录器的内容值,并同时回到本方法的起始步骤与下一步骤。然后,数字资料控制器传送基底记录单元中的起始地址值所对应的资料,且当数字资料控制器将资料传送完毕时,进入下一步骤。最后,当触发记录器的内容值有改变时,重复上一步骤。
根据本发明的另一目的,提出一种解决数据流中断的方法,该方法是利用数字讯号控制器传送储存单元中的资料,数字讯号控制器包括基底记录单元与触发记录器,该方法包括:(a)当有资料要传送时,进入步骤(b)。(b)将资料写入储存单元,并将资料的起始地址值写入基底记录单元。(c)触发数字资料控制器,若此时数字资料控制器正在传送资料时,则更改触发记录器的内容值,接着同时进入步骤(a)与步骤(d)。(d)当数字资料控制器判断出触发记录器的内容值有改变时,进入步骤(e)。(e)数字资料控制器传送基底记录单元中的起始地址值所对应的资料。以及(f)当资料传送完毕时,进入步骤(d)。
为让本发明的上述目的、特征、和优点能更明显易懂,下文特举一较佳实施例,并配合附图,作详细说明如下:
附图的简要说明:
图1绘示是电脑中数据流传送的方框图;
图2绘示是传统数据流传送的流程图;
图3绘示是依照本发明一较佳实施例的一种解决数据流中断的装置方框图。
图4绘示是本发明解决数据流中断的方法的流程图。
图5绘示是存储器中的散集描述表格示意图;
图6绘示是资料传送时的散集描述表格示意图。较佳实施例
请参考图3,其所绘示为依照本发明一较佳实施例的一种解决数据流中断的装置方框图。首先,驱动程序将储存在存储器104中,将要传送至讯号处理器108的第一笔资料的基底地址(亦即是第一笔资料的起始地址)写入数字资料控制器(Digital Controller,DC)302中的基底记录单元304。并触发数字资料控制器302,使数字资料控制器302开始进行资料传送。此时,不论第一笔资料是否已经传送完毕,驱动程序均可随时将所要传送的第二笔资料写入存储器104中,将位于存储器104中的第二笔资料的基底地址写入基底记录单元304,并触发数字资料控制器302。
若数字资料控制器302此时已将第一笔资料传送完毕,且驱动程序又同时触发数字资料控制器302,则数字资料控制器302自然会读取基底记录单元304的内容值,并且开始传输第二笔资料。但是,若数字资料控制器302尚未将第一笔资料传送完毕,而驱动程序又在此时触发数字资料控制器302,则此动作将使得数字资料控制器302中的触发记录器306的内容值改变。当第一笔资料传送完毕之时,因为数字资料控制器302此时可判断出触发记录器306的内容值有改变,所以数字资料控制器302立即可进行第二笔资料的传输动作。其中,将驱动程序触发数字资料控制器306的动作依次记录于触发记录器306中称之为将触发动作排队(Queue)起来。
其中,基底记录单元304可以是记录一个存储器地址的寄存器,或者基底记录单元304也可以是记录M个存储器地址的寄存器,而驱动程序则将所要传送的资料的起始地址值依序地写入基底记录单元304中。
而触发记录器306亦可例如为一个触发器(Flip-Flop),当驱动程序触发数字资料控制器302时,同时触发此触发器。而数字资料控制器302只要判断此触发器的输出电平是否有改变,即可得知驱动程序是否又再一次地触发了数字资料控制器302。
除此之外,触发记录器306更可以为一个可计数到M的计数器。如此,触发记录器306可以记录M次驱动程序触发数字资料控制器306动作。此时基底记录单元304例如是可以记录M个存储器地址的寄存器。
为了使说明更清楚起见,请参照图4,其所绘示为本发明解决数据流中断方法的流程图。首先,步骤402,由驱动程序判断是否中有一笔资料要传送。若是,则进入步骤404;若否,则结束本方法。步骤404,驱动程序将要传送的该笔资料写入存储器104中。接着,进入步骤406,驱动程序将该笔资料的起始地址值写入数字资料控制器302中的基底记录单元304。然后,进入步骤408,驱动程序触发数字资料控制器302。在步骤408之后,本方法同时进入步骤402与步骤410。
在步骤410中,数字资料控制器302开始传送该笔资料,亦即是数字资料控制器302根据基底记录单元304中所记录的资料起始地址值,找到该笔资料的存储器104中的起始地址,将该笔资料从存储器104传送至讯号处理器108。接着,进入步骤412,数字资料控制器302判断是否该笔资料已传送完毕。若是,则进入步骤414,若否,则回到步骤412。
在步骤414中,判断是否触发记录器306的内容值有改变。若否,则结束本方法;若有,则进入步骤416。当触发记录器306的内容值有改变时,表示驱动程序已经重复执行了步骤402~404。亦即是驱动程序判断出有另一笔资料要传送,而将此另一笔资料写入存储器中。且驱动程序亦将此另一笔资料的起始地址值记录于基底记录单元304中,并触发数字资料控制器302。在驱动程序触发数字资料控制器302的同时,因为数字资料控制器302正在传送资料,故此触发动作记录于触记录器306中,亦即是驱动程序将触发记录器306的内容值改变。
在步骤416中,数字资料控制器302开始传送另一笔资料,亦即是根据基底记录单元304中所记录的存储器地址值,将此另一笔资料由存储器104传送至讯号处理器108中。接着,进入步骤418,判断是否另一笔资料已传送完毕。若否,则回到步骤418;若是,则重复步骤414。
其中,执行步骤408之后,驱动程序由A路经重复执行步骤402~408,而数字资料控制器302由B路径进入步骤410。而在步骤412之后,数字资料控制器302则重复执行步骤414~418。驱动程序与数字资料控制器302可以同时个别执行其相关步骤,亦即是当驱动程序持续地执行步骤402~408时,数字资料控制器302则持续地执行步骤414~418。驱动程序在步骤408中触发数字资料控制器302一次。若此时数字资料控制器302并没有进行传送资料的动作,则进入步骤410。若此时数字资料控制器302正进行传送资料的动作,则此触发数字资料控制器302的动作则记录于触发控制器306中。等到执行到步骤414时,数字资料控制器302判断出触发记录器306中的内容值有改变,则接着执行步骤416与步骤418。
当数字资料控制器302传送资料时,驱动程序不间断地等待作业系统是否有下一笔资料要传送。若有,则在传统方法中,驱动程序必须等到数字资料控制器302将资料传送完毕,再传送一个中断讯号给驱动程序之后,驱动程序方才触发数字资料控制器302来传送下一笔资料。如此会产生数据流中断的问题(除非数字资料控制器302有先入先出缓冲器(Budder)的设计,但如此则增加逻辑门的数目)。在本发明中,驱动程序并不需要等到接收到中断讯号之后,才触发数字资料控制器302来传送下一笔资料。而是只要驱动程序判断出有资料要传送,驱动程序便可立刻将要传送的资料写入存储器104中,并将资料在存储器104中的起始地址值写入基底记录单元304,并更改触发记录器306的内容值。而当数字资料控制器302已将前一笔资料传送完毕时,只要检测到触发记录器306被更改过,即可马上接着传送下一笔资料。如此,可连续地传送资料,而解决了数据流中断的问题。
而记录于存储器中,所要传送的资料的资料结构可以有很多种。例如是以散集描述(Scatter-Gather Description,SGD)表格(table)的资料结构储存。请参照图5,其所绘示为存储器中的散集描述表格示意图。一笔资料可以用一个散集描述表格来记录之,例如是散集描述表格502。而散集描述基底值504为散集描述表格502在存储304中的起始地址值。散集描述表格502中有两个栏位:基底(base)栏506与计数(count)栏508,且共有N项(entry)资料。基底栏506中的基底值各为一个存储器地址值,记录N项资料中各项资料存放于存储器的起始地址值,其中,基底值例如为基底1、基底2、基底3、与基底N等等,且分别指向地址1的存储器510、地址2的存储器512、地址3的存储器514、与地址N的存储器516等。计数栏508中的计数值则记录此项资料的大小,其中,计数值例如为计数1、计数2、计数3、与计数N等等。而散集描述表格502的末端则为一表单结束(EndOfList)讯号EOL。
当数字资料控制器302要传送资料时,首先读取基底记录单元304的值,来得到散集描述基底地址值。之后,读取基底栏506中的基底1,而得到第1项资料存放的起始地址(亦即地址1)。接着开始传送此项资料。此项资料传送完毕之后,再读取基底栏506的基底2,而传送下一项资料,如此重复动作至读取到表单结束讯号EOL为止。
兹以基底记录单元304可记录一个起始地址值,触发记录器306可记录驱动程序一次触发数字资料控制器302的动作,且资料的资料结构为散集描述表格的形式为例说明本实施例的操作情形。在此条件下,通常便可满足大部分的需求。
请参照图6,其所绘示为资料传送时的散集描述表格示意图。当有第一群资料要传送时,首先,驱动程序将这一群资料以散集描述表格602的资料结构写入存储器104中,并将散集描述基底值604写入基底记录单元304。接着,驱动程序触发数字资料控制器302,使数字资料控制器302读取基底记录单元304。此时数字资料控制器302所读取到的是散集描述基底值604,接着开始将散集描述表格602所记录的资料传送至讯号处理器108,直到读取到散集描述表格602的表单结束讯号EOL为止。在传送散集描述表格602的资料的同时,若驱动程序判断出有第二群资料待传,则将第二群资料以散集描述表格612的资料结构储存于存储器104,并将散集描述基底614写入基底记录单元306中。驱动程序接着再次触发数字资料控制器302,亦即是更改触发记录器306的内容值。如此,一旦时数字资料控制器302读取到散集描述表格602的表单结束讯号EOL,且又检测到触发记录器306的内容值有改变时,数字资料处理器302则接着读取基底记录单元304的值,得到散集描述基底614的值,而开始传送散集描述表格612所记录的资料。如此可达到连续不中断的数据流传送。
兹再说明基底记录单元304为一个可储存M个地址值的寄存器,而触发记录器例如是可计数至M的计数器的操作情形。当驱动程序判断出有资料要传送时,不管数字资料控制器302是否正在传送资料,驱动程序可将待传送的资料依序写入基底记录单元304中,并依次触发数字资料控制器302而改变触发记录器306的值。而数字资料控制器302则检测触发记录器306之后,将储存于基底记录单元304中的存储器地址所对应的资料依序传送。如此可连续传送M笔资料,而不会有资料中断的情形产生。
本方法亦可应用于通用串行总线(Universal Serial Bus,USB)的资料传输中,以解决数据流中断的问题。而且,本方法亦可同时在数字资料控制器中加入一小型先入先出缓冲器,增强效果。
因此,本发明的特征是:因为可以借由驱动程序的控制,直接触发数字资料控制器302而改变触发记录器306的内容值,并由数字资料控制器302判断触发记录器306的内容值是否有改变。若有,则传送下一笔资料。而不须经由数字资料控制器302传送中断讯号后,驱动程序才触发数字资料控制器302来继续传送资料。故可用此方式达到与使用先入先出缓冲器相同的功能,而且所使用的逻辑门数目大幅减少。本发明在数字资料控制器302传送资料时,驱动程序继续地将资料写入存储器104,以善用时间来换取硬件空间的节省。本发明的系统相当稳定而且易于维护(Maintain)。
本发明并不仅适于等时性数据流,于非等时性数据流(例如一般的文字资料)的传送亦可使用,而达到更好的资料传送效果。
综上所述,虽然本发明已以一较佳实施例揭露如上,然其并非用以限定本发明,任何熟习此技艺者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰,因此本发明的保护范围当视本发明的权利要求所界定者为准。