dma

直接存储器存取(DMA)

£可爱£侵袭症+ 提交于 2020-03-24 20:38:34
DMA作用于存储器传输存储器,存储器传输外设,外设传输存储器,不需要CPU的干涉,解放CUP,相当于多线程。 DMA的使用: 1.开启DMA时钟,2.先删除所用到的DMA通道,3.配置外设地址,4.配置源地址,5.配置传输方向(源地址到外设或是外设到源地址),6.配置DMA传输的大小(16位 65536),7.配置源地址是否增长和外设地址是否增长 8.配置外设和源地址的传输位(一定要一样)9.使能DMA 10.配置优先级(4种,如果优先级相同,根据DMA通道的高低来总裁),11是否是存储器传输给存储器 每个通道有三个标志事件HTIF,TCIF,TEIF,开启相应标志即可产生中断。 来源: https://www.cnblogs.com/Start-wyz/p/12561353.html

DMA---直接存储器访问

霸气de小男生 提交于 2020-03-12 13:37:22
一、DMA简介 DMA传输实现高速数据移动过程无需任何CPU操作控制。 DMA控制器是独立于Cortex_M4内核的。 STM32F407共有2个DMA控制器,DMA1只有外设到存储器和存储器到外设的传输模式,DMA2具有外设到存储器、存储器到外设以及存储器到存储器的传输模式。 传输模式: 1》外设到存储器(P--->M):把外设数据寄存器内容转移到指定的内存空间。 2》存储器到外设(M--->P):把特定存储区内容转移到外设的数据寄存器中。 3》存储器到存储器(M--->M):把一个指定的存储区内容拷贝到另一个存储区空间。 二、功能框图 (1)外设通道选择 每个DMA控制器具有8个数据流,每个数据流对应8个外设通道,每个通道对应不同的DMA请求。 外设通道选择要解决的主要问题是决定哪一个外设作为该数据流的源地址或者目标地址。 每个外设请求都占用一个数据流通道,相同外设请求可以占用不同数据流通道。 (2)仲裁器 仲裁器用来管理判断哪个数据流的优先级高。 仲裁器管理数据流方法分为两个阶段:第一阶段数据软件阶段,在配置数据流时可以通过寄存器设定它的优先级别,可以设置为非常高、高、中和低四个级别。第二阶段数据硬件阶段,如果两个或两个以上数据流软件设置优先级一样,则它们优先级取决于数据流编号,编号越低优先级越高,比如数据流2优先级高于数据流3。 (3)FIFO

Linux驱动之USB鼠标驱动编写

主宰稳场 提交于 2020-03-08 07:41:55
本篇博客分以下几部分讲解 1、介绍USB四大描述 2、介绍USB鼠标驱动程序功能及框架 3、介绍程序用到的结构体 4、介绍程序用到的函数 5、编写程序 6、测试程序 1、介绍USB四大描述符 USB设备驱动程序里定义了许多与驱动程序密切相关的描述符。这里介绍一下四种比较关键的描述符: 设备描述符 、 配置描述符 、 接口描述符 、 端点描述符 。这几个描述符都位于include\linux\usb\ch9.h中,先看一下每个描述直接的关系,从图中可以看出每一个查到USB主机上的USB设备都有一个设备描述符,设备描述符下面可以接多个配置描述符,配置描述符下面又可以接多个 当USB设备接到USB控制器上后,USB控制器第一次读取到的数据包,总共8字节 /*当USB设备接到USB控制器上后,USB控制器第一次读取到的数据包,总共8字节*/ struct usb_ctrlrequest { __u8 bRequestType; __u8 bRequest; __le16 wValue; __le16 wIndex; __le16 wLength; } __attribute__ ((packed)); 设备描述符 是在设备连接时,主机第一个读取的描述符,包含了主机需要从设备读取的基本信息。设备描述符有14个字段,如下所示。依照功能来分,设备描述符的字段包含了描述符本身、设备

Linux USB 鼠标驱动程序解析

大憨熊 提交于 2020-03-07 04:41:21
USB 总线引出两个重要的链表!   一个 USB 总线引出两个重要的链表,一个为 USB 设备链表,一个为 USB 驱动链表。设备链表包含各种系统中的 USB 设备以及这些设备的所有接口,驱动链表包含 USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)。   USB 设备驱动程序(usb device driver)和 USB 驱动程序(usb driver)的区别是什么?   USB 设备驱动程序包含 USB 设备的一些通用特性,将与所有 USB 设备相匹配。在 USB core 定义了:struct usb_device_driver usb_generic_driver。usb_generic_driver 是 USB 子系统中唯一的一个设备驱动程序对象。而 USB 驱动程序则是与接口相匹配,接口是一个完成特定功能的端点的集合。   设备是如何添加到设备链表上去的?   在设备插入 USB 控制器之后,USB core 即会将设备在系统中注册,添加到 USB 设备链表上去。   USB 设备驱动程序(usb device driver)是如何添加到驱动链表上去的?   在系统启动注册 USB core 时,USB 设备驱动程序即将被注册,也就添加到驱动链表上去了。   接口是如何添加到设备链表上去的?   在 USB

【连载】【FPGA黑金开发板】NIOS II那些事儿--NIOS II 常见问题(FAQ)

。_饼干妹妹 提交于 2020-03-06 09:55:20
为了帮助初学者快速入门NIOS II,在此建立NIOS II FAQ,希望大家把自己遇到的问题提出来,然后在这里总结起来,以帮助以后遇到同样问题的人。 首先需要声明一点,下面部分问题来自网络,如果版权问题,请及时通知,我将会将其删除 在此提几点要求和规定: 1.此贴是NIOS II FAQ,所以不收录其他相关内容; 2.大家通过回帖方式进行提问,如果有其他人可以解决,也是通过回帖方式进行解决; 3.问题解决以后,我会将其编入这个贴内,然后将问题跟帖删除,避免跟帖过多的影响。 4.禁止在回帖中涉及与NIOS II无关内容,一经发现立即删除。 -------------------------------------------华丽的分割线---------------------------------------------------------------------- 1.NIOS能做浮点运算么? 答:NIOS可以进行浮点运算,完全可以替代MCU,时钟可以跑到100Mhz,比ARM7还要快,ARM7时钟一般为72Mhz左右。 2.NIOS是否可以不使用SDRAM和并行FLASH? 答:首先说明一下,SDRAM是用来运行程序的,FLASH是用来存储程序代码的(SDRAM掉电丢失,FLASH则不会),每次上电的时候,都需要将FLASH中的程序代码放到SDRAM中,然后再运行。

Can the STM32H743's FMC drive a 16-bit 8080 bus faster than 1.6MHz when clocked at 480MHz?

随声附和 提交于 2020-03-05 00:39:01
问题 I'm using the FMC of the STM32H743 to drive a 16-bit 8080-bus LCD controller. I've tried using DMA, MDMA and a CPU-loop to transfer data to the 8080-bus, via the FMC. The transfer frequency does not depend on whether DMA, MDMA or CPU-loop is used. This make me think that the DMA/MDMA/CPU-loop is not the limiting factor. At a 480MHz FMC clock, the transfer happens at just 1.6MHz, giving me only 20fps on a 16-bit colour 320x240 LCD. At a 240MHz FMC clock, the transfer happens at just 0.8MHz,

Can the STM32H743's FMC drive a 16-bit 8080 bus faster than 1.6MHz when clocked at 480MHz?

99封情书 提交于 2020-03-05 00:35:08
问题 I'm using the FMC of the STM32H743 to drive a 16-bit 8080-bus LCD controller. I've tried using DMA, MDMA and a CPU-loop to transfer data to the 8080-bus, via the FMC. The transfer frequency does not depend on whether DMA, MDMA or CPU-loop is used. This make me think that the DMA/MDMA/CPU-loop is not the limiting factor. At a 480MHz FMC clock, the transfer happens at just 1.6MHz, giving me only 20fps on a 16-bit colour 320x240 LCD. At a 240MHz FMC clock, the transfer happens at just 0.8MHz,

Can the STM32H743's FMC drive a 16-bit 8080 bus faster than 1.6MHz when clocked at 480MHz?

孤街浪徒 提交于 2020-03-05 00:33:11
问题 I'm using the FMC of the STM32H743 to drive a 16-bit 8080-bus LCD controller. I've tried using DMA, MDMA and a CPU-loop to transfer data to the 8080-bus, via the FMC. The transfer frequency does not depend on whether DMA, MDMA or CPU-loop is used. This make me think that the DMA/MDMA/CPU-loop is not the limiting factor. At a 480MHz FMC clock, the transfer happens at just 1.6MHz, giving me only 20fps on a 16-bit colour 320x240 LCD. At a 240MHz FMC clock, the transfer happens at just 0.8MHz,

PCIe调试心得_DMA part2

筅森魡賤 提交于 2020-03-01 22:15:20
作者: East FPGA那点事儿 上一章讲述了PCIe总线DMA的原理和XAPP1052存在的问题。 本章以服务器常用的4通道1000M以太网卡为例讲述如何提高DMA的效率。 1.内存重分配 Windows操作系统会划分一部分硬盘空间作为虚拟内存,将长时间不用得应用程序或内存交换到硬盘中,而释放出一部分内存空间供其他应用程序使用,提高计算机的性能。 或者操作系统会定进行内存碎片整理,将应用程序中零散的内存收集起来重新分配,减少内存碎片。 但是如果被交换或整理的是DMA使用的内存就麻烦了。操作系统已经为该内存重新分配了物理地址,而原内存分配给了其他应用程序,此时DMA再使用该内存,必然导致死机蓝屏现象。XAPP1052就没有很好的解决该问题,在程序中设置禁止将该内存交换到硬盘或整理。 2.内存大小 XAPP1052中申请到的物理连续内存大小为4KB。因为DDR内存内部是以块为单位,最小块为4KB,所以在操作系统中比较容易申请到4KB的物理连续内存。 4KB这个大小太小了。以太网数据小包为64B,大包为1512B,假如连续收到3个大包,那么应该怎样利用4KB的内存呢? 一种方式是一片4KB内存只存放2包数据,剩余内存浪费,第二片4KB内存存放第三包数据;另一种方式是将第三包数据拆分,前一半数据存放在第一片内存,后一半数据存放在第二片内存。 第一种方式将浪费976B,内存利用率非常低

289_S32K144串口的查询接收模式

余生长醉 提交于 2020-03-01 08:22:46
完整的S32K144的学习汇总如下: https://github.com/GreyZhang/g_s32k144 继续S32K144的学习,还是继续串口的学习。因为我觉得前面实现的这种阻塞收发模式虽然稳定,但是还有改进空间。尤其是DMA的使用,在这种模式下似乎是不奏效的。其实,发送功能倒还好一点,接收功能,我觉得还是得实现查询的方式。 查看接口信息,发现其实这个似乎也是已经实现了的一个功能。我找到了下面的这个接口: 使用这个做一下实现,测试代码修改如下: 做一下简单的测试。 看得出,这个接收的可靠性还是很高的。以上的测试是基于中断的传输模式实现的,切换成DMA其实也有同样的效果。切换DMA的配置之后,测试结果如下: 完整的S32K144的学习汇总如下: https://github.com/GreyZhang/g_s32k144 来源: CSDN 作者: grey_csdn 链接: https://blog.csdn.net/grey_csdn/article/details/104580702