问题标签 [gpio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C编程控制GPIO LED
我有一个硬件,我需要打开 GPIO 中连接的 LED(查看硬件规格,GPIO BCBUSB0 连接到 LED)以显示软件在其中运行良好。如果由于某种原因软件没有运行,则 LED 应关闭或变为红色。
现在,我想我应该设置一个看门狗之类的东西,它会定期向 Led 发送信号以显示软件正在运行的状态。如果由于某种原因 LED 没有接收到特定间隔的信号,它应该关闭。
我对使用 C 语言很熟悉,但不知道如何编程 GPIO 来打开/关闭 LED。任何意见或建议都会有很大帮助。
谢谢
c - 软件 PWM 不会破坏 CPU?
这是一个学术问题(我不一定打算这样做),但我很好奇它是如何工作的。我正在考虑用户级软件(而不是硬件)解决方案。
我想产生 PWM 信号(假设为少量数字 GPIO 引脚,但超过 1 个)。我可能会编写一个创建 Pthread 的程序,然后在该线程中使用适当的 s 等在占空比上无限循环sleep()
以获得正确的比例。
这不会严重破坏 CPU 吗?我想频率会在 100 Hz 左右。我以前没有做过这样的事情,但我可以想象不断循环、上下文切换等对于多任务处理或 CPU 使用来说不是很好。
在这种情况下使用和多任务处理有关 CPU 的任何建议?FWIW 我正在考虑单核处理器。我感觉答案的范围从“这将使您的系统无法使用”到“所涉及的数字比对现代处理器产生影响的数量级要小几个数量级”!
假设 C,因为它似乎最合适。
编辑:假设机器上的 Linux 或其他一些通用 POSIX 操作系统可以访问硬件 GPIO 引脚。
编辑:我认为我将如何实现带睡眠的 PWM 是显而易见的。为免生疑问,如下所示:
android - Pandaboard GPIO bank 未从内存中映射
我目前正在使用 OKL4 Hypervisor 一起运行 Android 和 RTOS,以便在 Pandaboard (OMAP4430) 上对它们进行虚拟化。在上电期间的某个时刻,Linux 内核似乎以某种方式导致板上的所有 GPIO 库都从内存中取消映射,即使物理地址无法访问(通过 JTAG)。这似乎是暂时的,因为只有当 Hypervisor 在此状态下中断 Android 并让 RTOS 运行时才会出现问题。我尝试在 Linux 内核中禁用电源管理,但这似乎没有什么不同,我还使用测试点检查了 Pandaboard 上的所有时钟,它们看起来很好,Hypervisor 报告所有页面都正确映射。我正在寻找任何帮助,以找出 Pandaboard 或 OMAP 上的哪些可能配置可能导致所有 GPIO 组从内存中消失。
linux - 如何计算我的 GPIO 端口地址
我有一块 Jetway NF81-T56 主板,它有一个提供 8 条 I/O 线的接头,标有 GPIO30-GPIO37。我的 CentOS6 安装中没有 GPIO 驱动程序,我正在尝试编写驱动程序。Fintek F71869 Super IO 芯片提供 GPIO 和其他 I/O 功能。我可以通过 0x2e/0x2f 端口访问和修改 GPIO3 寄存器,但无法使用 F71869 GPIO 寄存器中设置的 GPIO BASE_ADDR 访问数据端口。我已经阅读了这些寄存器,并且 GPIO BASE_ADDR 设置为 0x0a00。该芯片的手册页指出:
索引端口为 BASE_ADDR[15:2] + 5,数据端口为 BASE_ADDR[15:2] + 6
我已将数据端口设置为 0x0f(由连接的 LED 显示)并尝试读取端口 0x0a00-0x0a7f。全部返回 0xff,而不是 0x0f。有谁知道如何解释“BASE_ADDR[15:2]”符号语法?我曾尝试在互联网上搜索并尝试联系制造商,但无济于事。
interrupt - gpio pin未在linux中导出
我尝试了以下方法在 linux 用户空间中导出 gpio:
在内核配置中,
/li>GPIO=9
/li>used gpio_export(9)
在我的代码中试图导出所有的gpio。但是没有导出gpio。
在 sysfs 中导出 gpio 引脚时我缺少什么 ..?
nested - ARM Cortex M3 GPIO 中断 - 每个端口一个 ISR,有 8 个引脚 - 如何处理所有引脚?
我正在使用 Luminary LM3S8962 微控制器及其包含的库指南,但这应该与任何具有嵌套向量中断的 ARM Cortex-M3 相关。
整个 GPIO 端口只能注册一个中断服务例程函数。一个 GPIO 端口通常有 8 个引脚,每个引脚都可以配置一个中断。对于每个引脚,您可以测试其上是否“发生”中断(待处理),对吗?对于每个引脚,您都可以清除挂起的中断,对吗?
如果 GPIO 端口上的引脚触发了 ISR,则处理器处于 ISR 中。那么当我们在 ISR 中时,如果同一端口上的另一个引脚触发中断会发生什么?我们假设代码检测到哪些引脚有待处理的中断。- 这个 ISR 是否被中断并开始新的 ISR,使用相同的代码,但更新了 PinInterruptStatus 寄存器?(我希望不会) - 这个 ISR 是否一直执行到完成,然后立即执行另一个引脚的中断?(我知道 ARM Cortex M3 实现了中断的尾链) - 或者是否必须有一个 while 循环循环直到所有引脚都被清除,在处理完一个引脚后清除它?
也许这会有所帮助:
linux - 通过 sysfs 将 GPIOS 限制为仅输出或仅输入
我正在使用 Ubuntu 11.10。我为内核中没有自己的驱动程序的 GPIO 芯片编写了一个驱动程序。
我想限制用户将仅输出引脚设置为输入,反之亦然,在使用 /sys/class/gpio 时。这是因为我板上的许多 GPIO 仅是输入或仅输出。
我可以从函数 gpio_direction_in()、gpio_direction_out() 和 gpio_request() 中扫描受限的 GPIO 编号,但我认为这有点绕路。
有没有专门为此目的的功能?我查看了 GPIO 的文档,但什么也没看到。
- 安德鲁
linux - mmap 比 ioremap 慢
我正在为运行 Linux 2.6.37 的 ARM 设备进行开发。我正在尝试尽快切换 IO 引脚。我做了一个小内核模块和一个用户空间应用程序。我尝试了两件事:
- 使用 . 直接从内核空间操作 GPIO 控制寄存器
ioremap
。 mmap()
GPIO 控制寄存器没有缓存并从用户空间使用它们。
两种方法都有效,但第二种方法比第一种方法慢约 3 倍(在示波器上观察)。我想我禁用了所有缓存机制。
当然,我想充分利用这两个世界:从用户空间开发的灵活性和易用性以及内核空间的速度。
有谁知道为什么mmap()
可能比 慢ioremap()
?
这是我的代码:
内核模块代码
用户空间应用代码
linux - linux gpio c api
我有一块运行 3.2 内核的 powerpc 板。使用 sysfs 访问 gpio 可以按预期工作,例如
是否没有 API 可以直接从用户空间访问 gpio 引脚?我必须处理基于文本的 sysfs 界面吗?
我寻找类似的东西: gpio_set(int no, int val);
谢谢克劳斯
c - 在 C (beagleboard-xm) 中读取端口 (GPIO) 值
我有一个运行 ubuntu 12.04 的嵌入式板(beagleboard-xm)。我需要连续读取一个 GPIO 以查看端口的值是否发生变化。我的代码如下:
上面的代码连续读取端口(0
默认情况下),但是,当我将端口更改为 时1
,system
调用输出正确的值,但printf
仍然打印0
为输出。有什么问题value2
不存储system()
输出的值。
如果我使用下面的代码而不是while
上面的循环,则会收到有关打开value
文件的错误(无法打开值文件。),如果我将fopen
行放在while
循环之外,它不会显示value
文件中的更改。
我的问题:我需要如何修复代码?或者我应该如何阅读value
文件?作为我想知道的附加信息:例如导出端口有什么区别system("echo 139 > /sys/class/gpio/export")
以及fp = fopen("/sys/class/gpio/export","w"); fprintf(fp,"%d",139);
您建议我使用哪种方法?为什么?
先感谢您。