基于DMA的UART发送的使用.doc

基于DMA的UART发送的使用.doc

ID:58863667

大小:213.50 KB

页数:3页

时间:2020-09-22

基于DMA的UART发送的使用.doc_第1页
基于DMA的UART发送的使用.doc_第2页
基于DMA的UART发送的使用.doc_第3页
资源描述:

《基于DMA的UART发送的使用.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于DMA的UARTn发送的使用UART的数据发送可由MCU控制UARTTX的内部FIFO来完成,但是在应用中,当串口数据包量较大时,UART的发送过程会占用MCU很长时间,其中大多数时间是在等待数据的传输完成。有时为了节省这段时间,提高MCU的使用效率,以完成更多的数据处理,将会用到DMA控制器。当UART的使用DMA控制器控制发送过程时,MCU会将发送的控制权交给DMA硬件,从而在数据发送的时间内去处理其它的事务。ARM的Cortex-M3系列芯片LPC176X内部带用8通道的DMA控制器,下面将使用这些DMA通道来实现UART的数据发送过程。一、DMA控制器及链表项DMA控制器允许外设

2、到存储器、存储器到外设、外设到外设和存储器到存储器之间的传输。每个DMA流都可以为单个源和目的提供单向串行DMA传输。而且DMA使用链表来支持分散/聚集。源和目标数据区由一连串的链表来定义,每个链表项控制着一个数据块的传输,将这个数据块传输完毕后,选择并装载另一个链表项来继续DMA操作或停止DMA流。第一个链表项需要被编程到DMA控制器的对应通道。链表项所描述的传输数据包通常需要进行一次或多次DMA突发传输到设定的源或目标。如不需要链表项分散/聚集,那么链表地址寄存器须设置为零。一个链表项由4个字组成,依次为源地址、目标地址、下个链表项地址及控制字。为了方便记录DMA链表内容,设计并定义一个

3、链表内容结构体,名字记作stDMALinkListInfor;定义如下:typedef_DMA_LINK_LIST_INFOR_{unsignedshortLinkList_SrcAddress;unsignedshortLinkList_DstAddress;unsignedshortLinkList_NextListAddress;unsignedshortLinkList_ControlValue;}stDMALinkListInfor,*pstDMALinkListInfor;二、寄存器配置(I)使能外设时钟,将PCONP寄存器中的PCGPDAM位置1。此位在复位时为0,即默认DMA

4、被禁止,所以在应用DMA前须先将其使能。(II)使能UnFCR中的第3位。该位为UART的DMA功能使能位,置1时使能DMA,清0后禁用DMA功能;只有在该位使能后,UART的发送和接收过程才能由DMA控制完成。(III)将寄存器DMAReqSel的第0位清零。因为DMA的UART0TX与定时器0匹配0复用,所以需先选择到UART0TX上。第0位为0时DMA选择UART0TX,为1时DMA选择MAT0.0;其它串口也需做类似选择。三、缓存区建立(I)建立UARTn的接口数据缓存区,记作UARTn_BUF(n),用来存储UART串口数据包。为数据缓存区设置空缓存地址的FIFO队列UARTn_B

5、UF_FREE_TABLE,用来存放未被数据填充占用的空数据缓存分区地址;设置已占用缓存地址的FIFO队列UARTn_BUF_FILL_TABLE,用来存放已经被数据填充占用的数据缓存分区地址。(II)建立N个DMAx的链表内容结构体的缓存区DMAx_LINK_LIST_INFOR_INDEX(i)(i=1,2,3,..N-1),称作DMAx_LINK_LIST_INFOR_CACHE(i)(i=1,2,3,..N-1)。其中DMAx_LINK_LIST_INFOR_CACHE(i)的地址为四字节对齐,必须为最低两位是0的位置。(III)建立DMAx的可用空缓存FIFO队列,称作DMAx_L

6、INK_LIST_FREE_TABLE,用于存储N个链表中的空缓存区地址。当执行出队操作时,返回一个非NULL空缓存区地址,若取回值为NULL则说明没有可用缓存区;而执行入队操作时,会将一个非NULL空缓存区的地址加入FIFO队列中,执行读取队列长度操作时,返回队列中可用空缓存地址的数量。(IV)建立DMAx的链表地址FIFO队列,记作DMAx_LINK_LIST_FILL_TABLE,用来放置占用并填充了链表内容的结构体缓存区地址。当执行出队操作时,返回一个非NULL已占用缓存区地址,若取回值为NULL则说明没有可用的已占用缓存区地址;而执行入队操作时,会将一个非NULL已占用缓存区的地址

7、加入FIFO队列中,执行读取队列长度操作时,返回队列中可用的已占用缓存地址数量。(V)建立UARTnTX的地址保存FIFO队列UART_LINK_LIST_STORE_TABLE,用于保存一次DMA发送的时所用到的DMAx_LINK_LIST_INFOR_CACHE地址。队列容量可与DMAx_LINK_LIST_FILL_TABLE的容量相同,或根据需求设置成更小。四、UARTn的DMA数据发送UARTn的D

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。