正如我在第 90 页所读到的那样http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf Raspberry Pi 的 GPIO 映射在 0x 7E20 0000 和 0x 7E20 00B0 之间。GPIO 引脚电平寄存器 (GPLEVn) 包含每个引脚的值
引脚电平寄存器返回引脚的实际值。LEV{n} 字段给出了相应 GPIO 引脚的值。
操作系统如何获得这些值?还是 GPIO 使用 DMA 直接映射到内存中?此外,没有任何关于轮询频率的说法。
关于中断,我发现了两个有趣的寄存器:GPIO 上升沿检测启用寄存器 (GPRENn) 和 GPIO 异步上升沿检测启用寄存器 (GPARENn)。
异步上升沿检测使能寄存器定义了异步上升沿转换在事件检测状态寄存器 (GPEDSn) 中设置一个位的引脚。异步意味着输入信号不被系统时钟采样。因此,可以检测到持续时间非常短的上升沿。
因此,似乎同步边沿检测是通过在每个时钟采样一个引脚的值来实现的,但是如果您必须检测持续时间很短的上升沿,您必须以异步方式进行。我该怎么做?不都是使用系统时钟安排的吗?
GPIO 采样是在内核的哪个部分实现的?