基于ARM7的DMA传输详解.doc

基于ARM7的DMA传输详解.doc

ID:49242531

大小:82.00 KB

页数:8页

时间:2020-03-01

基于ARM7的DMA传输详解.doc_第1页
基于ARM7的DMA传输详解.doc_第2页
基于ARM7的DMA传输详解.doc_第3页
基于ARM7的DMA传输详解.doc_第4页
基于ARM7的DMA传输详解.doc_第5页
资源描述:

《基于ARM7的DMA传输详解.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、嵌入式编程——DMA传输龚建峰研14041415053004本章我们将向大家介绍STM32的DMA功能。在本章中,我们将利用STM32的DMA的功能通过串口2实现串口传输打印,按复位键,开始LED1~LED4灯全亮,然后传输完成是,LED1,LED2灯熄灭,电脑串口出现传输的数据。1.STM32DMA简介DMA全称为:DirectMemoryAccess,即直接存储访问。DMA是STM32中一个独立与Cortex-M3内核的模块,有点类似与ADC、PWM、TIMER等模块;主要功能是通信“桥梁”的作用,可以将所有外设映射的寄存器“连接”起来,这

2、样就可以高速问各寄存器,其传输不受CPU的支配,传输还是双向全工的。DMA传输将数据从一个地址空间复制到另外一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区,DMA传输对于高效能嵌入式系统算法和网络是很重要的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,能使CPU的效率大为提高,这里需要注意的是在传输的过程中,CPU是不参与的,只有当启用结束DMA时,CP

3、U才会参与作用。2.本章原理串口2以DMA方式发送数据。我们先定义5200个字节的数组SendBuff[],即开辟了一个空间,空间用于存放要发送的数据。将这个空间和串口用DMA方式绑定。DMA传输是将数据从一个地址空间复制到另外一个地址空间。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实行和完成。如本实验中,我们先将要发送的数据送入开辟的SendBuff[]地址空间,初始化从这个地址空间向串口2发送数据这个动作。初始化完成后,传输动作本身是由DMA控制器来实行和完成,不用CPU直接控制传输,我们只需要开启DMA传输即可。接下来我们

4、就介绍本实验的基本实现步骤:1)对串口进行初始化。例如:调用函数SZ_STM32_COMInit()设置使用的是串口2,将波特率配置成115200。2)调用函数MYDMA_Config()配置DMA。MYDMA_Config()函数初始化串口2以DMA方式发送数据这个动作动作。具体配置的内容有:使能DMA传输、传入串口2使用的通道7等。3)将待发送的数据传入我们开辟的空间SendBuff[],即定义的数组。4)调用USART_DMACmd()函数,使能串口2的DMA发送。下面是DMA的6个寄存器:寄存器描述DMA_ISRDMA中断状态寄存器DM

5、A_IFCRDMA中断标志位清除寄存器DMA_CCRxDMA通道x设置寄存器DMA_CNDTRxDMA通道x待传输数据数目寄存器DMA_CPARxDMA外设地址寄存器DMA_CMARxDMA内存地址寄存器DMA结构体的成员:Typedefstruct{uint32_tDMA_Periphera1BaseAddr;uint32_tDMA_MemoryBaseAddr;uint32_tDMA_DIRuint32_tDMA_BufferSize;uint32_tDMA_Periphera1Inc;uint32_tDMA_MemoryInc;uint3

6、2_tDMA_Periphera1DataSize;uint32_tDMA_MemoryDataSize;uint32_tDMA_Mode;uint32_tDMA_Priority;uint32_tDMA_M2M;}DMA_InitTypeDef;1)DMA_Periphera1BaseAddr这个成员保存的是外设数据寄存器的基地址,这个地址作为传输的源或目标,比如要进行串口2DMA传输,那么外设基地址为串口接受发送数据存储器USART->DR的地址,表示方法为&USART->DR,为什么说是“基”地址?因为DMA具有地址自增的功能,地址自增功

7、能时的可以方便地读取连续的数据单元,具体是不是要地址自增,可以通过相应的配置进行选择。2)DMA_MemoryBaseAddr保存了内存的基地址,同样,这个地址可作为传输的源或目标。在使用时通常会给这个成员赋值为某个数组的基地址,然后利用DMA的地址自增功能把数组一个个地填满。3)DMA_DIR保存了DMA数据传输方向,可以选择是外设到内存还是内存到外设。4)DMA_BufferSize保存了DMA要传输的数据总大小,单位为后面结构体元。本章代码对它赋值为自定义的宏Sendbuff_Size,宏展开为5200。即本次DMA要传输5200个数据。

8、5)DMA_Periphera1Inc和DMA_MemoryInc分别为外设和内存的地址是否开启自增功能。本章向这两个成员赋值为外设地址固定,而内存地

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

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

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