gpt4 book ai didi

arm - 我可以在短时间内(0.5 毫秒)禁用 BBB 上的中断吗?

转载 作者:行者123 更新时间:2023-12-04 23:47:12 25 4
gpt4 key购买 nike

我正在尝试在 Beaglebone Black 上编写一个小型驱动程序,该程序需要发送具有如下时序的信号:

enter image description here

我需要发送 360 位信息。我想知道我是否可以在发送信号时将板上的所有中断关闭 500µs。我不知道我是否可以像这样关闭所有中断。到目前为止,搜索对我并不友好。 任何想法我可以如何实现这一目标? 我确实有一些信号的汇编语言原型(prototype),但我很确定它会被中断破坏。

例如,我希望我能有这样的东西:

disable_irq();
/* asm code to send my bytes */
reenable_irq();

disable_irq() 和 reenable_irq() 的主体是什么样的?

最佳答案

您要使用的调用是 local_irq_disable()local_irq_enable()在当前 CPU 上本地禁用和启用 IRQ。这也具有禁用 CPU 上的所有抢占的效果。

现在让我们谈谈您的一般方法。如果我对您的理解正确,您希望通过 GPIO 对您的协议(protocol)进行位敲击,其时序精确到 < 1/3 us。

这将是一个挑战。 Tests show Beaglebone black GPIO 切换频率将在 ~2.78MHz 时达到最大值,在内核模式下直接写入 SoC IO 寄存器(~0.18 us 最小脉冲宽度)。

因此,尽管通过在内核空间中编写原子代码可以通过最小的利润实现这一点,但我提出了另一个概念:

在 SPI 总线上实现您的自定义串行协议(protocol)。

为什么?

Beaglebone Black 上的 SPI 总线时钟频率最高可达 48MHz,它是缓冲的,可与 DMA 引擎一起使用。因此,您不必担心为这一接口(interface)禁用中断和独占您的 CPU。使用 ~0.021us (@ 48MHz) 的时序分辨率,您应该能够以可接受的误差范围满足您的时序需求。

将总线配置为单 channel 连续传输仅传输主模式和 30 位字长(协议(protocol)的每个位有 2 个 30 位字):

要使用您的协议(protocol)写入“0”,您需要在 SPI (@48MHz) 上写入 2 个字序列 - 17 个“1”后跟 43 个“0”。

要使用您的协议(protocol)写入“1”,您将在 SPI (@48MHz) 上写入 2 个字序列 - 43 个“1”后跟 17 个“0”。

关于arm - 我可以在短时间内(0.5 毫秒)禁用 BBB 上的中断吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29161359/

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