dma

audio write pcm ioctl - SNDRV_PCM_IOCTL_WRITEI_FRAMES

痴心易碎 提交于 2019-12-02 12:50:09
http://androidxref.com/9.0.0_r3/xref/external/tinyalsa/pcm.c#535 http://androidxref.com/kernel_3.18/xref/sound/core/pcm_native.c#2745 https://blog.csdn.net/Vincentywj/article/details/77849442 对于回放的情形,PCM 数据流向大致是: copy_from_user DMA I2S DAC ^ ^ ^ ^ +---------+ | +----------+ | +-----------+ | +-----+ | +------+ |userspace+-------->DMA Buffer+------->I2S TX FIFO+------->CODEC+------->SPK/HP| +---------+ +----------+ +-----------+ +-----+ +------+ 来源: https://blog.csdn.net/chenqiang0721/article/details/102761326

LCD驱动及Framebuffer相关

主宰稳场 提交于 2019-12-02 03:34:17
1.名词解释 GPU:Graphic Processing Unit (图形处理器) OpenGL:Open Graphic Library 定义了一个跨编程语言、跨平台的编程接口的规格,不同厂商会有不同的实现方法,它主要用于三维图象(二维的亦可)绘制。 SurfaceFlinger:Android中负责Surface之间叠加、混合操作的动态库 Skia:Android中的2D图形库 libagl:Android中通过软件方法实现的一套OpenGL动态库 libhgl:为区别libagl,自定义的一种叫法。特指GPU厂商提供的硬件实现的OpenGL composition:特指SurfaceFlinger对各个Surface之间的叠加、混合操作 render:特指使用OpenGL动态库进行3D渲染 copybit:Android使用2D引擎来加速图形操作(主要是Surface之间的composition操作)的一种技术,对应着一个或几个动态库。 pmem:Android特有驱动,从linux内核中reserve物理连续内存,可以为2d、3d引擎、vpu等设备分配物理连续内存。 Android在启动后,会在运行时根据配置文件加载OpenGL(libagl & libhgl)的实现,如果有libhgl实现,默认使用libhgl实现,否则使用libagl实现。

DMA直接存储器访问详解

痴心易碎 提交于 2019-12-02 02:47:42
DMA:Data Memory Access,直接存储器访问。主要功能是可以把数据从一个地方搬到另外一个地方,而且不占用CPU。 DMA1:有7个通道,可以实现 P->M,M->P, M->M DMA2:有7个通道,可以实现 P->M,M->P,M->M DMA初始化结构体 一、数据从哪里来,要到哪里去 1、外设地址,DMA_CPAR 2、存储器地址,DMA_CMAR 3、传输方向,DMA_CCR:DIR 二、数据要传多少,传的单位是什么 1、传输数目,DMA_CNDTR 2、外设地址是否递增,DMA_CCRx:PINC 3、存储器地址是否递增,DMA_CCRx:MINC 4、外设数据宽度, DMA_CCRx:PSIZE 5、存储器数据宽度, DMA_CCRx:MSIZE 三、什么时候传输结束 四、实验设计 1、模式选择,DMA_CCRx:CIRC 2、传输过半,传输完成,传输出错,DMA_ISR 1-M to M:FLASH to SRAM,把内部FLASH的数据传输到内部的SRAM。 2-M to P:SRAM to 串口,同时LED灯闪烁,演示DMA传数据不需要占用CPU。 M to M 编程 : 1-在FLASH中定义好要传输的数据,在SRAM中定义好用来接收FLASH数据的变量。 2-初始化DMA,主要是配置DMA初始化结构体。 3-编写比较函数。 4-编写main函数。

CPUs in multi-core architectures and memory access

杀马特。学长 韩版系。学妹 提交于 2019-12-02 01:06:38
问题 I wondered how memory access is handled "in general" if ,for example, 2 cores of CPU try to access memory at the same time (over the memory controller)? Actually the same applies when a core and an DMA-enabled IO device try to access in the same way. I think, memory controller is smart enough to utilise the address bus and handle those requests concurrently, however I'm not sure what happens when they try to access to same location or when the IO operation monopolises the address bus and

IDE,SCSI,SATA硬盘接口比较

谁说胖子不能爱 提交于 2019-12-01 21:59:14
IDE,SCSI, SATA 硬盘 接口 比较 2008年01月07日 硬盘是PC机上的重要部件之一,它在很大程度上决定了机器的性能。硬盘能达到今天这样优秀的性能和可靠性,经过了一个以IT产业的眼光来看是漫长的发展历程。 最早用于PC的硬盘接口是ST-506/412,它是由 希捷 公司开发的一种硬盘接口。这种接口把磁盘的编解码器位于PC插槽上的磁盘控制卡上,用一个34芯的控制 电缆 (Control cable)接头和一个20芯的数据电缆(Data cable)把硬盘连接起来。在早期PC如IBM PC/XT和PC/AT上,使用的硬盘就是以ST-506/412为接口的硬盘。这种接口由于使用“改进调频制”(MFM)来进行数据编解码,所以也常称为MFM硬盘。它支持的 传输速度 和稳定性都不高,因此到了1987 年左右这种接口就基本上被淘汰了。 目前 硬盘接口类型 不算多,主要有IDE、SCSI、SATA三种。IDE许多时候以Ultra ATA代替,很多人习惯将Ultra ATA硬盘称为IDE硬盘,关于 IDE接口 http://www.51hei.com 上有详细介绍,但需要说明的是IDE的概念要大于ATA——原则上所有硬盘驱动器集成控制器的设计都属于IDE,SCSI也不例外。当然,以IDE指代ATA已经形成很大的惯性,SATA开始将IDE与ATA区别开来。成熟廉价的是IDE

CPUs in multi-core architectures and memory access

走远了吗. 提交于 2019-12-01 21:11:42
I wondered how memory access is handled "in general" if ,for example, 2 cores of CPU try to access memory at the same time (over the memory controller)? Actually the same applies when a core and an DMA-enabled IO device try to access in the same way. I think , memory controller is smart enough to utilise the address bus and handle those requests concurrently, however I'm not sure what happens when they try to access to same location or when the IO operation monopolises the address bus and there's no room for CPU to move on. Thx The short answer is "it's complex, but access can certainly

How do data caches route the object in this example?

时间秒杀一切 提交于 2019-12-01 20:04:17
Consider the diagrammed data cache architecture. (ASCII art follows.) -------------------------------------- | CPU core A | CPU core B | | |------------|------------| Devices | | Cache A1 | Cache B1 | with DMA | |-------------------------| | | Cache 2 | | |------------------------------------| | RAM | -------------------------------------- Suppose that an object is shadowed on a dirty line of Cache A1, an older version of the same object is shadowed on a clean line of Cache 2, and the newest version of the same object has recently been written to RAM via DMA. Diagram: -------------------------

STM32之串口DMA接收不定长数据

风流意气都作罢 提交于 2019-12-01 13:37:59
STM32之串口DMA接收不定长数据 引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口中断,在中断中读取数据就行了! 中断就是打断程序正常运行,怎么能保证高效呢?经常把主程序打断,主程序还要不要运行了? 同学B:串口可以配置成用DMA的方式接收数据,等接收完毕就可以去读取了! 这个同学是对的,我们可以使用DMA去接收数据,不过DMA需要定长才能产生接收中断,如何接收不定长的数据呢? DMA简介 题外话:其实,上面的问题是很有必要思考一下的,不断思考,才能进步。 什么是DMA DMA :全称Direct Memory Access,即直接存储器访问 DMA 传输将数据从一个地址空间复制到另外一个地址空间。CPU只需初始化DMA即可,传输动作本身是由 DMA 控制器来实现和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。这样的操作并没有让处理器参与处理,CPU可以干其他事情,当DMA传输完成的时候产生一个中断,告诉CPU我已经完成了,然后CPU知道了就可以去处理数据了,这样子提高了CPU的利用率,因为CPU是大脑,主要做数据运算的工作,而不是去搬运数据。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。 在STM32的DMA资源 STM32F1系列

Linux on arm64: sendto causes “Unhandled fault: alignment fault (0x96000021)” when sending data from mmapped coherent DMA buffer

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-01 13:27:47
I'm building a data acquisition system based on the UltraScale+ FPGA equipped with arm64 CPU. The data are transmitted to RAM via DMA. The DMA buffers in the driver are reserved as below: virt_buf[i] = dma_zalloc_coherent(&pdev->dev, BUF_SIZE, &phys_buf[i],GFP_KERNEL); In the driver's mmap function, the mapping to the user space is done in the following way: #ifdef ARCH_HAS_DMA_MMAP_COHERENT printk(KERN_INFO "Mapping with dma_map_coherent DMA buffer at phys: %p virt %p\n",phys_buf[off],virt_buf[off]); res = dma_mmap_coherent(&my_pdev->dev, vma, virt_buf[off], phys_buf[off], vsize); #else

《驱动学习 - USB鼠标驱动》

好久不见. 提交于 2019-12-01 12:25:23
参考/drivers/hid/usbhid/usbmouse.c(内核自带的USB鼠标驱动) 1.本节需要用到的宏如下: struct usb_device_id usbmouse_id_table []=USB_INTERFACE_INFO(cl,sc,pr);   USB_INTERFACE_INFO()设置usb_driver驱动的id_table成员。 cl:接口类,我们USB鼠标为HID类,所以填入0X03,也就是USB_INTERFACE_CLASS_HID sc:接口子类为启动设备,填入USB_INTERFACE_SUBCLASS_BOOT pr:接口协议为鼠标协议,填入USB_INTERFACE_PROTOCOL_MOUSE struct usb_device *dev=interface_to_usbdev(intf);   通过usb_ interface接口获取usb_device设备,为后面设置USB数据传输用。 pipe=usb_rcvintpipe(dev,endpoint); 创建一个接收(rcv)中断(int)类型的端点管道(pipe),用来端点和数据缓冲区之间的连接,鼠标为接收中断型 dev: usb_device设备结构体 endpoint:为端点描述符的成员endpoint->bEndpointAddress //端点地址