关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 基于DMA控制器的UART串行通信设计

基于DMA控制器的UART串行通信设计

作者:时间:2012-04-27来源:网络收藏

摘要:针对大数据量的串口间,在常规的数据的基础上,结合Cortex-M3微的作用,实现控制的串口数据包收发。链表项缓存,最终实现的分散/聚集模式的数据传输过程,主要是发送过程。提高了数据过程的MCU独立性和MCU利用的效率。
关键词:DMA;;链表项;分散/聚集

常规下,UART的数据收发可由MCU控制UART的内部FIFO来完成。但具体不论是以中断还是以查询的形式,过程中总是会占用到MCU的时间,即便在其FIFO的最大有效利用时。这样,在实际应用中,当串口数据包量较大时,UART的发送过程会占用MCU很长时间,其中大多数时间可能是在一次等待数据传输的完成。为了节省这段时间,提高MCU的使用效率,以完成更多的数据处理,将会用到DMA。DMA意思是直接内存访问,是指不经由CPU而直接从内存中存取数据的数据交换模式。当UART的使用DMA控制器控制发送过程时,MCU会将发送的控制权交给DMA硬件控制器,从而在数据发送的时间中去处理其它的事务。
本文将结合ARM的Cortex-M3内核处理器来UART的DMA控制过程。Cortex-M3内核的处理器,是ARM公司最新一代的ARMv7架构的32位处理器。其LPC176X系列的MCU处理器内部带有8通道的DMA控制器。下面将使用这些DMA控制器通道来实现UART的数据收发过程。

1 系统结构及原理
1. 1 UART控制器
LPC176X有4路UART控制器,通过设置其波特率、停止位、数据长度等参数来完成2个UART口的通信,当然外部通过电平转换可实现为RS232或RS485等接口类型,这里只系统地用内的部UART接口。
硬件的连线上采用交叉互连,即一个UART接口的TX接到另一个接口的RX。软件上传输的数据报文格式可由不同应用不同设定,这里只笼统的称做数据包。
1.2 DMA控制器
LPC176X的DMA控制器允许外设到存储器,存储器到外设,外设到外设和存储器到存储器之间的传输。每个DMA流都可以为单个源和目的提供单向串行DMA传输。
1.3 链表项及其标识
DMA控制器使用链表项(LLI)来支持分散/聚集(Scatter-gather),分散/聚集是指DMA单次传输可以使用不必连续的内存空间,它的效果相当于若干个简单DMA过程的串连。在分散/聚集模式下,源和目标数据区由一连串的链表来定义,每个链表项控制着一个数据块的传输,将这个数据块传输完毕后,选择并装载另一个链表项来继续DMA操作或停止DMA流。第一个链表项需要被编程到DMA控制器的对应通道。链表项所描述的传输数据包通常需要进行一次或多次DMA突发传输到设定的源或目标。如不需要链表项分散/聚集,那么链表地址寄存器须设置为零。一个链表的最后一个链表项也须设置为零。
一个链表项的内容由4个字组成,依次为源地址、目标地址、下个链表项地址及控制字。为了方便记录DMA链表内容,并定义一个链表内容结构体标识,标识名称记作stDMALinkListInfor,定义如下:
a.JPG

2 缓存区的设计
2.1 串行数据缓存区的设计
建立UARTn的接口数据缓存区,记作UARTn_BUF(n),用来存储UART串口数据包。为数据缓存区设置空缓存地址的FIFO队列UARTn_BUF_FR EE_TABLE,用来存放未被数据填充占用的空数据缓存分区地址;设置已占用缓存地址的FIFO队列UARTn_BUF_FILL_TABLE,用来存放已经被数据填充占用的数据缓存分区地址。


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭