arm - 在 OMAP 4460 上进行多个 DMA 传输时,CPU 是否被阻塞?

标签 arm embedded-linux dma omap pandaboard

我想知道 DMA 在 Pandaboard 中的工作原理。我已经阅读了 Pandaboard 中使用的 OMPA4460 的 TRM,DMA 系统一次可以管理总共 128 个请求,最多 32 个逻辑 channel 和 4 个中断请求。当 DMA 正在进行时,CPU 是否有机会同时执行另一项任务?

最佳答案

but I want to know that when DMA is Working is there any chances to CPU of panda board will be able to do another task at a time ???

DMA 的目的是专门在 I/O 设备和主存之间传输数据。按照设计,这是为了减轻 CPU 执行此传输的负担,这称为编程 I/O。一旦 CPU 设置了 DMA Controller 来执行此数据传输,CPU 就可以自由地执行用于任何其他目的的指令。所以答案是“是的,100% 的机会”。

由于 PandaBoard 的 SoC 有一个多 channel 的 DMA Controller ,因此可以同时执行多个 I/O 操作。性能和吞吐量的限制是内存带宽。请注意,由于指令和数据高速缓存,现代 CPU 倾向于使用较少的内存带宽(或以更突发的方式使用内存)。通常,当 CPU 和 DMA Controller 争用内存时,CPU 会优先访问内存。

请注意,这些特性都不是 PandaBoard 独有的。

关于arm - 在 OMAP 4460 上进行多个 DMA 传输时,CPU 是否被阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065947/

相关文章:

arm - 如何以编程方式识别ARM板

linux - 使用 SPIDEV 访问 SPI 设备

linux - 在 Linux 中劫持应用程序和网络之间的通信

linux - 如何在 Linux 内核中的特定范围内分配 dma 缓冲区?

architecture - DMA 与中断驱动的 I/O

objective-c - 如何开始在 iOS 上使用 ARM?

c - Keil 中的 Traffic Light for Tiva 系列 - c 编程

c - 为什么我的小 C 循环不能正确打印到帧缓冲区,但它的展开版本可以?

c++ - 在 Linux 上用 C++ 实现用户空间网卡 "bus-mastering"

c++ - 如何在 Ruby 系统中运行 ARM 多线程程序