gpt4 book ai didi

c - 软件pwm作为linux内核模块

转载 作者:太空宇宙 更新时间:2023-11-04 10:51:44 25 4
gpt4 key购买 nike

我需要为 linux 内核实现 PWM 模块,它应该是高分辨率的(在我的 400MHz ARM cpu 上超过 10kHz 会很酷)谁能给我一个建议,我可以为此目的使用什么?内核版本为 2.6.28.9。设备没有硬件 PWM 驱动程序。现在我使用一个内核定时器,其频率由 CONFIG_HZ 设置。此配置的默认值为 100HZ,但对我来说太小了,最大值为 4kHZ,但这仍然不够

最佳答案

Pulse-width modulation在软件中很难做到。理论上,您所要做的就是在您的 CPU 中找到一个分辨率足够好的计时器,附加一个 IRQ 处理程序并将其启动。

如果您查看时钟,您不能在 400 MHz CPU 上执行 10 kHz PWM 感觉很疯狂 - 每个脉冲有 400000/10 = 40000 个 CPU 周期,这肯定足够了吗?

也许不是。 linux 内核使用中断本身来进行内核调用。然后你有其他中断( DMANMI s,其他计时器,...)。根据定时器中断的优先级,其中一些可以阻止它。这意味着网络操作或其他事情可能会延迟您的 IRQ 处理程序。如果您使用 Linux 内核 API 来处理中断,那么您会遇到更多问题:内核不会调用您的处理程序。相反,真正的 IRQ 处理程序将收集有关中断的一些信息并将其作为任务附加到链中。

最终,内核将查看该链并处理其中的任务。

另一个问题是 CPU 也不会立即响应 IRQ。有些操作码是您无法中断的。

这会导致很多抖动。

如果您想尝试一下,那么您应该在汇编程序中编写您自己的 IRQ 处理程序,它会执行所有处理 - 获取 IRQ 并写入新的输出值。不要使用标准的 linux 中断 API。然后您将必须禁用此计时器的中断 API(否则内核可能会删除您的处理程序)。

您必须使用在您的 CPU 中具有非常非常高优先级的计时器 - 任何可能延迟它的事情都会毁了您的一天。

即使您有 40K 个 CPU 周期可供使用:总会有其他软件也想分一杯羹。所以你可能无法运行任何其他东西。

关于c - 软件pwm作为linux内核模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30664620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com