




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
直接存储器存取基本原理、结构与应用直接存储器存取(DMA)控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器。它之所以属于外设,是因为它是在处理器的编程控制下来执行传输的。值得注意的是,通常只有数据流量较大(kBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口。 一般而言,DMA控制器将包括一条地址总线、一条数据总线和控制寄存器。高效率的DMA控制器将具有访问其所需要的任意资源的能力,而无须处理器本身的介入,它必须能产生中断。最后,它必须能在控制器内部计算出地址。 一个处理器可以包含多个DMA控制器。每个控制器有多个DMA通道,以及多条直接与存储器站(memory bank)和外设连接的总线,如图1所示。在很多高性能处理器中集成了两种类型的DMA控制器。第一类通常称为“系统DMA控制器”,可以实现对任何资源(外设和存储器)的访问,对于这种类型的控制器来说,信号周期数是以系统时钟(SCLK)来计数的,以ADI的Blackfin处理器为例,频率最高可达133MHz。第二类称为内部存储器DMA控制器(IMDMA),专门用于内部存储器所处位置之间的相互存取操作。因为存取都发生在内部(L1L1、L1L2,或者L2L2),周期数的计数则以内核时钟(CCLK)为基准来进行,该时钟的速度可以超过600MHz。 每个DMA控制器有一组FIFO,起到DMA子系统和外设或存储器之间的缓冲器的作用。对于MemDMA(Memory DMA)来说,传输的源端和目标端都有一组FIFO存在。当资源紧张而不能完成数据传输的话,则FIFO可以提供数据的暂存区,从而提高性能。 因为你通常会在代码初始化过程中对DMA控制器进行配置,内核就只需要在数据传输完成后对中断做出响应即可。你可以对DMA控制进行编程,让其与内核并行地移动数据,而同时让内核执行其基本的处理任务那些应该让它专注完成的工作。 图1:系统和存储器DMA架构。 在一个优化的应用中,内核永远不用参与任何数据的移动,而仅仅对L1存储器中的数据进行读写。于是,内核不需要等待数据的到来,因为DMA引擎会在内核准备读取数据之前将数据准备好。图2给出了处理器和DMA控制器间的交互关系。由处理器完成的操作步骤包括:建立传输,启用中断,生成中断时执行代码。返回到处理器的中断输入可以用来指示“数据已经准备好,可进行处理”。 图2:DMA控制器。 数据除了往来外设之外,还需要从一个存储器空间转移到另一个空间中。例如,视频源可以从一个视频端口直接流入L3存储器,因为工作缓冲区规模太大,无法放入到存储器中。我们并不希望让处理器在每次需要执行计算时都从外部存储读取像素信息,因此为了提高存取的效率,可以用一个存储器到存储器的DMA(MemDMA)来将像素转移到L1或者L2存储器中。 到目前为之,我们还仅专注于数据的移动,但是DMA的传送能力并不总是用来移动数据。我们可以用代码覆盖的办法来提高性能,将DMA的控制器配置为在执行前把代码送入L1指令存储器。代码往往存储于较大的外部存储器中,而根据需要有选择性的送入L1。 DMA控制器的编程 让我们考察一下在定义DMA活动的过程中可以有哪些选项。我们将从最简单的模型开始,并在此基础上过渡到更为灵活的模型,这反过来增加了设置的复杂度。 对于任何类型的DMA传输,我们都需要规定数据的起始源和目标地址。对于外设DMA的情况来说,外设的FIFO可以作为数据源或者目标端。当外设作为源端时,某个存储器的位置(内部或外部)则成为目标端地址。当外设作为目标端,存储的位置(内部或者外部)则成为源端地址。 在最简单的MemDMA情况中,我们需要告诉DMA控制器源端地址、目标端地址和待传送的字的个数。采用外设DMA的情况下,我们规定数据的源端或者目标端,具体则取决于传输的方向。每次传输的字的大小可以是8、16或者12位。这种类型的事务代表了简单的1维(“1D”)统一“跨度”(unity stride)的传输。作为这一传输机制的一部分,DMA控制器连续跟踪不断增加的源端和目标端地址。采用这种传输方式时,8位的传输产生1字节的地址增量,而16位传输产生的增量为2字节,32位传输则产生4字节的增量。上面的参数是基本的1D DMA传输的设置参数。 我们只需要改变数据传输每次的数据大小,就可以简单地增加一维DMA的灵活性。例如,采用非单一大小的传输方式时,我们以传输数据块的大小的倍数来作为地址增量。也就是说,若规定32位的传输和4个采样的跨度,则每次传输结束后,地址的增量为16字节(4个32位字)。 虽然1D DMA得到了广泛的应用,但用处更大的则是2维(2D) DMA,特别是在视频应用中。2D功能是我们所讨论的1D DMA的情形的一种直接扩展。除了XCOUNT和XMODIFY值之外,我们还需对对应的YCOUNT和YMODIFY值进行编程设定。2D DMA可以简单地理解为一个嵌套的循环,即内循环由XCOUNT和XMODIFY来规定,外循环由YCOUNT和YMODIFY规定。一个1D DMA可以被简单的视为2D传输的“内循环”,如下形式: for y = 1 to YCOUNT /* 2D的外循环*/ for x = 1 to XCOUNT /* 1D的内循环 */ /* 传输循环主体转移到这里 */ XMODIFY决定了XCOUNT每次减少时的DMA控制器的跨度值,而YMODIFY则决定了YCOUNT每次减少时对应的跨度值。与XCOUNT和XMODIFY一样,YOUNT可以以传输数量来定义,而YMODIFY则以字节数来定义。值得注意的是,YMODIFY可以为负值,这会让DMA控制器回转到缓冲器的起始点。 对于外设DMA来说,传输的“存储器端”可以是1D或2D。不过,在外设端,传输始终是1D的。唯一的限制是在DMA每一端(源端和目标端)传输的字节总数必须相同。例如,如果我们从3个10字节的缓冲器向外设发送数据,外设必须被设定为传送30字节,具体方式则可以是任何可能的、所支持的传输宽度和传输计数值的组合。 MemDMA提供的灵活度则要更高一些。例如,如果我们可以建立一个1D2D传输、一个1D2D传输、1个2D1D传输,且可自然而然建立一个2D2D传输,唯一的限制条件是,在DMA传输模块的两端所传送的字节总数必须相等。 DMA的设置 目前有两类主要的DMA传输结构:寄存器模式和描述符模式。无论属于哪一类DMA,表1所描述的几类信息都会在DMA控制器中出现。当DMA以寄存器模式工作时,DMA控制器只是简单地利用寄存器中所存储的参数值。在描述符模式中,DMA控制器在存储器中查找自己的配置参数。 表1:DMA寄存器 基于寄存器的DMA 在基于寄存器的DMA内部,处理器直接对DMA控制寄存器进行编程,来启动传输。基于寄存器的DMA提供了最佳的DMA控制器性能,因为寄存器并不需要不断地从存储器中的描述符上载入数据,而内核也不需要保持描述符。 基于寄存器的DMA由两种子模式组成:自动缓冲(Autobuffer)模式和停止模式。在自动缓冲DMA中,当一个传输块传输完毕,控制寄存器就自动重新载入其最初的设定值,同一个DMA进程重新启动,开销为零。 正如我们在图3中所看到的那样,如果将一个自动缓冲DMA设定为从外设传输一定数量的字到L1数据存储器的缓冲器上,则DMA控制器将会在最后一个字传输完成的时刻就迅速重新载入初始的参数。这构成了一个“循环缓冲器”,因为当一个量值被写入到缓冲器的最后一个位置上时,下一个值将被写入到缓冲器的第一个位置上。 图3:用DMA实现循环缓冲器。 自动缓冲DMA特别适合于对性能敏感的、存在持续数据流的应用。DMA控制器可以在独立于处理器其他活动的情况下读入数据流,然后在每次传输结束时,向内核发出中断。虽然有可能以恰当的方式阻止自动缓冲模式,但如果DMA进程需要定期启动和停止时,采用这种工作方式就没有什么意义。 停止模式的工作方式与自动缓冲DMA类似,区别在于各寄存器在DMA结束后不会重新载入,因此整个DMA传输只发生一次。停止模式对于基于某种事件的一次性传输来说十分有用。例如,非定期地将数据块从一个位置转移到另一个位置。当你需要对事件进行同步时,这种模式也非常有用。例如,如果一个任务必须在下一次传输前完成的话,则停止模式可以确保各事件发生的先后顺序。此外,停止模式对于缓冲器的初始化来说非常有用。 描述符模型 基于描述符(descriptor)的DMA要求在存储器中存入一组参数,以启动DMA的系列操作。该描述符所包含的参数与那些通常通过编程写入DMA控制寄存器组的所有参数相同。不过,描述符还可以容许多个DMA操作序列串在一起。在基于描述符的DMA操作中,我们可以对一个DMA通道进行编程,在当前的操作序列完成后,自动设置并启动另一次DMA传输。基于描述符的方式为管理系统中的DMA传输提供了最大的灵活性。 ADI 的Blackfin处理器上有两种主要的描述符方式描述符阵列和描述符列表,这两种操作方式所要实现的目标是在灵活性和性能之间实现一种折中平衡。 在描述符阵列模式下,描述符驻留在连续的存储器位置上。DMA控制器依然从存储器取用描述符,但是因为下一个描述符紧跟着当前的描述符,说明到何处去寻找下一个描述符(以及它们相应的描述符取用)的两个数据字就并不必要。因为描述符并不包含这一“下一描述符”指针项,DMA控制器希望一组描述符在存储器相互挨在一起,如同阵列一般。 当各描述符在存储器中的分布位置并非“背对背”时,可以使用一个描述符列表。实际上这里涉及多种子模式,从而再一次实现了性能和灵活性之间的折中平衡。在“小描述符”模型中,描述符包括了一个单16位的域,用来给出“下一描述符指针”域的低位部分;高位部分则通过寄存器来独立编程设定,并且不发生改变。当然,这将描述符限制在存储器中一个特定的64K(=216)页面上。当描述符的位置需要跨越这一边界时,也可以提供一个“大”模型,它可以为“下一描述符指针”项提供32位的位置。 无论采用何种描述符模式,描述符的量值数越多,则描述符取用的次数就越多。这也就是为何Blackfin处理器定义了一个“柔性描述符方式”的原因,该模式可以修改描述符的长度,使之仅仅包括特定传输所需要的数据。例如,如果不需要2D DMA,YMODIFY和 YCOUNT 寄存器就不需要成为描述符数据块的一部分。 描述符管理 管理描述符列表的最佳方法是什么?其实,这个问题的答案需要根据应用来定,但要明白存在何种替代方法很重要。 我们将描述的第一种选择,其工作方式非常类似于一个自动缓冲DMA。它需要设定多种描述符,并将其串连到一起,正如图4a所示的那样。“串连”一词意味着一个描述符指向下一个描述符,描述符的载入是自动的。为了使链条完整,最后一个描述符反向指向第一个描述符,于是整个流程就重复下去。使用这种技术而不是自动缓冲的一个理由就是,这些描述符可以保证传输的规模和方向上具有更大的灵活性。 图4:由处理器进行调控的DMA描述符:(a)链接的描述符列表;(b)“节流调节式”的描述符管理。 第二个选择则是由处理器来管理描述符列表。回想一下,描述符实际上是存储器中的一个结构,每个描述符包含了一个配置字。每个配置字包含了“使能”位,其作用是在传输开始时进行调节。如果我们需要让处理器在做好准备时去启动每次具体的传输,我们就可以事先设定好所有的描述符,但把“使能”位清零。当处理器确定启动描述符的时机已经到来时,它只需简单地更新存储器中的描述符,然后写入DMA寄存器中,以让处于停止状态的通道启动起来。图4b示出了这一流程的一个例子。 这种类型的传输什么时候有用呢?请考虑一个需要将输入流与输出流实现同步的多媒体应用。例如,我们接收视频采样,将其传输到存储器的速率可能会不同于将该视频输出显示的速度。在实际系统中,即使你试图让流以恰好相同的时钟传输,也会发生这种情况。在同步成问题的情况下,处理器可以调整对应于输出缓冲器的DMA描述符。在下一个描述符启用时,处理器可以通过调整目前的输出描述符来实现流的同步,具体方式是利用一种信号量机制(semaphore mechanism)来确保每次只有一个项访问共享资源。 在处理器之间使用内部的DMA描述符链或者基于DMA的流时,一种有用的做法是在所传输的数据块的末尾添加一个额外的字,用以帮助标识正被发送的包,包括关于应该如何处理数据的信息和时间戳。图4b中虚线所划出的区域则示出了这种方案。 大多数成熟的应用都有以软件形式实现的“DMA 管理器”功能。这可以作为操作系统或者实时内核的一部分来提供,但它也可以在没有这两者的条件下运行。在Blackfin处理器上,该功能可以作为VisualDSP工具包的System Services的一部分提供。这一管理功能可以让你通过标准的API来转移数据,而不必手工去配置每一个控制寄存器。 基本上,一个应用将DMA描述符的要求提交给DMA队列管理器,其责任是处理每一次请求。请求的处理则是按照它们被应用软件接收到的顺序来进行的。指向“回调”函数的地址指针往往也是系统的一部分。该函数可以完成在数据缓冲准备好时你希望处理器来完成的工作,无需让内核停留在高优先级的中断服务例程的执行中。总的来说,DMA管理器可以简化编程模型,因为它对数据的传输进行了抽象。 管理采用中断的描述符队列可以有两种通用的方法:第一种基于在每次描述符完结时所发出的中断,只有当你能确保每个中断事件将单独得到服务、无中断溢出时,才使用这种方法;第二种方法是仅仅在由一个工作块的最后一个描述符所规定的工作传输结束时发出中断。工作块是一个或者多个描述符的集合。 为了保持描述符队列的同步,非中断型软件就必须维持一个添加到队列中的描述符数量的计数,而中断处理程序则维持一个对已完结的、从队列中除去的描述符的计数。计数次数仅仅在DMA完成对所有的描述符的处理后暂停时才会相等。 本文小结 本文中,我们讨论了DMA数据流的结构:基于寄存器的和基于描述符的,以及何时使用其中的某种结构。在下一期中,我们将分析某些先进的DMA功能特色,这些功能将协助数据在多媒体系统中有效地移动。 在上一期中,我们讨论了分别基于寄存器和描述符的DMA模式。在本文中,我们将在系统层面上探讨应用中关于数据移动的各种选项所应做出的某些重要的决策问题,以及某些先进的DMA功能特性如何协助数据在多媒体系统中有效地移动。首先让我们重新回顾一下DMA模式,以便以之说明另外一两条关于何时选择其中一种模式而非另一种模式的指导原则。 对于规模相同、连续、单向的数据传输来说,自动缓冲方案是最合理的。DMA配置寄存器只要设置一次,就可以自动地在传输结束的时候重新载入。如果采用多维寻址,则可以设置多重缓冲,在每次缓冲结束时可以单独设置各次中断的触发。 到一个音频编码解码器的传输就是这种类型事务。你所选取的子缓冲区的数量应该与你需要执行的处理的类型相一致。对于连续传输来说,只要确保能让每个缓冲器的最大处理间隔小于取空一个缓冲器所花费的时间即可。 如果在给定通道上的传输在方向和尺寸上都将是可变的,描述符模式就是最佳的选择。试考虑在内部和外部的存储间发生的一系列小规模的传输,如果数据块的尺寸发生改变,或者如果你希望以一种非连续的方式来在缓冲器中处理数据,则可以为此建立描述符。 高速缓存 vs DMA 我们接下来将考察系统数据转移的某些情形,在这些情形中,我们需要在高速缓存和DMA之间做出选择。为此,我们首先需要考察一项在应用内部存在的各种数据移动类型。 通过片上外设来将数据转移到系统内或者将其移到系统外是一种最容易说明问题的情况,因此我们以这些数据的转移为起点开始讨论。许多外设可以在使用内核存取还是用DMA通道来转移数据之间做出选择。一般来说,如果可以做出选择的话,你应该使用DMA通道。DMA控制器之所以成为最佳选择,是因为数据往往要么来得太慢,要么来得太快,处理器无法高效地对其进行实时处理。 当我们采用慢速的串行器件(如SPI端口或者UART)时,数据的传输速率远低于处理器内核运行的速度。内核对这些类型的外设的访问必然涉及对一个映射存储器的寄存器的某些位的轮询(polling)。即使当外设的工作速度与处理器时钟相比较很低的话(这意味着访问的频率将会降低),轮询也是一种浪费。在某些情况下,外设有能力发出中断,指示内核传输已经发生。不过,在这里,每次增量数据传输完成后都会遇到为中断提供服务的开销问题,包括前后条件(context)切换的时间。 另一方面,使用DMA控制器来执行传输,使得系统可以精密地控制在发出中断前所完成的传输的次数。而且,这种中断可以在每个数据“块”的末尾发生,而不仅仅是在每个字节或者字之后。 在吞吐率分布的另一端,更为高速(例如以10100MHz)的并行外设可能无法选择内核传输的方式。原因为:首先,以这种方式进行设定时,处理器会频繁地访问外设;其次,与高速外设相关的处理几乎总是对数据块进行的。无论是在一个信号处理应用中通过FFT完成,还是在图像处理系统中进行二维卷积(convolution),处理器在送往缓冲器的最后一个数据采样一到达时就开始其操作。这里,用于指示一个数据块传输结束的中断可以出现在数百次甚至上千次传输中。 无论外设进行何种类型的传输,DMA通道都应该带有多个缓冲器,以便让处理器能在数据填充入下一个缓冲器时访问当前的缓冲器。如果系统更为复杂,则有可能需要实现多个同步进行的数据块传输。例如,除了可以访问当前的数据块并采集下一个数据块,还可能有必要将最后一个处理过的数据块发出,以备未来之需。类似的,要处理当前的帧的话,也有可能需要参考数据块。各种各样不同类型的应用都确实存在这一情形,包括大多数类型的视频压缩应用。(关于高速缓存与DMA之间的选择指南内容,祥见电子工程专辑网站) DMA控制器特性 为了在多媒体系统中有效地运用DMA,就必须有足够多的DMA通道,有一对以上的存储器DMA(MemDMA)流充分地支持处理器的外设集。这是一个重要的问题,因为必然存在如下的情况:在未经处理的媒体流进入外部存储器(通过高速外设)的同时,数据块在外部存储器和L1存储器之间来回传输,以供内核处理。而且,DMA引擎允许在外设和外部存储器间进行直接数据传输,而不要求数据在L1存储器中“暂驻”,这可以在那些数值计算密集的算法执行中避免额外的数据传递。 程序开发者常犯的一个错误会使得开发过程中的调试问题变得复杂化。外设及其相应的DMA通道往往会提供一个可选的错误中断,在开发中该中断应该始终处于使能状态,这样可以节省数小时的调试时间。错误中断一般是用于指示编制的程序中出现了某些错误(容易解决),或者外设下溢/溢出(情况更为复杂)。很多情况下,当编程者在项目开始的时候用数据流来建立框架(framework)时,这些类型的问题只会在后来运行中,当应用处理器件被加上的时候才出现。 其他重要的DMA特性包括对DMA通道设定优先级,以满足当前外设任务要求,以及对相应的DMA中断进行配置以便与这些优先级水平相匹配的能力。这些功能有助于确保数据的缓冲区不会由于DMA活跃在其他的外设上而出现溢出,它们为程序开发者提供了额外的自由度,能根据每个DMA通道的数据往来情况对整个系统进行优化。 系统性能的修调 随着数据率和性能要求的提高,设计者能否具有对“系统性能修调”等控制选项进行操作的权限,也将变得十分关键。例如,DMA控制可以针对在每个时钟周期上传送一个数据字这一需求进行优化。当同一方向上有多个传输在进行时(例如,都从存储器出发,发往外部存储),这往往就是对控制器进行操控的最有效率的方法,因为它可以防止DMA总线出现闲置。 但是,在需要进行多路双向视频和音频流传输的情况下,“方向控制”就成为必不可少的措施,其目的是防止一条数据流完全占用整条总线。例如,如果DMA控制器始终将DMA总线的使用权交给任何一个准备好传输一个数据字的外设,则使用外部DRAM时总的吞吐率将出现下降。在数据传输几乎每个周期都变换方向的情况下,与外部存储总线花费的转向时间相应的延迟将会显著地降低吞吐率。 于是,可以让通道来编程设定突发量大小(burst size)的DMA控制器将具有超出那些传输大小固定的控制器的性能。因为每个DMA通道可以将外设与内部或者外部存储相连接,所以为可能会发出紧急占用总线请求的外设自动服务的能力也是非常重要的。 对于多媒体应用来说,片上的存储器几乎总是不足以存下整个视频帧数据。因此系统往往必须依靠L3 DRAM来支持相对较快的、对大缓冲区的访问。处理器与片外存储器的接口在涉及高效的媒体框架方面是一个主要的因素,因为对外部存储的存取模式必须经过深思熟虑,以便能保证最佳的数据吞吐能力。 使用DMA和/或高速缓存总是有助于提高存储的性能,因为它们实现了大数据块在同一方向上的传输。DMA传输一般是将大的数据缓冲区从一个位置转移到另一个位置,而高速缓存线填充(cache-line fill)则是将一组在位置上连续的存储器中的数据移入或者移出设备,利用同方向的块传输来实现。 除了使用DMA或高速缓存,还有若干高层次上执行的步骤,它们可以确保数据流能流畅通过任何系统中的存储器。两个关键步骤分别是类似的传输编组以及优先级分配和裁决方案的使用(详见电子工程专辑网站)。 在多媒体系统应用的考虑 1. 使用DMA控制器来剔除数据 DMA控制器可以用于“过滤”从摄像机流入一个系统的数据量。让我们考虑一个视频流正被送入存储器进行某种形式的处理的情形,当数据并不需要被再次送出来进行显示的话,就不必将逆程消隐(blanking)数据送入存储器缓冲区。 处理器的视频端口常常直接连接到一个视频解码器或者一个CMOS传感器上,并连续地接收采样。也就是说,外部的器件不断送入数据和空白显示信息。DMA控制器可以被设定为仅仅把有效的视频送入存储器中,使用这样的功能就可以同时节约存储器空间和总线带宽。 对于NTSC视频流而言,这种消隐显示信息占到了总输入视频带宽的20以上。存储器节省带来的好处并不大,因为额外的存储空间可以以外部SDRAM的形式来提供,而所带来的系统成本变化很小。更重要的是,在总的处理周期中所节约下来的带宽,通常用来输入消隐显示信息的时间,都可以重新分配给系统中的某些其他的任务。例如,这些带宽或时间可以用来发送压缩的数据或者输入来自于过去的帧的基准数据。 2. 双重缓冲 通常,在源视频和最终显示的内容之间存在数据率差异的系统中,有必要在原有的内容和新的视频帧之间实现平滑的切换,这可以通过使用双重缓冲设置来实现。一重缓冲指向目前的视频帧,该帧以一定的刷新速率发送到显示器;第二重缓冲则填入最新输出的帧。当后一重缓冲区被填满时,DMA则发出中断信号,表明该将新的帧输出到显示器了。此时,第一重缓冲开始用处理过的、待显示的视频帧进行填充,而第二重缓冲则输出目前显示的帧。双重缓冲以类似于“打乒乓球”的方式来回切换。 应该注意的是,除了双重缓冲外,也可以使用多重缓冲,以便为同步化提供更多的余量,以及降低中断的频率和相应的延迟。 3. 2D DMA的考虑 数据通过数字链路(如I2S)传输时,它可能包含几个通道。例如,这些通道必须复用在一个数据线内,通过同一个串行端口传输。此时,2D DMA可以用对复用的数据进行去交织(interleaving)处理,以便让每个通道在存储器上直线排列。图1给出了图形化的描述,在图中,来自于左右通道的采样被解复用,变为两个单独的数据块。这种自动化的数据分配结构对于那些采用了数据块处理的系统来说具有极高的价值。 图1:N个采样的数据块分离为L(左)和R(右)通道 对于视频传输来说,2D DMA提供了若干系统层面的好处。对于刚开始着手的开发者来说,二维 DMA可以方便宏模块与外部存储间的往来传输,让数据的处理成为实际的传输操作的一部分,这消除了传送非连续数据传统上所需的额外开销。它还可以让系统通过有选择的传输(例如,仅传输一幅输入图像中所需区域,而不是整幅图像)来最大限度地减小数据的带宽。 另外一个例子是,2D DMA 可以让数据以一种对处理来说更为自然的顺序放置在存储器中。比如,正如图2所示的那样,RGB数据可以从一个CCD传感器出发,以交织的RGB888格式进入处理器的L2存储器,如果采用2D DMA,它可以按照红、绿、蓝平面分别送入L3存储器。视频和图像数据色彩空间分量的交织/去交织可以省下在处理前进一步移动数据的麻烦。 图2 通过2D DMA来分离间插在一起的数据。 4. 同步的音频和视频流 在一个多媒体系统中,流内容往往同时包含音频和视频分量。因为这些流运行的数据率的缘故,必须用DMA通道来与音频编码/解码器和视频编码器进行接口。重要的是,需要确保流是同步的,因为这种协同性是观看质量的一个主要影响因素。 维持同步有多种方法,最常用的技术是为每组音频和视频缓冲区建立起一组DMA描述符表,并让处理器管理这些表。 因为音频流中的数据丢失比视频帧的丢失更容易引起人们的注意,音频缓冲往往被设定为“主”流。即,需要让音频缓冲区以连续的模式进行循环运转更为重要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 系统韧性分析-洞察及研究
- (2025年标准)申请中止协议书
- (2025年标准)学校硬化地面协议书
- (2025年标准)会员认购协议书
- (2025年标准)天津公房更名协议书
- (2025年标准)赞助类协议书
- (2025年标准)辞职就业协议书
- 企业尽职调查保密协议范本
- 2025年湖北省快递专业技术高、中级职务水平能力测试(快递信息工程)历年参考题库含答案详解(5卷)
- 2025年河北机关事业单位工人技能等级考试(动物检验员)历年参考题库含答案详解(5卷)
- 广西贺州市2022-2023学年八年级下册期末物理试卷(含答案)
- 台州市开发投资集团有限公司招聘笔试题库2024
- DL∕T 5344-2018 电力光纤通信工程验收规范
- 14生活日用品的联想 (教案)人美版美术四年级上册
- CH+8016-1995全球定位系统(GPS)测量型接收机检定规程
- DL-T5493-2014电力工程基桩检测技术规程
- 人教版2024年小学升学考试数学模拟测试卷(共5套)(含答案解析)
- 医院系统瘫痪应急预案
- 光伏项目技术标准清单
- 117湖南省怀化市雅礼实验学校2023-2024学年七年级下学期开学考试数学试题
- 输气管线破裂漏气应急处置方案
评论
0/150
提交评论