dma

反射内存 RFM5565 分散/集聚的 DMA 操作示例

送分小仙女□ 提交于 2019-11-27 08:08:44
反射内存RFM5565分散/集聚的DMA 操作示例 注:scatter/gather 方式是与block dma 方式相对应的一种dma 方 式。 连续的。但在有的计算机体系中,如IA,连续的存储器地址在物理 在dma 传输数据的过程中,要求源物理地址和目标物理地址必须是 上不一定是连续的,则dma 传输要分成多次完成。 如果传输完一块物理连续的数据后发起一次中断,同时主机进行下一 块物理连续的传输,则这种方式即为block dma 方式。 scatter/gather 方式则不同,他是用一个链表描述物理不连续的存储器, 然后把链表首地址告诉dma master。dma master 传输完一块物理连续 的数据后,就不用再发中断了,而是根据链表传输下一块物理连续的 数据,最后发起一次中断。 很显然scatter/gather 方式比block dma 方式效率高。 分散/集聚DMA 传输是一种用于执行分割成不同小块的大型数 据的传输的模式。注意:在一个数据页不能跨越4 GB 的地址边界。 该DMA 描述符指针是链表页描述地址。 每个页面描述符定义一个地址和数据块大小加上下一个描述符 块的指针。当数据被读取/写入到相应的页面,自动获取描述符。描 述链处理直到数据传输完成或达到的描述链的末端,以先到者为准。 页面描述符块不能被映射在64 位寻址空间。第一个描述符必须 是一个16

kmalloc/kfree,vmalloc/vfree函数用法和区别

那年仲夏 提交于 2019-11-27 07:29:15
1 kmalloc kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零. tiger说明:在用kmalloc申请函数后,要对起清零用memset()函数对申请的内存进行清零。 2 kamlloc函数原型 # include <linux/slab.h> void * kmalloc ( size_t size , int flags ) ; (1)第一个参数是要分配的块的大小 (2)第二个参数是分配标志(flags),他提供了多种kmalloc的行为。 最常用的GFP_KERNEL 表示内存分配(最终总是调用get_free_pages来实现实际的分配;这就是GFP前缀的由来)是代表运行在内核空间的进程执行的。使用GFP_KERNEL容许kmalloc在分配空闲内存时候如果内存不足容许把当前进程睡眠以等待。因此这时分配函数必须是可重入的。 GFP_ATOMIC 用来从中断处理和进程上下文之外的其他代码中分配内存. 从不睡眠. GFP_USER 用来为用户空间页来分配内存; 它可能睡眠. GFP_HIGHUSER 如同 GFP_USER, 但是从高端内存分配, 如果有. 高端内存在下一个子节描述. GFP_NOFS,GFP_NOIO 这个标志功能如同 GFP_KERNEL, 但是它们增加限制到内核能做的来满足请求. 一个 GFP_NOFS

关于启用DMA的方法

☆樱花仙子☆ 提交于 2019-11-27 01:43:05
这是一个老问题……希望对那些不幸遇到的朋友有点帮助 当然,这里的前提是:主板、硬盘(光驱)都支持DMA,驱动程序安装正确,启用了DMA模式但是仍然在低速DMA或PIO下运行的情况。 问题的产生:在Windows 2000/XP/2003中有这样一个设定: Windows IDE/ATAPI 端口驱动程序 (Atapi.sys) 累积收到总共6个超时或循环冗余检验(CRC)错误后,驱动程序将把通信速度(传送模式)从最快的直接内存访问(DMA)模式分步骤降为较慢的 DMA 模式。如果驱动程序继续收到超时或 CRC 错误,则驱动程序最终将把传送模式降为最慢的模式(PIO 模式)。问题就在这里!一般来说一个正常的硬盘很少会有超时或CRC错误,但是当我们使用这些系统里的挂起(或休眠)并恢复计算机后就很容易造成超时或CRC错误。因为系统设定的超时值为4秒,当系统向 ATA 磁盘发出读取请求时如果硬盘回应时间超过 4 秒的超时值时才会产生超时或CRC错误,但因为系统在挂起(也有叫休眠)时硬盘是在停转状态中,恢复计算机时硬盘有个从停止到运动的过程,这就很容易造成大部分硬盘回应时间超过 4 秒的超时值。也就是说当我们使用计算机挂起6次后系统就会把通信速度(传送模式)从最快的DMA模式分步骤降为较慢的DMA模式。如果挂起6次以上则驱动程序最终将把传送模式降为最慢的模式(PIO 模式)。 解决办法

dma vs interrupt-driven i/o

有些话、适合烂在心里 提交于 2019-11-27 00:39:25
问题 I'm a little unclear on differences between DMA and interrupt I/O. (Currently reading Operating Systems Concepts, 7th ed). Specifically, I'm not sure when the interrupts occur in either case, and at what points in both cases is the CPU is free to do other work. Things I've been reading, but can't necessarily reconcile: Interrupt-driven Controller initialized via driver Controller examines registers loaded by driver in order to decide action Data transfer from/to peripheral and controller's

意念控制四旋翼 学习笔记

帅比萌擦擦* 提交于 2019-11-26 19:59:50
第一部分:模块原始数据 拿到模块,在网上查了一圈,发现基本没什么有用的资料,很多都是一些相关但是没有实际价值的东西。许多论文都是再谈怎么去做,而没有实实在在的去完成这么一个过程。 废话不多说,直接步入正题。 昨天在网上才发现这个软件,据评论说是这款串口软件很好用。 RealTerm的下载地址 https://realterm.sourceforge.io/ 这是通过单片机的232通信例程直接接收得到的原始数据,也就是参考手册中的数据流。其中小包数据,是每秒512个大概,大包数据是每秒1个。 小包的格式是AA AA 04 80 02 xxHigh xxLow xxCheckSum前面的AA AA 04 80 02 是不变的,后三个字节是一只变化的,xxHigh和xxLow组成了原始数据rawdata,xxCheckSum就是校验和。所以一个小包里面只包含了一个对开发者来说有用的数据,那就是rawdata,可以说一个小包就是一个原始数据,大约每秒钟会有512个原始数据。 从小包中解析出原始数据: rawdata = (xxHigh << 8) | xxLow; if(rawdata > 32768){ rawdata ­=65536; } 根据手册,在计算原始数据之前,要先检查检验和: sum = ((0x80 + 0x02 + xxHigh + xxLow)^ 0xFFFFFFFF)

WIZnet-io6Library下载及使用

南笙酒味 提交于 2019-11-26 16:58:43
概观 io6Library是一个IPv6集成库,可以轻松集成和管理使用WIZnet硬连线双TCP / IP堆栈控制器(WIZCHIP)产品系列的用户应用程序。 io6Library用于管理依赖于用户特定MCU的代码,因此用户无需根据用户MCU执行io6Library的移植操作。(有关更多信息,请参见如何使用) 内容 io6Library 可分为以下三种类型。 Reigsters Defintion     通用寄存器:定义通用寄存器,如网络信息,模式,中断等。     套接字寄存器:定义SOCKET寄存器,如套接字模式,套接字通信,套接字中断等。 每个WIZCHIP I / O访问功能     基本I / O功能:通过WIZCHIP定义的HOST接口(SPI,BUS等)访问输入/输出的基本单元功能     公共寄存器访问功能:基于基本I / O功能访问公共寄存器的功能     SOCKET寄存器访问功能:基于基本I / O功能访问SOCKET寄存器的功能 WIZCHIP控制API,用于用户应用程序集成,管理和迁移     SOCKET API:与BSD SOCKET API一样,SOCKET API提供可以与socket socket commuuincation相关的函数集     额外的API:它提供支持用户应用程序集成的功能,无论WIZCHIP特定的Regiter /

计算机组成原理复习题二

时光毁灭记忆、已成空白 提交于 2019-11-26 12:33:28
原文地址: https://wenku.baidu.com/view/935be3d1c1c708a1284a4446 一、选择题 1、在间址周期中,_C_____。 A.所有指令的间址操作都是相同的; B.凡是存储器间接寻址的指令,它们的操作都是相同的; C.对于存储器间接寻址或寄存器间接寻址的指令,它们的操作是不同的; D.以上都不对。 2、将有关数据加以分类、统计、分析,以取得有利用价值的信息,我们称其为_C_____。 A. 数值计算 B. 辅助设计 C. 数据处理 D. 实时控制 3、定点16位字长的字,采用2的补码形式表示时,一个字所能表示的整数范围是____A_。 A.-215 ~ +(215 -1) B.-(215 –1)~ +(215 –1) C.-(215 + 1)~ +215 D.-215 ~ +215 4、根据传送信息的种类不同,系统总线分为___B___。 A. 地址线和数据线 B. 地址线、数据线和控制线 C. 地址线、数据线和响应线 D. 数据线和控制线 5、外存储器与内存储器相比,外存储器__B____。 A.速度快,容量大,成本高 B.速度慢,容量大,成本低 C.速度快,容量小,成本高 D.速度慢,容量大,成本高 一个256K×8的存储器,其地址线和数据线总和为___C___。 注解:256=2的8次方,所以地址线为8,256K*8