【发布时间】:2014-11-10 10:23:57
【问题描述】:
我正在使用 C++ library (easyBlack) 通过 /dev/mem 处理 GPIO。
正如我在“AM335x SitaraTM 处理器 - 技术参考手册”的“25.3.3 中断功能”一章中看到的
为了在 GPIO 引脚上发生定义的事件(电平或逻辑转换)时向主机处理器生成中断请求,必须对 GPIO 配置寄存器进行如下编程:
• GPIO 通道的中断必须在 GPIO_IRQSTATUS_SET_0 和/或 GPIO_IRQSTATUS_SET_1 寄存器中启用。
• 必须在 GPIO_LEVELDETECT0、GPIO_LEVELDETECT1、GPIO_RISINGDETECT 和 GPIO_FALLINGDETECT 寄存器中选择输入 GPIO 上触发中断请求的预期事件。
直到一切都好,但我能找到的所有文档都是基于使用 linux 内核头文件(“linux/gpio.h”和“linux/interrupt.h”),似乎不能用于用户空间程序,仅在模块中。或examples 使用内核驱动程序并监视 sysfs 中的状态文件以实现中断。这可能行得通,但速度很慢并且需要大量资源。
除了使用多线程来查看是否更改所需引脚的值之外,还有其他选择吗? (这个其他库如何 - github.com/jackmitch/libsoc)
也许将easyBlack编译为内核模块?
谢谢!
【问题讨论】:
标签: c++ embedded-linux beagleboard beagleboneblack