在Beaglebone Black

时间:2015-11-05 05:02:58

标签: c assembly arm interrupt interfacing

我正在尝试在Beaglebone黑色上使用hcsr04传感器(改编自此代码 - https://github.com/luigif/hcsr04

我让它分别为4组不同的传感器工作,现在不确定如何将它们组合成一个程序。

有没有办法同时给出触发器和接收回声,这样可以将中断生成为C程序的不同事件。

一个接一个地运行它们是我们想到的最后一个选项。

1 个答案:

答案 0 :(得分:0)

Russ是正确的 - 因为BeagleBone的AM335x处理器中有2个PRU核心,所以无法同时运行该PRU程序的4个实例。我想你可以为一组引脚加载一个编译器,进行测量,停止它,然后在不同的引脚上加载为传感器编译的不同二进制文件,但这样做是非常低效(并且丑陋,恕我直言)的方法。

如果您知道任何程序集,那么更新该代码以驱动所有4个传感器(PRU assembly instructions)应该非常简单。或者你可以从头开始在C中使用clpru PRU C编译器,正如Russ建议的那样,尽管AFAIK仍然处于某种β状态并且其上没有太多信息。无论哪种方式,我建议并行或一个接一个地从4个传感器读取,将测量值加载到不同偏移量的PRU存储器中,然后向ARM发送单个信号。

在您链接的代码中,行:

SBCO roundtrip, c24, 0, 4

从寄存器4(寄存器roundtrip,根据文件顶部的r4)获取#define roundtrip r4个字节,并将其加载到PRU数据RAM中(常量c24设置为lines 39-41)中数据RAM的开头,偏移量为0。因此,如果您在4个寄存器中有4个不同的测量值,则可以偏移RAM中的数据,例如:

SBCO roundtrip1, c24, 0, 4
SBCO roundtrip2, c24, 4, 4
SBCO roundtrip3, c24, 8, 4
SBCO roundtrip4, c24, 12, 4

然后在C程序中读取这4个连续的32位整数。