我需要使用 BBB 计算 50KHz 二进制信号的转换。我认为使用连接到引脚
TIMER4
的外部信号触发 P8.07
将是最简单的方法。
因此,我发出以下命令来加载正确的 Cape 并将引脚设置为计时器:
./config-pin overlay cape-universaln
./config-pin P8.07 timer
一切似乎都正常,但
dmesg
中什么也没有出现。
我的问题是:我如何读取
TIMER4
的值?我查看了 SysFs,没有发现任何有趣的东西。 /dev
中也没有任何内容。如何检索我刚刚设置的定时器计数器的值?我也对 C/C++ 解决方案持开放态度,但我想避免进行内核空间编程。
我正在使用最新的 Ubuntu Linux for BeagleBone,内核 4.1.10-ti-r21。
通过谷歌搜索,我看到了 AM335x DMTimer 子系统的 pps 驱动程序。
看起来它还没有被合并到上游,自述文件给出了将其构建到 3.8 内核中的说明 - 您可以恢复到 3.8,或者您可以将其调整为 4.1,在这种情况下您可能需要调整设备树覆盖以及 4.1 中较新版本的
dtc
编译器。
您还可以为 PRU 编写一个脉冲计数器固件(只有 50KHz 输入,根本不需要非常优化来捕获每个脉冲)。您可以经常向 ARM 发送信号,并在用户空间程序中捕获该信号。
另一种选择是使用
mmap
直接从用户空间访问 DMTimer 寄存器来映射 /dev/mem
文件(GPIO 的方法示例here),但这是一种相当“hacky”的方法,而且它是在 GNU/Linux 世界中,通常不赞成从用户空间而不是从内核空间执行此类操作。