- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
ST 有一些应用笔记讨论使用 DMA 到 GPIO 模拟并行总线。我很感激,但它没有回答重要的问题。我正在浏览引用手册,但似乎无法澄清我所关心的事情。
我最关心的是抖动。引用手册反复指出,当 DMA 被触发时(例如,通过定时器),DMA Controller 将读取内存并将值传输到外设。对于具有自己的 FIFO 的外设,这可能没问题。在那里,当 FIFO 中有可用空间时,将触发 DMA 并填充 FIFO。这可能会在 FIFO 运行为空之前发生。
但是对于 GPIO,如果 DMA channel 本身没有 FIFO,那么当定时器触发时数据将不会准备好,需要从 SRAM 中获取。因此,在定时器触发和实际到达 GPIO 输出寄存器的值之间,可能会过去一些时间。当查看定时器和 GPIO 引脚的时钟输出时,这可能是可测量的。 DMA Controller 必须与正在运行的程序竞争对 SRAM 的访问,因此程序的某些事件可能会增加抖动。
也许这对我来说是一个巨大的疏忽,但 ST 的引用手册似乎没有提到 FIFO 作为 DMA 的一部分。如果是这种情况,则会导致抖动,这可能会影响更高频率下的性能。
我需要将 3 到 4 个引脚同步切换到 100kHz 到 1MHz 的时钟。我正在考虑 DMA 到 GPIO 并滥用 QuadSPI Controller 。我目前正在 STM32L4 上进行测试,但我也在考虑 STM32F4 甚至 F1。
最佳答案
与 GPIO 之间的 DMA 只是内存到内存的传输。许多 STM32 uC 内置了 DMA FIFO - 但它们不会在这里使用。
内核始终优先于 DMA,因此如果可能是问题(不太可能),请将内核可访问数据(当 DMA 处于事件状态时 uC 将访问的数据放在单独的内存区域中 - 例如 CCM(如果您的 uC 有一个)
回答问题
内存到/从 GPIO 非常可靠 - 我个人没有任何问题。
关于timer - STM32 MCU 上 DMA 到 GPIO 的可靠性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60537914/
在 PCIe 配置中,设备具有专用地址,并且它们以点对点模式相互发送数据 - 每个设备都可以随时写入,并且交换机会注意正确地转发数据。不需要“总线主控器”来决定何时以及如何传输数据。 DMA 如何在这
我正在尝试使用 Linux DMA 驱动程序。目前,当我发送交易并开始等待时,我的请求超时。我相信这与我在执行 DMA 映射时设置缓冲区的方式有关。 char *src_dma_buffer = km
如上所述,dma 引擎和 dma Controller (重点是 linux)有什么区别? linux dma 引擎什么时候到位?这是一个特殊的设备还是所有支持 dma 的外围设备的一部分? 在浏览l
DMA 缓冲区是由驱动程序映射的内存。例如,在使用 rtl8319 的 pci-skeleton.c 中,我们有: tp->tx_bufs = pci_alloc_consistent(tp->p
什么是 Linux 内核上下文中的 DMA 映射和 DMA 引擎?什么时候可以在 Linux 设备驱动程序中使用 DMA 映射 API 和 DMA 引擎 API?任何真正的 Linux 设备驱动程序示
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我正在更新一个旧的 linux 驱动程序,该驱动程序通过 DMA 将数据传输到用户空间页面,这些页面通过 get_user_pages() 从应用程序向下传递。 我的硬件是一个新的基于 x86 Xeo
我想将 8 位并行数据从 IO 传输到内存,数据以大约 5 Mhz 的速度非常快地传输,我正在通过使用 S3C2440(400Mhz)处理器的友好 arm 在基于 ARM9 的套件上使用嵌入式 lin
我正在尝试在基于 Zynq-7000 的平台上使用 DMA 引擎将 PCM 流传输到 Zynq PL 中的自定义 I2S Controller 。我的 I2S Controller 连接到外部放大器。
假设 CPU 修改了位置 x+50 的值并且没有将其刷新回主存(回写)。 与此同时,设备发起从 x 到 x+100 的 DMA 读取请求。 在那种情况下,如何通知 CPU 刷新脏缓存行? 最佳答案 D
假设CPU要从PCI Express设备进行DMA读取传输。与PCI Express设备的通信由事务层数据包(TLP)提供。从理论上讲,TLP的最大有效负载大小为1024个双字。那么,当CPU向PCI
这是引用this对类似 dma/pci 问题的回答。我从这个答案中得知,PC 没有能够将数据传输到 PCI 卡或从 PCI 卡传输数据的 DMA,并且 PCI 卡必须提供 DMA 功能。我从同事那里收
我一直在使用 Teensy 3.6 微 Controller 板(180 MHz ARM Cortex-M4 处理器)来尝试实现传感器驱动程序。传感器通过 SPI 进行控制,当命令它进行测量时,它会通
我给你讲个故事: 我有两个缓冲区设置,用于执行所谓的 ping ponging。我有一个指向每个缓冲区的 DMA 系统。 系统设置为 DMA 将数据写入一个缓冲区,而中断处理另一个缓冲区中的数据。 看
在 AMD APP 编程指南中写道(第 4-15 页): 对于传输 <=32 kB:对于从主机到设备的传输,数据由 CPU 复制 到运行时固定的主机内存缓冲区,然后 DMA 引擎传输 数据到设备内存。
我目前正在使用 STM32f407G-DISC1,并尝试使用 ADC 和 DMA 回调捕获缓冲区。 频率发生器连接到引脚 A0,并且电路板接地。我用示波器确认我的电线没有损坏。 现在的问题是,在设置我
memcpy via user space DMA: 是否有可能在 linux 中通过用户空间 DMA 实现 memcpy?我知道有一些方法可以通过 DMA 将内核缓冲区复制到用户空间缓冲区,但想通过
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
我正在遵循这个框架 https://forums.xilinx.com/xlnx/attachments/xlnx/ELINUX/10693/1/Linux%20DMA%20from%20User%2
最近,我阅读了很多关于 10gb/s NIC 的网站和书籍,它们的 DMA 以及 linux 内核(10/100 mb/s NIC)处理数据的方式,我遇到了一些问题头脑。 将 10GB/s 的数据流从
我是一名优秀的程序员,十分优秀!