虚拟先进先出直接存储器存取装置制造方法及图纸

技术编号:2921168 阅读:181 留言:0更新日期:2012-04-11 18:40
一种虚拟先进先出(FIFO)直接存储器存取(DMA)装置,用以装设在具有一处理器、一UART单元及一虚拟FIFO的电子装置中。虚拟FIFO  DMA装置中,DMA单元用以将数据在UART单元及虚拟FIFO之间搬移。虚拟FIFO控制器与DMA单元电性连接,虚拟FIFO控制器具有一读取指标与一写入指标。当DMA单元对虚拟FIFO进行读取动作或写入动作时,虚拟FIFO控制器对应地改变读取指标或写入指标的值。虚拟端口分别与DMA单元及处理器电性连接,处理器通过虚拟端口与DMA单元读取虚拟FIFO的数据或将数据写入虚拟FIFO中。

【技术实现步骤摘要】

本专利技术涉及一种直接存储器存取(Direct Memory Access,DMA)装置,尤其涉及一种虚拟先进先出(First In First Out,FIFO)DMA装置。
技术介绍
请参照第1图,示出了传统电子装置中,使用通用异步收发器(UniversalAsynchronous Receiver/Transmitter,UART)传送数据时的方块图。当高层软件作业程序(Higher layer software task)102欲藉由UART单元110将一第一笔数据传送出去时,高层软件作业程序102先呼叫UART驱动软件(driver),使UART驱动软件将此第一笔数据填入缓冲器104中。缓冲器104例如是环状缓冲器(ring buffer)或是双缓冲器(double buffer)。当此第一笔数据完全地填入缓冲器104之后,UART驱动软件更新UART驱动软件中所设定的一缓冲器指标(buffer point)至下一个地址。然后,通过DMA单元106,储存在缓冲器104中的此第一笔数据被搬移至UART先进先出(First In First Out,FIFO)单元中储存,UART单元110将串行式地(serially)输出此第一笔数据。其中,缓冲器104与UART FIFO单元108之间的数据搬移,除了利用DMA单元106来完成之外,亦可藉由处理器(processor)来达成。通常利用DMA单元106来搬移数据时的效率较佳。然而,在较复杂的电子装置中,可能会有数个高层软件作业程序102A与中断服务程序(Interrupt Service Routine,ISR)112同时使用同一个UART单元110来进行数据传送的情形,如第2图所示。此种状况下,缓冲器104中的数据很可能被覆盖而导致数据错误。其原因为,在高层软件作业程序102A的第一笔数据正被填入缓冲器104的过程中,若ISR 112亦同时有一第二笔数据需要藉由UART单元110来传送,则ISR 112会呼叫UART驱动软件,以将此第二笔数据存入缓冲器106中。因为之前高层软件作业程序102A的第一笔数据让未完全填入缓冲器104中,故UART驱动软件尚未更新缓冲器指针。故此第二笔数据将会根据原来的缓冲器指标,而被写入缓冲器104中。如此一来,原本已经储存在缓冲器104中的第一笔数据将被覆盖。而当UART驱动软件完成ISR 112的第二笔数据写入缓冲器104的动作之后,高层软件作业程序102A将会继续将其余的第一笔数据填入缓冲器104中,而覆盖掉部分的第二笔数据。此时储存在缓冲器104中第一笔数据与第二笔数据均会有漏失(loss)而产生错误。传统解决缓冲器104中数据错误的作法有二。其一,在高层软件作业程序102A呼叫UART驱动软件前,先不使能ISR 112,以避免数据错误的情况产生。但是,当有时效性的ISR 112无法执行时,很可能导致系统无法实时对此ISR 112进行处理而产生系统错误。其二,使用两个缓冲器。请参照第3图,示出了使用两个缓冲器以进行UART传送时的方块图。ISR 112的第二笔数据先储存在缓冲器104A中,而高层软件作业程序102A的第一笔数据则是先储存缓冲器104B中。然后,藉由控制多任务器114,第一笔数据与第二笔数据交替的移动至UART FIFO单元108中,并由UART单元110传送出去。然而,此法需使用较多的内存来作为缓冲器,而且UART驱动软件的控制亦较为复杂。除了上述的进行UART传送时会遇到数据漏失与错误的情形之外,进行UART接收时,传统的电子装置亦会有多项问题产生。请参照第4图,示出了传统电子装置中,进行UART接收时的方块图。当UART单元410接收到一第三笔数据之后,第三笔数据先暂存在UART FIFO单元408。然后,由DMA单元406将第三笔数据移动至缓冲器404中。当DMA单元406已将预设长度的数据传送至缓冲器404之后,DMA单元406通知处理器416来读取储存在缓冲器404中的数据。例如,每当DMA单元406将500个字节数据传送至缓冲器404之后,DMA单元406就会通知处理器416读取储存在缓冲器404中的数据。然而由于UART单元410所接收到的第三笔数据的长度无法预知,故DMA单元406无法得知是否已经将第三笔数据接收完毕。例如,假设第三笔数据的长度为700个字节,当DMA单元406将前500个字节数据传送至缓冲器404之后,DMA单元406就会通知处理器416读取储存在缓冲器404中的数据。但是,当DMA单元406将后200个字节数据传送至缓冲器404之后,由于尚未达到预设的数据长度而且DMA单元406并不知道第三笔数据已经接受完毕,因此DMA单元406不会通知处理器416去读取储存在缓冲器404中的数据。因此,处理器416必须定时地去侦测UART FIFO单元408的状态,以得知UART FIFO单元408是处于空白(empty)状态(因为数据已经被搬移至缓冲器404),并且进一步判断UART FIFO单元408处于空白状态是否达到一预设期间,如果是,则表示数据已经接收完毕,此时,处理器416就会读取缓冲器404中的数据以进行处理。在处理器416侦测UART FIFO单元408的状态之前,处理器416必须先将DAM单元406非使能(disabled),以免因为DAM单元406的数据搬移动作而使处理器416侦测错误。而在非使能DAM单元406之前,UART单元410必先被非使能,并发出信号以通知传送端禁止传送数据。但是,若在将DMA单元406非使能的同时,数据正好传入UART单元410,此时,因DMA单元406无法实时地将UART FIFO单元408中之数据移动至缓冲器404中,故极可能导致UART FIFO单元408中的数据满溢(overflow),而使数据遗失。为了避免这样的情况,必须让UART FIFO单元418保留16字节以上的缓冲区,以避免数据遗失。另一方面,若改用处理器416来移动UART FIFO单元408中的数据至缓冲器404的话,为了避免处理器416因为UART FIFO单元408很快地被填满,而常常被中断来处理数据搬移的动作,故必须加大UART FIFO单元408的大小。但,这样的作法会使成本提高。总括来说,传统电子装置中,在进行UART传送时,会有UART驱动软件无法实时地更新缓冲器指针,而导致数据被覆盖的数据错误的情形。而在进行UART接收时,则会有(1)处理器416必须定时地去侦测缓冲器404与UART FIFO单元408的状态,而使处理器416效能降低;(2)DMA单元406被非使能时,为了避免UART FIFO单元408产生满溢的情形,UART FIFO单元408必须额外保留16字节的缓冲区,以避免上述的数据满溢的情形。如此,将会提高成本并增加UART FIFO单元408的芯片面积。
技术实现思路
有鉴于此,本专利技术的目的就是提供一种虚拟FIFO DMA装置,可在进行UART传送时,实时地更新指标的值,以避免数据被覆盖而导致数据错误。本专利技术还可在进行UART接收时,不需额外保留UART FIFO单元的16字节的空间,可达到节省成本并降低UAR本文档来自技高网
...

【技术保护点】
一种虚拟先进先出(FirstInFirstOut,FIFO)直接存储器存取(DirectMemoryAccess,DMA)装置,装设在一电子装置中,该电子装置具有一处理器、一UART单元及一虚拟FIFO,该虚拟FIFO   DMA装置包括:一DMA单元,与UART单元及虚拟FIFO电性连接,该DMA单元用以将数据在UART单元及虚拟FIFO之间搬移;一虚拟FIFO控制器,与DMA单元电性连接,该虚拟FIFO控制器具有一读取指标与一写入指针,当 DMA单元对该虚拟FIFO进行读取动作或写入动作时,该虚拟FIFO控制器对应地改变读取指标或写入指标的值;以及一虚拟端口(VirtualPort),分别与DMA单元及处理器电性连接,处理器通过该虚拟端口与DMA单元读取虚拟FIF O的数据或将数据写入虚拟FIFO中。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:林彦宇胡世昌陈筱宛
申请(专利权)人:联发科技股份有限公司
类型:发明
国别省市:71[中国|台湾]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1