DMA介绍-寄存器、库函数归纳
什么是DMADMADirect Memory Access直接存储器访问提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通而不需要依赖于CPU在这个时间中CPU对于内存的工作来说就无法使用。*DMA就是一个数据搬运工DMA的意义代替CPU搬运数据为CPU减负数据搬运的工作比较耗时间数据搬运工作时效要求高有数据来就要搬走没啥技术含量CPU 节约出来的时间可以处理更重要的事。搬运什么数据存储器、外设这里的外设指的是spi、usart、iic、adc 等基于APB1 、APB2或AHB时钟的外设而这里的存储器包括自身的闪存(flash)或者内存(SRAM)以及外设的存储设备都可以作为访问地源或者目的。三种搬运方式存储器→存储器例如复制某特别大的数据buf存储器→外设 例如将某数据buf写入串口TDR寄存器外设→存储器 例如将串口RDR寄存器写入某数据bufDMA框图CPU搬运数据走系统总线将APB1和APB2接的外设存储器捏的数据和SRAM进行互传DMA搬运数据先由外设发送DMA请求由仲裁器判断优先级走DMA总线将APB1和APB2接的外设存储器捏的数据和SRAM进行互传DMA控制器STM32F103C8T6只有DMA1DMA1有7个通道DMA2有5个通道一个通道每次只能搬运一个外设的数据如果同时有多个外设的DMA请求则按照优先级进行响应。DMA优先级管理软件硬件软件每个通道的优先级可以在DMA_CCRx寄存器中设置有4个等级最高级高级中级低级硬件如果2个请求它们的软件优先级相同则较低编号的通道比较高编号的通道有较高的优先权。比如如果软件优先级相同通道2优先于通道4DMA传输方式DMA_Mode_Normal正常模式一次DMA数据传输完后停止DMA传送 也就是只传输一次DMA_Mode_Circular循环传输模式当传输结束时硬件自动会将传输数据量寄存器进行重装进行下一轮的数据传输。 也就是多次传输模式指针递增模式外设和存储器指针在每次传输后可以自动向后递增或保持常量。当设置为增量模式时下一个要传输的地址将是前一个地址加上增量值。DMA数据对齐模式紫色为要传输的数据的宽度绿色为被传端的宽度宽度一致则正好覆盖紫色端的宽度较小则传输到绿色端的低位高位补零紫色端的宽度较大则紫色端的低位占满绿色端紫色端其余高位溢出DMA寄存器DMA中断状态寄存器(DMA_ISR)DMA中断标志清除寄存器(DMA_IFCR)位31:28保留始终读为0。位27 23 19 15 11 7 3CTEIFx清除通道x的传输错误标志(x 1 … 7) (Channel x transfer error clear)这些位由软件设置和清除。br /0不起作用br /1清除DMA_ISR寄存器中的对应TEIF标志。位26 22 18 14 10 6 2CHTIFx清除通道x的半传输标志(x 1 … 7) (Channel x half transfer clear)这些位由软件设置和清除。br /0不起作用br /1清除DMA_ISR寄存器中的对应HTIF标志。位25 21 17 13 9 5 1CTCIFx清除通道x的传输完成标志(x 1 … 7) (Channel x transfer complete clear)这些位由软件设置和清除。br /0不起作用br /1清除DMA_ISR寄存器中的对应TCIF标志。位24 20 16 128 4 0CGIFx清除通道x的全局中断标志(x 1 … 7) (Channel x global interrupt clear)这些位由软件设置和清除。br /0不起作用br /1清除DMA_ISR寄存器中的对应的GIF、 TEIF、 HTIF和TCIF标志。DMA通道x配置寄存器(DMA_CCRx)(x 1…7)位31:15保留始终读为0。位14MEM2MEM存储器到存储器模式 (Memory to memory mode)该位由软件设置和清除。br /0非存储器到存储器模式br /1启动存储器到存储器模式。位13:12PL[1:0]通道优先级 (Channel priority level)这些位由软件设置和清除。br /00低br /01中br /10高br /11最高位11:10MSIZE[1:0]存储器数据宽度 (Memory size)这些位由软件设置和清除。br /00 8位br /01 16位br /10 32位br /11保留位9:8PSIZE[1:0]外设数据宽度 (Peripheral size)这些位由软件设置和清除。br /00 8位br /01 16位br /10 32位br /11保留位7MINC存储器地址增量模式 (Memory increment mode)该位由软件设置和清除。br /0不执行存储器地址增量操作br /1执行存储器地址增量操作位6PINC外设地址增量模式 (Peripheral increment mode)该位由软件设置和清除。 0不执行外设地址增量操作br /1执行外设地址增量操作位5CIRC循环模式 (Circular mode)该位由软件设置和清除。br /0不执行循环操作br /1执行循环操作位4DIR数据传输方向 (Data transfer direction)该位由软件设置和清除。br /0从外设读br /1从存储器读位3TEIE允许传输错误中断 (Transfer error interrupt enable)该位由软件设置和清除。0禁止TE中断br /1允许TE中断位2HTIE允许半传输中断 (Half transfer interrupt enable)该位由软件设置和清除。br /0禁止HT中断br /1允许HT中断位1TCIE允许传输完成中断 (Transfer complete interrupt enable)该位由软件设置和清除。br /0禁止TC中断br /1允许TC中断位0EN通道开启 (Channel enable)该位由软件设置和清除。0通道不工作1通道开启DMA通道x传输数量寄存器(DMA_CNDTRx)(x 1…7)DMA通道x外设地址寄存器(DMA_CPARx)(x 1…7)DMA通道x存储器地址寄存器(DMA_CMARx)(x 1…7)