新闻中心

EEPW首页>嵌入式系统>设计应用> 基于散列DMA的高速串口驱动设计

基于散列DMA的高速串口驱动设计

作者: 时间:2010-05-26 来源:网络 收藏

数据传输可分为块传输和散列传输两种方式。在传输数据的过程中,要求源物理地址和目标物理地址必须是连续的。但是在某些计算机体系中(如IA架构),连续的存储器地址在物理上不一定是连续的,所以传输要分成多次完成。传输完一块物理上连续的数据后引发一次中断,然后进行下一块物理上连续的数据传输,这就是DMA块传输方式(Block DMA)。散列传输是在块传输方式上发展起来的,它与一个传输链表相关,如图2所示。该链表可以是单向结构或环形结构。控制字中包含数据位宽、数据块大小、当前块传输结束是否引发中断等控制信息。DMA块传输可看作是只含有一个节点,且下一节点指针总是指向当前节点的散列传输。采用散列DMA方式能更灵活、高效地传输数据。

3 在SPEAR300平台上实现

3.1 硬件平台

SPEAR300是ST公司在ARM926EJ-S核的基础上开发的高性能嵌入式处理器。其最高工作频率为333MHz,有8个独立的DMA通道,支持散列DMA;UART支持DMA传输,发送和接收FIFO大小均为16字节,在192 MHz的外设总线(APB)频率下支持的最高波特率为12 Mbps,如果提高APB的频率还可以获得更高的波特率。本文的硬件平台是以SPEAR300为核心的人机界面产品,主要外设包括触摸屏、液晶显示模组、网口和(要支持最高波特率为12 Mbps的西门子MPI通信协议)。

3.2程序

串口程序的核心是实现数据高效稳定的收发。为了实现UART的数据传输,UART中断设置为最高优先级;同时在操作系统中允许中断嵌套,打开UART接收超时中断RTI并使能UART的DMA传输。这样,当UART的发送FIFO数据减少到设定的参考值(FIFOLevel)时,发送DMA传输就会被触发。同样,当接收FIFO的数据增长到设定值时,接收DMA传输就会被触发。为了减少DMA传输被触发的次数同时保证数据被及时传输,发送FIFO Level设定为2字节,而接收FIFOLevel设定为14字节,将发送和接收的FIFO Level分别设定为0和16字节是有很大风险的。MPI协议要求传输的一帧数据不能有间断,所以在使用DMA传输UART数据时DMAC必须独占系统总线。为了避免产生缓存一致性问题,使用2块非缓存内存区域存放待发送的数据和已接收到的数据。

发送数据时,待发送的数据量总是已知的。先构造一个传输节点,数据源地址为数据包的首地址,目的地址为UART寄存器,数据位宽为8,下一节点指针(PTR_NEXT)为空。当前数据包发送结束前,如果PTR_NEXT被更新,则下一个数据包的传输自动开始。当前数据包是否发送完毕,可通过读取DMAC寄存器DMACCnControl的TransferSize字段得知。整个发送数据的过程无需触发任何中断,流程图如图3所示。如果采用DMA块传输方式,就需要在每次传输完毕后产生DMA中断,重新装载数据到内存中的发送数据区以发送下一个数据包。



评论


相关推荐

技术专区

关闭