一种提高嵌入式系统串行数据处理能力的方法

文档序号:6519467阅读:301来源:国知局
专利名称:一种提高嵌入式系统串行数据处理能力的方法
技术领域
本发明属于计算机及信息技术领域,具体涉及一种在嵌入式系统的串行设备驱动程序中使用DMA方式替代中断方式提高串行数据处理能力的方法。
背景技术
串行设备驱动程序是嵌入式系统中最常见的驱动程序。在嵌入式系统中,微控制器MCU一般通过中断方式与串行设备交换数据,当串行设备通信速率较高时,MCU的通用异步收发器UART单元往往设计足够大的先入先出单元FIFO用于串行数据的缓冲,串行数据先进入FIFO队列,当FIFO队列的数据达到一定数量时产生硬件中断请求,使MCU转入相应的中断服务程序。这样做的好处在于减少MCU中断请求的次数,提高串行数据处理能力,相应的串行设备驱动程序也比较简单。
但是也有一些低成本MCU的UART硬件FIFO资源不足,导致在与高速串行设备通信时,使用常规的中断方式会产生过于频繁的中断请求,容易造成串行数据的丢失,无法满足系统要求。这类MCU的UART往往只有通过DMA传输通道才能获得更高的通信速率。

发明内容
本发明的目的为了克服上述现有技术存在的缺陷,提供一种提高嵌入式系统串行数据处理能力的方法,主要在嵌入式系统的串行设备驱动程序中,通过加入对直接存储器存取DMA传输方式的支持,提高串行数据处理能力,满足那些硬件FIFO资源不足但支持串行DMA传输的嵌入式系统进行高速串行通信的要求。
一种提高嵌入式系统的串行数据处理能力的方法,该方法按以下步骤进行(1)在驱动装载模块中注册定时器中断,合理设置定时器时间间隔T;(2)在驱动卸载模块中注销定时器中断;(3)在打开串口模块中注册DMA中断,串口接收和发送分别采用不同的DMA通道;(4)设置DMA配置寄存器,确定DMA传输的源地址、目的地址和传输长度;对于串口DMA读操作,源地址为UART的数据寄存器,目的地址为接收缓冲区rcvbuf;对于串口DMA写操作,源地址为接收缓冲区transbuf,目的地址为UART的数据寄存器;(5)启动定时器中断和DMA中断;(6)在关闭串口模块中停止定时器和DMA中断,然后注销DMA中断;(7)加入DMA收发中断处理函数,物理设备层与逻辑设备层使用异步读写机制交换数据,用以提高串行数据处理的吞吐率。文件系统从串行口接收数据时,先启动串行DMA读操作将读取的数据写入物理设备层缓冲rcvbuf,再由DMA中断处理模块将rcvbuf的数据拷贝到逻辑设备层的缓冲区,然后文件系统可以在系统不忙的时候从逻辑设备层异步地批量地读取数据;文件系统向串行口发送数据时,先将要发送的数据写入逻辑设备层的写缓冲,再由DMA中断处理模块将部分数据拷贝到物理设备层缓冲transbuf,启动串行DMA写操作将数据发送出去;(8)加入定时器中断处理函数,完成定时检测POLL方法,该函数的处理流程如附图3所示,DMA中断计数在步骤7中更新,表示DMA接收中断发生次数,DMA传输计数表示当前通过DMA通道收到的字节数,定时检测POLL方法是若经过时间T后,DMA中断计数和DMA传输计数都没有发生变化,并且DMA传输计数不为零,即串行口有数据传输,则进行残余数据的处理,处理方法与步骤7类似,先将物理设备层缓冲区的数据拷贝到逻辑设备层的缓冲区,然后通知逻辑设备层,最后将DMA中断计数和DMA传输计数清零。
本发明主要在嵌入式系统的串行设备驱动程序中,通过加入对直接存储器存取DMA传输方式的支持,提高串行数据处理能力,满足那些硬件FIFO资源不足但支持串行DMA传输的嵌入式系统进行高速串行通信的要求。


图1描述了嵌入式系统串行设备驱动体系结构。
图2描述了基于DMA方式的串行数据收发中断的处理流程。
图3说明了定时检测并处理DMA通道残余数据的方法。
具体实施例方式
在大多数嵌入式操作系统中,用户完成一次对串行设备的读写操作需要涉及到的层次有用户空间的应用程序以及内核空间的文件系统、逻辑设备层和物理设备层。层次之间的相互关系如附图1所示。其中与物理设备层密切相关的逻辑设备层提供各种物理设备的抽象特性和兼容接口,不涉及到具体的硬件特性。逻辑设备层有独立的收发缓冲区和相应的数据结构。所以,设备驱动程序的主要任务是实现逻辑设备层和物理设备层的缓冲区之间高效有序地传输数据。
一个典型的基于中断方式的串行设备驱动程序至少应包括以下模块驱动装载/卸载模块、打开/关闭串口模块、中断处理模块和串行数据读写模块。本发明的串行数据读写是基于DMA方式的。DMA方式与中断方式最大不同在于在DMA方式下数据传输是成块进行的,数据块的源地址、目的地址和传输长度是预先设定好的,传输过程不需要MCU干预。MCU只需要在每次DMA传输结束时对数据块进行处理即可。
对于串行数据的接收来说,由于通常情况下的源数据也就是串行设备发送的数据,长度不是预设DMA传输长度的整数倍,而DMA方式是不能处理传输长度小于预设长度的数据块,这样会在DMA通道中出现残余数据,没有被MCU处理的数据。本发明对于这种情况采用了定时检测POLL的方法,每隔一段时间主动检测并处理这些残余数据。
物理设备层的接收缓冲区rcvbuf和发送缓冲区transbuf,其大小必须适中,不能过大也不能过小,否则都会给系统性能带来负面影响,一般在50到120之间,单位为字节。
以下结合具体实施例和附图对本发明进行详细说明步骤1在驱动装载模块中注册定时器中断,合理设置定时器时间间隔T;步骤2在驱动卸载模块中注销定时器中断;步骤3在打开串口模块中注册DMA中断,串口接收和发送分别采用不同的DMA通道。
步骤4设置DMA配置寄存器,确定DMA传输的源地址、目的地址和传输长度。对于串口DMA读操作,源地址为UART的数据寄存器,目的地址为读缓冲rcvbuf;对于串口DMA写操作,源地址为写缓冲transbuf,目的地址为UART的数据寄存器。
步骤5启动定时器中断和DMA中断。
步骤6在关闭串口模块中停止定时器和DMA中断,然后注销DMA中断。
步骤7加入DMA收发中断处理函数,该函数的处理流程如附图2所示。物理设备层与逻辑设备层使用异步读写机制交换数据,用以提高串行数据处理的吞吐率。文件系统从串行口接收数据时,先启动串行DMA读操作将读取的数据写入物理设备层缓冲rcvbuf,再由DMA中断处理模块将rcvbuf的数据拷贝到逻辑设备层的缓冲区,然后文件系统可以在系统不忙的时候从逻辑设备层异步地批量地读取数据;文件系统向串行口发送数据时,先将要发送的数据写入逻辑设备层的写缓冲,再由DMA中断处理模块将部分数据拷贝到物理设备层缓冲transbuf,启动串行DMA写操作将数据发送出去。
步骤8加入定时器中断处理函数,完成定时检测(POLL)方法。该函数的处理流程如附图3所示。DMA中断计数在步骤7中更新,表示DMA接收中断发生次数。DMA传输计数表示当前通过DMA通道收到的字节数。定时检测POLL方法是若经过时间T后,DMA中断计数和DMA传输计数都没有发生变化,并且DMA传输计数不为零,即串行口有数据传输,则进行残余数据的处理,处理方法与步骤7类似,先将物理设备层缓冲区的数据拷贝到逻辑设备层的缓冲区,然后通知逻辑设备层,最后将DMA中断计数和DMA传输计数清零。
权利要求
1.一种提高嵌入式系统的串行数据处理能力的方法,该方法按以下步骤进行(1)在驱动装载模块中注册定时器中断,设置定时器时间间隔T;(2)在驱动卸载模块中注销定时器中断;(3)在打开串口模块中注册DMA中断,串口接收和发送分别采用不同的DMA通道;(4)设置DMA配置寄存器,确定DMA传输的源地址、目的地址和传输长度;对于串口DMA读操作,源地址为UART的数据寄存器,目的地址为接收缓冲区rcvbuf;对于串口DMA写操作,源地址为接收缓冲区transbuf,目的地址为UART的数据寄存器;(5)启动定时器中断和DMA中断;(6)在关闭串口模块中停止定时器和DMA中断,然后注销DMA中断;(7)加入DMA收发中断处理函数,物理设备层与逻辑设备层使用异步读写机制交换数据;(8)加入定时器中断处理函数,完成定时检测POLL方法,DMA中断计数在步骤7中更新,DMA传输计数表示当前通过DMA通道收到的字节数。
2.根据权利要求1所述的方法,其特征在于所述逻辑设备层和物理设备层采用的异步读写机制为文件系统从串行口接收数据时,先启动串行直接存储器访问DMA读操作将读取的数据写入物理设备层接收缓冲区rcvbuf,再由DMA中断处理模块将rcvbuf的数据拷贝到逻辑设备层的缓冲区,然后文件系统可以在系统不忙的时候从逻辑设备层异步地批量地读取数据;文件系统向串行口发送数据时,先将要发送的数据写入逻辑设备层的写缓冲,再由DMA中断处理模块将部分数据拷贝到物理设备层发送缓冲区transbuf,启动串行DMA写操作将数据发送出去。
3.根据权利要求1所述的方法,其特征在于所述处理DMA通道残余数据的定时检测方法为若经过时间T后,DMA中断计数和DMA传输计数都没有发生变化,并且DMA传输计数不为零,即串行口有数据传输,则进行残余数据的处理,处理方法是先将物理设备层缓冲区的数据拷贝到逻辑设备层的缓冲区,然后通知逻辑设备层,最后将DMA中断计数和DMA传输计数清零。
全文摘要
本发明涉及一种提高嵌入式系统串行数据处理能力的方法,该方法在串行设备驱动程序中申请串行DMA通道,分配物理设备层的DMA缓冲区,在收发成块的DMA数据时物理设备层与逻辑设备层交换数据时采用异步读写机制,对于不能产生DMA中断的残余数据,采用在定时器中断中定时检测的方法处理。本发明主要在嵌入式系统的串行设备驱动程序中,通过加入对直接存储器存取DMA传输方式的支持,提高串行数据处理能力,满足那些硬件FIFO资源不足但支持串行DMA传输的嵌入式系统进行高速串行通信的要求。
文档编号G06F13/32GK1702638SQ20051001887
公开日2005年11月30日 申请日期2005年6月8日 优先权日2005年6月8日
发明者胡士毅, 唐运刚, 吴玲琦, 赵勋 申请人:武汉虹信通信技术有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1