dma方式

DMA

耗尽温柔 提交于 2020-01-12 04:28:07
DMA有3种实现方式:内存->内存;内存->外设;外设->内存 (外设->内存的DMA属于ADC) stm32有俩个DMA控制器: DMA1:7通道 DMA2:5通道,只存在于大容量(256K-512K)和互联型产品(f105和f107系列) rbt6开发板属于中容量,标准型,只有DMA1; 由图可知,内存->外设的方式,只能使用对应的通道,不能使用其他的。 而内存->内存的方式,可以使用所有的通道。 DMA一次可以传输2^16个字节的数据 那么,如果多个通道请求到来,应该怎么办? 这时,需要DMA的仲裁器进行仲裁: 1.首先,判断DMA通道x配置寄存器(DMA_CCRx)的PL位; 2.其次,如果PL位相同,判断通道的编号,编号越小,优先级越高。(同时,DMA1的优先级大于DMA2) typedef struct { uint32_t DMA_PeripheralBaseAddr;//外设地址 uint32_t DMA_MemoryBaseAddr; //存储器地址 uint32_t DMA_DIR; //传输方向 //这三个成员共同决定了内存->外设;外设->内存这俩种传输模式 uint32_t DMA_BufferSize; //传输的数量,单位由外设和存储器数据宽度决定 uint32_t DMA_PeripheralInc; //外设地址是否递增 uint32_t DMA

【STM32H7教程】第42章 STM32H7的DMA基础知识和HAL库API

邮差的信 提交于 2020-01-10 11:24:17
完整教程下载地址: http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第42章 STM32H7的DMA基础知识和HAL库API 本章节为大家讲解DMA1(Direct memory access controller,直接存储器访问控制器)和DMA2,相比前面章节的BDMA,功能要强些,属于通用型DMA。 42.1 初学者重要提示 42.2 DMA基础知识 42.3 DMA的HAL库用法 42.4 源文件stm32h7xx_hal_dma.c 42.5 总结 42.1 初学者重要提示 DMA1和DMA2均支持8路通道。虽然是8路,但这8路不是并行工作的,而是由DMA的仲裁器决定当前处理那一路。 DMA最大传输次数65535次,每次传输单位可以是字节、半字和字。 DMA的循环模式不可用于存储器到存储器模式。 DMA1和DMA2带的FIFO是4个32bit的空间,即16字节。 使用DMA的FIFO和突发需要注意的问题较多,详情可看本章2.7小节。 STM32H7的参数手册DMA章节对存储器到存储器,外设到存储器,外设到存储器模式的传输过程进行了讲解,推荐大家看完本章节后读一下。 42.2 DMA基础知识 DMA的几个关键知识点放在开头说: 由于总线矩阵的存在,各个主控的道路四通八达,从而可以让DMA和CPU同时开工

DMA原理

半腔热情 提交于 2020-01-07 08:44:07
1.DMA请求 CPU对DMA控制器初始化,并向 I/O接口 发出操作命令,I/O接口提出DMA请求。 2.DMA响应   DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。 3.DMA传输   DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。   在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。 4.DMA结束   当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。   由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。    DMA(Direct Memory Access

EDMA - DMA QDMA 完美总结

本秂侑毒 提交于 2020-01-05 09:03:35
EDMA - DMA QDMA -------------------------------- 做个参考,和6487/8 的EDMA3的user guide有点区别. ------------------------------------ EDMA概要 ①EDMA数据传输有两种发起方式: ü CPU发起的EMDA数据传输(非同步方式):需要传输时,CPU设置ESR寄存器的相应位为1,从而触发一个EDMA事件的产生,事件对应的通道参数被送往地址硬件并且完成相应的处理,这种非同步方式的实时数据传输无需设定EER寄存器; ü 事件触发方式EDMA数据传输(同步方式):ER寄存器保存外设发送过来的事件,一旦CPU设置EER寄存器的相应位为1后,ER中的事件才会提交给事件编码器(Event Encoder),并且进一步引起相关的传输参数的发送给地址产生硬件;如果EER中对应于某事件的位没有置1,则ER寄存器中的事件将保留,一旦置1则触发EDMA的传输,这种特性可以应用到EDMA Chain传输,需要EER和CCER结合使用; ②EDMA每个通道是和特定的系统事件绑定的,如下表所示: ③EDMA Chain Transfer:一个通道传完继续传另一个通道; ④EDMA Link Tansfer:设定参数后,通道的数据传输传完,再载入这个通道的其他参数设定,再进行数据传输; (2

异步编程与多线程的联系与区别

旧街凉风 提交于 2020-01-03 06:59:30
浅谈异步与多线程的区别   C#中异步和多线程的区别是什么呢?异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性。甚至有些时候我们就认为异步和多线程是等同的概念。但是,异步和多线程还是有一些区别的。而这些区别造成了使用异步和多线程的时机的区别。     异步操作的本质   所有的程序最终都会由计算机硬件来执行,所以为了更好的理解异步操作的本质,我们有必要了解一下它的硬件基础。 熟悉电脑硬件的朋友肯定对DMA这个词不陌生,硬盘、光驱的技术规格中都有明确DMA的模式指标,其实网卡、声卡、显卡也是有DMA功能的。DMA就是直 接内存访问的意思,也就是说,拥有DMA功能的硬件在和内存进行数据交换的时候可以不消耗CPU资源。只要CPU在发起数据传输时发送一个指令,硬件就开 始自己和内存交换数据,在传输完成之后硬件会触发一个中断来通知操作完成。这些无须消耗CPU时间的I/O操作正是异步操作的硬件基础。所以即使在DOS 这样的单进程(而且无线程概念)系统中也同样可以发起异步的DMA操作。   线程的本质   线程不是一个计算机硬件的功能,而是操作系统提供的一种逻辑功能,线程本质上是进程中一段并发运行的代码,所以线程需要操作系统投入CPU资源来运行和调度。   异步操作的优缺点   因为异步操作无须额外的线程负担,并且使用回调的方式进行处理,在设计良好的情况下

STM32CbueMX之I2C HAL_ERROR 和 DMA 不启动

有些话、适合烂在心里 提交于 2019-12-31 13:44:45
如果是使用STM32CbueMX生成 I2C 的代码,使用 I2C 读写 过程会出现HAL_ERROR。 这个时候一般有两种选择, 方式一:是选择IO模拟I2C; 方式二:是排查代码问题解决硬件I2C。 使用DMA的时候有时候DMA启动失败,往往这是时候我们就方式使用DMA了,转而使用更低效率的方式发接数据。 方式一:问度娘。 方式二: 像这种情况,很多人说ST的I2C有bug,可能由于专利问题。但是我觉得吧,那么多人在用ST的MCU,怎么可能会。 原因就是初始化流程的问题。 首先要想到的是看ST的官方源码是怎么使用硬件I2C的,和STM32CbueMX生成的代码比对一下。 下面是STM32CbueMX生成的I2C初始化代码 int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_I2C1_Init(); MX_DMA_Init(); while (1) { } } static void MX_I2C1_Init(void) { hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 100000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init

vxworks下gmac调试的总结

こ雲淡風輕ζ 提交于 2019-12-25 05:28:21
1:3280芯片手册详解过程: MAC 控制器支持 DMA 接收和发送,内部在接收和发送方向各有一个 2048 字节的 FIFO作为缓存。由于 FIFO 深度所限,MAC 控制器不支持硬件自动流控机制。 模式和带宽的切换 1:在做 MII 和 RMII 之间的切换前,应该先掉电 2:上电后软件重新配置芯片系统控制模块中MAC 的工作接口模式寄存器,之后再启动 MAC 控制器 3:需要注意的是,在收发功能开启的状态下不能对双工模式或速率进行改变(先关掉Mac收发,这样可以避免出现大量的错包的情况) 1:所有的发送中断和接收中断触发的条件都是dma操作完成(dma完成数据搬运的操作); 2:较早发送和接收中断说明数据帧较大不是一个buffer发送; 芯片的寄存器空间: MAC 模块支持以太网 PHY 的 MII 接口和 RMII 接口。 CSR(Control & Status 寄存器)共占有 8KB 地址空间,分为两段:DMA CSR 和 MAC CSR。 AHB Master 接口为 DMA 模块与系统主机的接口。 APB 接口即 CSR 接口,用于读写访问 DMA CSR 和 MAC CSR。 DMA 模块有独立的发送和接收引擎,进行系统内存与 MAC 间的数据搬运,将 CPU 的 干预最小化,只在帧发送或接收结束以及其他一些条件(如发生错误)下中断 CPU。 DMA

ARM数据/地址总线架构简析

霸气de小男生 提交于 2019-12-21 20:01:20
ARM架构简析 1,ARM概述 现在大家讲的ARM的概念实际上是很模糊的,他可能指的是一类芯片,或者指的是ARM公司,亦或者是精简指令集,还是千万人手中的饭碗。下面引用一段关于百度百科关于ARM的准确描述 ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)处理器架构。还有基于ARM设计的派生产品,重要产品包括Marvell的XScale架构和德州仪器的OMAP系列。 ARM家族占比所有32位嵌入式处理器的75%,成为占全世界最多数的32位架构。 在1980年代晚期,苹果电脑开始与Acorn合作开发新版的ARM核心,由于这专案非常重要,Acorn甚至于1990年将设计团队另组成一间名为安谋国际科技(Advanced RISC Machines Ltd.)的新公司。也基于这原因,使得ARM有时候反而称作Advanced RISC Machine而不是Acorn RISC Machine。由于其母公司ARM Holdings plc于1998年的伦敦交易市场和NASDAQ挂牌上市[1],使得Advanced RISC Machines成了ARM Ltd旗下拥有的产品。 这个专案到后来进入了ARM6,首版的式样在1991年释出,然后苹果电脑使用ARM6架构的ARM

STM32 DMA传输笔记(HAL库版)

拟墨画扇 提交于 2019-12-19 07:26:56
DMA,全称为:Direct Memory Access,即直接存储器访问。 DMA传输方式无需CPU 直接控制传输 ,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM 与I/O设备开辟一条直接传送数据的通路,能使CPU 的效率大为提高。 一、DMA请求映像   STM32F10x有两个DMA控制器,使用DMA控制器可使数据从存储器到存储器、存储器到外设、外设到存储器。每个控制器有若干通道,参考《STM32参考手册》,各通道请求一览如下图: 二、DMA初始化    1、使能DMA时钟 __HAL_RCC_DMA1_CLK_ENABLE(); //DMA1时钟使能    2、关联DMA与UART1 DMA_HandleTypeDef UART1TxDMA_Handler; //DMA句柄 __HAL_LINKDMA(&UART1_Handler,hdmatx,UART1TxDMA_Handler); //将DMA与USART1联系起来(发送DMA)    3、配置DMA句柄 //Tx DMA配置 UART1TxDMA_Handler.Instance=chx; //通道选择 通道4指的是UART1Tx UART1TxDMA_Handler.Init.Direction=DMA_MEMORY_TO_PERIPH; //存储器到外设 /*由于是从存储器读数据给外设

【计算机组成原理】 输入/输出系统

依然范特西╮ 提交于 2019-12-18 02:35:31
I/O 系统基本概念 I/O 系统中的几个基本概念如下: 外部设备。包括输入/输出设备及通过输入。输出接口才能访问的外存储结构。 接口。在各个外设与主机之间传输数据时进行各种协调工作的逻辑部件。协调包括传输过程中速度的匹配、电平和格式转换等。 输入设备,用于向计算机系统输入命令和文本、数据等信息的部件。键盘和鼠标是最基本的输入设备。 输出设备。用于将计算机系统中的信息输出到计算机外部进行显示、交换等的部件。显示器和打印机是最基本的输出设备。 外存设备。指除计算机内存及 CPU 缓存等外的存储器。硬磁盘、光盘等是最基本的外存设备。 一般来说,I/O 系统由 I/O 软件和 I/O 硬件两部分构成: I/O 软件。包括驱动程序、用户程序、管理程序、升级补丁等。通常采用 I/O 指令和通道指令实现 CPU 与 I/O 设备的信息交换。 I/O 硬件。包括外部设备、设备控制器和接口、I/O 总线等。通过设备控制器来控制 I/O 设备的具体动作:通过 I/O 接口与主机(总线)相连。 在输入/输出系统中,经常需要进行大量的数据传输,而传输过程中有各种不同的 I/O 控制方式,基本的控制方式有以下 4 种: 程序查询方式。由 CPU 通过程序不断查询 I/O 设备是否已经做好准备,从而控制 I/O 设备与主机交换信息。 程序中断方式。只在 I/O 设备准备就绪并向 CPU