完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
|
|
相关推荐
2个回答
|
|
就像一个人体是由许多独立的系统构成一样,嵌入式系统也包含多种功能。连今天基本的移动电话也包括呼叫功能、信息功能、娱乐项目(例如游戏、音乐播放器、收音机、照相机、蓝牙连接,等等)。包括这么多不同的功能让这些系统变得相当复杂。
CPU处理算法和决策操作。大多数实时系统可能包括一个或多个处理器来处理这些它们之间的相互联系。一方面,我们增加更多的CPU来分担负荷;另一方面,CPU多了可能会浪费时间来在他们之间传输数据。 一种有效的实时系统是这样的,CPU用于处理大量任务以便于反应能力更快和功耗更低,同时还有足够的灵活性,以便支持将来的改进。为了减少CPU在数据传输上浪费时间,许多系统包括周边设备可做成无需CPU的数据交换。这个外设称为直接存储器存取(DMA)。 DMA有助于使CPU利用率更高,因此可以达到更高的系统吞吐量。早些时候,直接存储器存取的概念只限制到计算机,服务器等应用。由于现代的电子产品越来越复杂,需要传输大量的数据,DMA已成为嵌入式应用等方面不可分割的一部分。 近期,很多用于大型实时系统的高端处理器都集成了DMA,例如:汽车电子、航空电子、医疗等领域。DMA可以用于以下类型的数据传输,控制器不同类型也不同。 Memory到memory的传输 Memory 到外设的传输 外设倒memory的传输 外设到外设的传输 在一个系统中,数据传输可能占据了CPU时间的相当大的比例。让我们以一个汽车仪表盘系统为例。仪表盘有多个来自不同的子系统的数据显示。图1显示了仪表盘的系统与子系统。 图1:实时系统和子系统示例 各子系统把数据传输给控制显示的CPU。在这种情况下,控制显示的CPU必须接受大量的数据,并确定哪些子系统已经传递了数据,那些更新了需要显示的内容。如果CPU不得不处理接收数据、决策和显示更新,那么系统响应将会变慢,变成一个迟缓的系统。 为了改善系统性能,开发人员可以使用高频CPU。然而,这在功耗和成本上都会增加。直接存储器存取可让CPU从这些众多的数据传输操作中解脱出来。DMA处理所有的数据传输,让CPU处理所有的其他任务。上面的例子给出了为什么在复杂系统中更需要直接存储器的基本理由。 在一个处理器系统中,所有的外围设备包括memory都会使用公共总线连接到CPU。按照图2所示,这些总线就是外设(包括记忆)和CPU传输数据的路径。包括直接存储器存取的处理器对于总线来说有两个master—CPU和直接存储器存取。例如,一个简单的C语句:“a= b + c”,这涉及到CPU对memory数据的访问。CPU需要访问内存来读入变量b和c,就算之和,并更新内存里 “a”变量对应位置的值。当CPU需要访问内存时,它先向总线提出请求,然后总线处理请求,获得结果,然后通过总线更新memory对应位置的数据。 图2:实时系统和子系统示例 当DMA参与后,基于控制器特性,DMA可以访问任何一个外设。例如,假设在一个系统中,DMA用于把收到的UART的数据传送到memory。在这种情况下,直接存储器存取需要通过总线访问UART寄存器和内存。由于直接存储器存取和CPU都可以访问总线,通常会有仲裁机制来处理总线的访问。 让我们做一个简单的例子,从flash队列里读10字节的数据到SRAM队列里,我们可以看出使用DMA可以节约多少时间。当这个功能由CPU单独完成时,需要执行下列步骤: 1)复制Flash对应位置的值并存储到GPR(通用寄存器,例如:R0) 2)复制GPR值到累加器寄存器 3)复制累加器寄存器到SRAM相应位置 4)检查所有的字节是否复制完成 5)如果是,结束 6)如果不是,Flash指针加1 7)SRAM指针加1 8)回到第一步 一个简单的Flash到SRAM的复制就用了这么多CPU参与的指令周期。 如果使用直接存储器存取来做同样的例子,直接存储器存取硬件来处理这个过程,从而可以减少执行时间。图3显示了直接存储器存取处理的传输过程: 图3:DMA处理数据传输 直接存储器存取需要几个周期的初始化,然后直接存储器存取硬件自动处理的内存指针增加。DMA硬件也会检查数据是否传输完毕,信号是否完整。 |
|
|
|
使用直接存储器存取优势
CPU运行时间越长,功耗消耗越多。使用DMA承担了CPU部分工作从而降低功耗。 DMA与CPU并行工作,从而模拟了多处理器环境,有效地提高了CPU的带宽。 解放CPU意味着CPU会有更多的空闲时间。这使现有产品有能力为未来的产品升级作储备。 使用DMA实时系统示例 使用SoC的示波器是一个很好的例子,它让DMA完美地显示了其优势,明确表明使用DMA会产生很大的不同------主要是示波器需要没有中断地持续地产生波形。示波器可以这样来完成:用存储在查询表里的值更新数模转换器(DAC)的数据寄存器。如果处理器没有DMA,DAC数据寄存器由CPU完成更新,这使CPU浪费了指令周期来复制查询表的值到DAC. DMA可以放过来运行:根据指定间隔把取样数据从memory反向复制到DAC。与CPU不同,直接存储器存取不需要中断驱动。这意味着不会产生象CPU那样的延时(因为CPU方案为高频中断)。随着波形频率和取样数量的增加,系统会消耗更多的CPU带宽,从而会有更大的功耗。当使用了直接存储器存取后, 只要波正常产生,CPU就不需要做任何事情。 如果我们看看功耗问题,一般来说CPU比直接存储器存取控制器消耗更多的功耗。当CPU不用时,它可以断电,这样就节省了静态和动态功率。因此,如果大部份的工作是传递数据,那么使用直接存储器存取有助于优化系统功耗。如果我们假设一个系统,其中一部分功能是要产生4个波形,如果没有DMA,那么CPU就要达到足够的带宽来实现这样功能,请见图4。功耗请见图5。 图4:CPU使用情况 Figure 5: Power consumption 图5:功耗 另一个例子就是模数转换器(ADC)的数据缓存。很多时候都需要使用ADC扫描模拟信号,储存到memory,然后过滤ADC数据。使用CPU读取ADC的数据,并复制到memory,这样做降低了系统效率。在这种情况下,CPU被不仅需要处理数据传输而且要进行数据过滤。如果采样率为100ksps或上到Msps级别,它可能完全消耗掉CPU的带宽。为了减少CPU负荷,DMA可以用来储存ADC数据到memory,也不需要CPU做数据过滤。这可以看作双缓存,这时CPU可以在一个缓存处理这些数据,而直接存储器存取使用另一个缓存 大多数系统都会使用通信协议。使用直接存储器存取从通讯模块传输或接收数据都很常见。在监听系统中,将会有大量的数据通过通信协议发送和接收。直接存储器存取处理这些数据传输可以使CPU有空闲做其它操作。 系统变得越来越复杂,直接存储器存取的需求也不断增大。带直接存储器存取的处理器可以为其提供多个通道,每个可配置为特定的外设使用。DMA外设的一般特征如下: 在处理器里访问多个外设 在处理器里多个DMA通道 每一个通道有不同的优先顺序 处理源地址和目的地址 根据配置处理增加/减少源地址和目的地址 为DMA通道检查设定字节的数据是否完成传输 Burst传输,分开整个数据传输到不同的块 需要的时候产生中断 在基于片上系统(SoC)的方案中,几乎所有外设都集成到一个芯片,DMA无疑是很有用的资源。从整个系统的角度来看,数据在源头和目的地之间的传输方式会根据应用的不同而不同。这意味着DMA通道固定的配置或固定的映射都可能使DMA无法完全利用其价值。当我们看一个现代产品的开发周期时,在最初设计阶段,需求往往不能很清楚。开发者需要一个灵活的DMA控制器,这样可以通过编程配置满足所有的外围设备和memory。赛普拉斯半导体的PSoC3和PSoC5有高度可配置的DMA外设,可以满足当今系统的需求。SoC里的DMA外设包含多个DMA通道(最高24)和处理描述符(最高255)。处理描述符包含数据传输完成的描述。它包括源地址,目的地址,传输字节数,数据传输完成和交换处理结束后开启一个中断,同时增加源地址和目的地址。处理描述符也可以组成数据链执行多个操作。每个DMA通道可以使用任何的处理描述符。一旦某个DMA通道被触发,这个DMA通道处理相应的事务描述符。 DMA通道可以配置,可用于任何外设。通道和外设之间没有固定的路由 可以使用多重处理描述符号 处理描述符可以链接 DMA通道可以链接 每个DMA通道都能做到最大64K字节传输 DMA通道可以处理端字节交换 DMA通道可以在每一次传输完成后产生一个中断 以4路模数转换器为例。每个通道的数据都需要写到独立的缓存。在这种情况下,需要一个DMA通道和4个处理描述符。每一个处理描述符可以用来传输ADC数据到每一个连续缓存。这些处理描述符可以组成链,那么在完成的一个通道后,下一个通道会自动处理。在传统的带固定DMA通道的处理器应用中,该操作需要CPU参与把数据转移到不同的缓存中。PSoC包含灵活的DMA,就完全不需要CPU参与。 在今天的嵌入式系统中,DMA已经是整体的一部分。使用DMA能显著提高CPU利用率,从而帮助开发人员优化设计,提高系统性能。系统越来越复杂,外设会根据应用的不同而不同,产品需求特性经常变化,基于以上这些原因,开发人员需要一个灵活的DMA控制器,从而使设计者可以利用DMA最好地完成手头的工作。 |
|
|
|
只有小组成员才能发言,加入小组>>
636 浏览 0 评论
1076 浏览 1 评论
2446 浏览 5 评论
2773 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2604 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
628浏览 9评论
624浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
747浏览 6评论
600浏览 5评论
647浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-2 18:17 , Processed in 1.112663 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号