c - 在 imx6 wandboard quad 上读取 GPIO

标签 c linux-kernel arm gpio

我正在编写一个驱动程序来控制 GPIO 引脚。我已经识别出 JP4 连接器并在 gpio91 上添加了一个 LED(JP4.06 => /sys/class/gpio/gpio91)。在阅读了许多教程之后,我编写了一个简单的内核模块。该模块接收来自用户空间的输入,并根据输入设置 gpio,如 gpio_set_value(91,true)。在调用 gpio_set_value 之前,我调用了另一个函数,即 gpio_direction_output。因此,led 会发光。另一方面,当我从用户空间获取其他命令以获取 PIN 状态时(为此我依赖于 gpio_get_value(91) 并且为此也设置输入方向),我在这里不是获得适当的值(value)。

我是否遗漏了获得所需值(value)的任何步骤?我应该如何尝试这样做?

最佳答案

来自 https://github.com/wandboard-org/linux/blob/wandboard_imx_3.10.17_1.0.0_ga/arch/arm/boot/dts/imx6qdl-wandboard.dtsi#L390

EIM_D27 被正确地复用为一个 gpio,它的 padconf 是 0x1B880,这意味着:

  • 缓慢的转换率
  • 驱动强度 HIZ
  • 速度:100 兆赫
  • 输出为漏极开路
  • 启用拉取/Keeper
  • 启用拉动
  • 100K 欧姆上拉
  • 施密特触发器输入

如果你总是读取1,也许你可以尝试使用0x18880来移除上拉

关于c - 在 imx6 wandboard quad 上读取 GPIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32717733/

相关文章:

c - Scanf_s 读取错误的输入

用于存储 double 或 long 或任何其他数据的 C 数据类型

c - "BUG: scheduling while atomic: swapper/0x00000103/0, CPU#0"怎么解决?在 TSC2007 驱动程序中?

c++ - TCP 和 PF_RING

arm - 什么时候使用 .ARM.exidx

c - 按位运算符 : Printing the numbers 1 to 100 using bit manipulation

c - 生成文件语法 : what is $(RM)?

c - 为什么当我使用 copy_from_user 时,一些模糊字符添加到原始缓冲区?

c - 如何测量 ARM Cortex-A8 处理器中的程序执行时间?

memory - 对内存映射感到困惑