第8章直接存储器存取ppt课件.ppt
《第8章直接存储器存取ppt课件.ppt》由会员分享,可在线阅读,更多相关《第8章直接存储器存取ppt课件.ppt(71页珍藏版)》请在三一办公上搜索。
1、退出,嵌入式单片机原理及应用,电气工程学院仪器科学与工程系,1 ARM嵌入式系统概述2 STM32单片机结构和最小系统 3 基于标准外设库的C语言程序设计基础 4 STM32通用输入输出GPIO5 STM32外部中断6 STM32通用定时器7 STM32通用同步/异步收发器USART8 直接存储器存取DMA9 STM32的模数转换器ADC10 STM32的集成电路总线I2C11 STM32的串行外设接口SPI,第8章 直接存储器存取DMA,8.1 DMA简介8.2 STM32的DMA结构8.3 DMA相关寄存器8.4 DMA的工作过程8.5 DMA应用设计,退出,8.1 DMA简介,DMA用来
2、提供外设与外设之间、外设与存储器之间、存储器与存储器之间的高速数据传输,无需CPU干预,数据可以通过DMA快速传输,节省CPU的资源。在实现DMA传输时,由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题,即DMA传输前,CPU把总线控制权交给DMA控制器,在结束DMA传输后,DMA控制器立即把总线控制权交回CPU。,8.2 STM32的DMA结构,STM32最多拥有两个DMA控制器,DMA1控制器拥有7个独立的可配置通道,DMA2有5个独立的可配置通道,每个通道用来管理来自于一个或多个外设对存储器访问的请求。STM32F103RBT6只有DMA1控制器。,8.2 STM32的DM
3、A结构,每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置。在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四级:很高、高、中等和低),优先权设置相等时由硬件决定(请求0优先于请求1 ,依此类推) 。 独立数据源和目标数据区的传输宽度(字节、半字、全字),模拟打包和拆包的过程。源和目标地址必须按数据传输宽度对齐。,STM32的DMA主要特性如下:,8.2 STM32的DMA结构,支持循环的缓冲器管理 每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错),这3个事件标志逻辑或成为一个单独的中断请求。存储器和存储器间的传
4、输 、外设和存储器、存储器和外设之间的传输闪存、SRAM 、外设的SRAM 、APB1、APB2和AHB外设均可作为访问的源和目标。可编程的数据传输数目:最大为65535,STM32的DMA主要特性如下(续):,8.2 STM32的DMA结构,DMA1模块的通道和外设的对照表,使用DMA的通道的时候,每一个通道对应的外设是不一样的,需要根据相应的外设来选择DMA的通道,DMA是AHB总线上的设备,它有2个AHB端口:一个是从端口,用于配置DMA,一个是主端口,用于设备间数据传输。两个AHB/APB桥在AHB和两个APB总线间提供同步连接。APB1操作速度限于36MHz,APB2操作速度限于72
5、MHz。,8.2 STM32的DMA结构,循环优先调度 NVIC和Cortex-M3处理器实现了高性能低延时中断调度。所有的Cortex-M3指令既可以在单周期内执行,也可以在总线周期上被中断。循环优先级调度能够确保CPU在必要的时候每两个总线周期就去访问其它总线。多层结构和总线挪用 多层结构允许两个主要设备并行执行数据传输。使用总线挪用存取机制,CPU访问和DMA通过APB总线存取外设可以并行工作。DMA总线挪用机制使得总线利用效率更高,减少软件执行时间。在Cortex-M3哈佛架构下提高数据的并行性,减少执行时间,优化DMA效率。,总线矩阵有两个主要特征: 循环优先调度、多层结构和总线挪用
6、。,8.3 DMA相关寄存器,DMA的功能是通过操作两类寄存器实现的:一类是具有DMA功能的相关外设寄存器,主要用来设置外设开启DMA功能,例如在通用定时器中的DMA/中断使能寄存器(TIMx_DIER)、DMA控制寄存器(TIMx_DCR)和连续模式的DMA地址寄存器(TIMx_DMAR);通用异步/同步收发器USART中的控制寄存器3(USART_CR3)。另一类是DMA相关寄存器,用来设置DMA的具体工作方式。DMA中断状态寄存器(DMA_ISR)DMA中断标志清除寄存器(DMA_IFCR)DMA通道x配置寄存器(DMA_CCRx)(x = 17)DMA通道x传输数量寄存器(DMA_CN
7、DTRx)(x = 17)DMA通道x外设地址寄存器(DMA_CPARx)(x = 17)DMA通道x存储器地址寄存器(DMA_CMARx)(x = 17)。,8.3 DMA相关寄存器,1. DMA中断状态寄存器(DMA_ ISR)该寄存器保存着DMA中断的状态,偏移地址00H,复位值为00000000H,其格式如下:,8.3 DMA相关寄存器,1. DMA中断状态寄存器(DMA_ ISR)该寄存器保存着DMA中断的状态,偏移地址00H,复位值为00000000H,其格式如下:,8.3 DMA相关寄存器,2. DMA中断标志清除寄存器(DMA_ IFCR)该寄存器用来清除DMA中断标志,偏移地
8、址04H,复位值为000000H,其格式如下:,8.3 DMA相关寄存器,2. DMA中断标志清除寄存器(DMA_ IFCR)该寄存器用来清除DMA中断标志,偏移地址04H,复位值为000000H,其格式如下:,8.3 DMA相关寄存器,3. DMA通道x配置寄存器(DMA_ CCRx)(x=1.7) 该寄存器用来配置DMA工作模式,31:15: 保留,始终读为00MEM2MEM:1:存储器到存储器模式,0:非存储器到存储器模式PL1:0:通道优先级(Channel priority level)这些位由软件设置和清除:00:低, 01:中, 10:高,11:最高MSIZE1:0:存储器数据宽
9、度(Memory size)这些位由软件设置和清除。00:8位, 01:16位, 10:32位,11:保留MINC:存储器地址增量模式(Memory increment mode)0:不执行存储器地址增量操作 1:执行存储器地址增量操作PINC:外设地址增量模式(Peripheral increment mode)0:不执行外设地址增量操作 1:执行外设地址增量操作CIRC:循环模式(Circular mode)0:不执行循环操作 1:执行循环操作,8.3 DMA相关寄存器,3. DMA通道x配置寄存器(DMA_ CCRx)(x=1.7) 该寄存器用来配置DMA工作模式,1,1,1,8.3 D
10、MA相关寄存器,4. DMA通道x传输数量寄存器(DMA_ CNDTRx)(x=1.7)该寄存器用来配置DMA传输数据量,8.3 DMA相关寄存器,5. DMA通道x外设地址寄存器(DMA_ CPARx)(x = 1.7) 该寄存器用来配置DMA通道外设地址,8.3 DMA相关寄存器,6. DMA通道x存储器地址寄存器(DMA_ CMARx)(x=1.7) 该寄存器用来配置DMA通道存储器地址,8.4 DMA的工作过程,1DMA传送2仲裁器3DMA通道4错误管理5DMA请求映射,8.4 DMA的工作过程,1DMA传送DMA传输三要素:传输源:DMA控制器从传输源读出数据;传输目标:数据传输的目
11、标地址;触发信号:用于触发一次数据传输的动作,执行一个单位的传输源至传输目标的数据传输;用于控制数据传输的时机。,8.4 DMA的工作过程,1DMA传送(过程)(1)IO设备准备好后,向DMAC发出DMA请求;(2)DMAC向CPU发出总线请求;(3)CPU向DMAC发出总线响应,总线控制权由DMAC接管(图中阴影所示)。(4)DMAC向IO设备发出DMA响应,按事先设置的初始地址和传送字节数,依次发送地址和寄存器(或I/O)读写命令,实现RAM和IO设备直接交换数据,直至传送完毕。(5)DMA传送结束,撤销向CPU的总线请求,总线响应和DMA响应随即失效,CPU重新控制总线。,8.4 DMA
12、的工作过程,2仲裁器 仲裁器根据通道请求的优先级来启动外设/存储器的访问。 优先权管理分2个阶段:软件:每个通道的优先权可以在DMA_CCRx寄存器中设置,有4个等级: 最高优先级 高优先级 中等优先级 低优先级 硬件:如果2个请求有相同的软件优先级,则较低编号的通道比较高编号的通道有较高的优先权。如,通道2优先于通道4。注意: 在大容量产品和互联型产品中,DMA1控制器拥有高于DMA2控制器的优先级,8.4 DMA的工作过程,3DMA通道每个通道都可以在有固定地址的外设寄存器和存储器地址之间执行DMA传输。DMA传输的数据量最大65535。包含要传输的数据项数量的寄存器,在每次传输后递减。
13、可编程的数据宽度:外设和存储器的传输数据宽度可以通过DMA_CCRx寄存器中的PSIZE和MSIZE位编程。指针增量:设置DMA_CCRx寄存器中的PINC和MINC标志位,外设和存储器的指针在每次传输后自动增量修改。增量值取决于所选的数据宽度。第一个传输的地址是存放在DMA_CPARx /DMA_CMARx寄存器中地址。在传输过程中,这些寄存器保持不变,软件不能改变和读出当前正在传输的地址。,8.4 DMA的工作过程,当通道配置为非循环模式时,传输结束后(即传输计数变为0)将不再产生DMA操作。要开始新的DMA传输,需要在关闭DMA通道的情况下,在DMA_CNDTRx寄存器中重新写入传输数目
14、。 在循环模式下,最后一次传输结束时,DMA_CNDTRx寄存器的内容会自动地被重新加载为其初始数值,内部的当前外设/存储器地址寄存器也被重新加载为DMA_CPARx /DMA_CMARx寄存器设定的初始基地址。,8.4 DMA的工作过程,4错误管理 在DMA读写操作中一旦发生总线错误,硬件会自动的清除发生错误的通道所对应的通道配置寄存器(DMA_ CCRx)的EN位,该通道操作被停止,此时DMA_ ISR寄存器中对应该通道的传输错误中断标志位(TEIF)被置位,如果设置了传输错误中断,则产生中断。,8.4 DMA的工作过程,5DMA请求映射 从外设(TIMx, ADC, SPIx, I2Cx
15、和USARTx)产生的7个请求,通过逻辑或输入到DMA控制器。每个通道对应不同的外设。外设DMA请求可以通过软件设置相应外设寄存器中的控制位,独立的开启或关闭。,8.5 DMA应用设计,8.5.1 DMA常用库函数8.5.2 DMA使用流程8.5.3 DMA数据传输应用实例,8.5 DMA应用设计,8.5.1 DMA常用库函数库函数:DMA_DeInit函数DMA_Init函数DMA_StructInit函数DMA_Cmd函数DMA_ITConfig函数DMA_GetCurrDataCounter函数DMA_GetFlagStatus函数DMA_ClearFlag函数DMA_GetITStat
16、us函数DMA_ClearITPendingBit函数,8.5 DMA应用设计,DMA_InitTypeDef DMA_InitStructure;,8.5 DMA应用设计,DMA_PeripheralBaseAddr 该参数用以定义DMA外设基地址。 DMA_MemoryBaseAddr 该参数用以定义DMA内存基地址。 DMA_DIR 参数规定了外设是作为数据传输的目的地,还是数据来源。 DMA_BufferSize参数用来设置一次传输数据量的大小。 DMA_PeripheralInc用来设定外设地址寄存器是否递增。,8.5 DMA应用设计,DMA_MemoryInc 用来设定内存地址寄存
17、器递增与否。DMA_PeripheralDataSize 设定了外设数据宽度。DMA_MemoryDataSize 设定了内存数据宽度。,8.5 DMA应用设计,DMA_Mode 设置了DMA的工作模式(循环、正常)。DMA_Priority 设定DMA通道x的软件优先级,它一共有4个优先级,DMA_M2M设置是否是内存到内存的模式传输。,8.5 DMA应用设计,DMA_Init(DMA1_Channel6, ,8.5 DMA应用设计,DMA_ ITConfig(DMA1_ Channel6, DMA_ IT_ TC, ENABLE);,8.5 DMA应用设计,CurrDataCounterB
18、egin = DMA_ GetCurrDataCounter(DMA1_ Channel6);,8.5 DMA应用设计,DMA_ Cmd(DMA1_ Channel6, ENABLE);/开启DMA,8.5 DMA应用设计,8.5.2 DMA使用流程 DMA应用广泛,可完成内存到内存、外设到内存、内存到外设的传输。以使用中断方式为例,其基本使用流程由三部分构成,即NVIC设置、DMA模式及中断配置、中断服务程序。,8.5 DMA应用设计,1. NVIC设置 完成中断分组、中断通道选择、中断优先级设置及使能中断的功能,流程图如图8-2所示。其中值得注意的是通道的选择,对于不同DMA请求,根据表8
19、-7选择相应的DMA通道,中断通道的选择参考第6章。,8.5 DMA应用设计,2. DMA模式及中断配置用来配置DMA工作模式及开启DMA中断。DMA使用的是AHB总线,使用函数RCC_AHBPeriphClockCmd()开启DMA时钟。某外设的DMA通道外设基地址是由该设备的外设基地址加上相应数据寄存器的偏移地址得到的。例如,ADC1外设基地址(0 x4001 2400)加上ADC数据寄存器(ADC_DR)的偏移地址(Ox4C)得到0 x4001 244C,即为ADC1的DMA通道外设基地址。,8.5 DMA应用设计,2. DMA模式及中断配置内存基地址为内存数组地址。传输方向是针对外设说
20、的,即外设为源或目标。缓冲区大小可以为0-65535之间。对于外设而言,地址自增应禁止,对于存储器则需要使用地址自增。数据宽度有三种选择,即字节、半字和字,应根据外设特点选择相应的宽度。传输模式可选为普通模式(传输一次)或者循环模式,在内存到内存传输时,只能选择普通模式。,8.5 DMA应用设计,3.中断服务进入DMA中断后需根据设计完成响应操作,DMA中断服务流程图如图8-4所示。在启动文件中定义了DMA中断的入口,对于不同的中断请求要采用相应的中断函数名。进入中断后首先要检测中断请求是否为所需中断,以防误操作。如果确实是所需中断,则进行中断处理,中断处理完成后清除中断标志位,避免重复处于中
21、断。,8.5 DMA应用设计,8.5.3 DMA数据传输应用实例 利用DMA通道6将处理器片内Flash中的32位数据缓冲区的内容传送到RAM中所定义的缓冲区内。在传输完成后产生传输完成中断,最后将源缓冲区中数据与目的缓冲区中数据对比来检测所有数据是否传输正确。 由于进行片内存储器到存储器之间的数据传输,因此无需硬件连接。根据设计要求,程序完成以下工作: (1)设置DMA通道6,实现Flash到RAM的DMA传输; (2)通过串口将传输的状态及内容输出; (3)启动DMA,传输结束后比较源数据与目的数据,检测传输结果。 DMA数据传输程序流程图如图8-5所示:,8.5 DMA应用设计,8.5.
22、3 DMA数据传输应用实例,8.5 DMA应用设计,8.5.3 DMA数据传输应用实例int main(void) uint32_t count; TestStatus TransferStatus = FAILED; NVIC_Config(); USART_Config(); DMA_Config(); delay(); printf(nThis is a DMA test!n); printf(Boot success!n); /等待传送结束,在传输完成中断中读取当前数据量的值 while (CurrDataCounterEnd!=0);/DMA传送过程,8.5 DMA应用设计,8.5.
23、3 DMA数据传输应用实例 printf(Complete transfer!n); /输出源数据内容 printf(nThe contents of the SRC_Const_Buffer are:); for(count=0; countBufferSize; count+) if(count%4 = 0) printf(n); printf(0 x% -9x,SRC_Const_Buffercount); ,8.5 DMA应用设计,8.5.3 DMA数据传输应用实例 /输出目的数据内容 printf(nnThe contents of the DST_Buffer are:); for
24、(count=0; countBufferSize; count+) if(count%4 = 0) printf(n); printf(0 x% -9x,DST_Buffercount); /比较源数据和目的数据内容是否相同 TransferStatus = Buffercmp(SRC_Const_Buffer, DST_Buffer, BufferSize); if(TransferStatus = FAILED) printf(nDMA test fail!n); else printf(nnDMA test success!n); while(1);,8.5 DMA应用设计,8.5.3
25、 DMA数据传输应用实例void NVIC_Config(void)NVIC_InitTypeDef NVIC_InitStructure;/* DMA中断NVIC配置*/NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直接 存储器 存取 ppt 课件
链接地址:https://www.31ppt.com/p-1428636.html