Oct*_*pus 4 arm interrupt beagleboneblack
我正在尝试在Beaglebone Black上编写一个小驱动程序,需要发送一个信号,如下所示:

我需要发送360位信息.我想知道在发送信号时是否可以关闭电路板上的所有中断持续500μs.我不知道我是否可以关掉那样的所有中断.到目前为止,搜索对我来说是不友好的.我有什么想法可以达到这个目的吗?我确实有汇编语言的一些原型用于信号,但我很确定它被中断打破了.
所以,例如,我希望我能有这样的东西:
disable_irq();
/* asm code to send my bytes */
reenable_irq();
Run Code Online (Sandbox Code Playgroud)
disable_irq()和reenable_irq()的主体是什么样的?
你想使用的电话是local_irq_disable()和local_irq_enable()禁用与当前的CPU上启用本地的IRQ.这还具有禁用CPU上所有抢占的效果.
现在让我们谈谈你的一般方法.如果我理解正确的话,你会想要通过GPIO来协议你的协议,时间精确到<1/3 us.
这将是一个挑战. 测试表明,Beaglebone黑色GPIO切换频率最高可达~2.78MHz,直接写入内核模式的SoC IO寄存器(~0.18 us最小脉冲宽度).
所以,尽管这可能会在内核空间中写入原子代码是由最薄的利润的实现,我提出的另一个概念:
在SPI总线上实现自定义串行协议.
为什么?
在Beaglebone Black上,SPI总线可以高达48MHz的时钟频率,缓冲并可与DMA引擎一起使用.因此,您不必担心禁用中断并为这一个接口独占CPU.定时分辨率为~0.021us(@ 48MHz),您应该能够以可接受的误差范围达到定时需求.
总线配置为单通道连续传输仅发送主模式和30位字长(协议的每个位为2个30位字):
要使用您的协议写入'0',您需要在SPI(@ 48MHz)上写入2个字序列 - 17个1,然后是43个0.
要用你的协议写一个'1',你要在SPI(@ 48MHz)上写下2个字序列 - 43个1,然后是17个0.
| 归档时间: |
|
| 查看次数: |
430 次 |
| 最近记录: |