在用户空间处理 GPIO ARM9 嵌入式 Linux AM1808

2024-01-16

我必须将我的 GSM 模块与基于 ARM9 的 AM1808 连接起来。

我已将所有 GPIO 引脚分配给 Da850.c 以及 mux.h 文件。我成功创建了一个 uImage 并将该图像插入到我的 Flash 中。

我需要处理用户应用程序中的一些 GPIO。

我知道我们可以从内核空间处理 GPIO,但我需要从用户空间处理。

例如,我为 GSM 模块分配了一个用于电源键的 GPIO。我需要通过应用程序更改引脚方式(高或低)。

好的,我编写了以下代码来从用户空间访问它,

#include <stdio.h>
#include <time.h>
#include <signal.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <stdlib.h>
#include <unistd.h>
#include "GSMpwr.h"
#define BS_GSM_PWR_REGISTER 0x01E26014
#define BS_DCDS_MASK    0x00000004

int fd;  // Memory device descriptor
unsigned long *pPWR;

unsigned short GetGSMpwr(void)
{
    #if defined __HOST_ARM
    unsigned long dcd_value = *pPWR;
    return (pwr_value >> 7) & 0x01;
    #endif
}

void InitializeGSMpwr(void) 
{
    #if defined __HOST_ARM
    int page_size = getpagesize();
    unsigned int MAP_addr;
    unsigned int reg_addr;
    unsigned char *pTemp;             // Pointer to GSMpwr register

/*
 * Open memory and get pointer to GSMpwr register in the FPGA
 */

if((fd = open("/dev/mem", O_RDWR | O_SYNC)) < 0)
{
        printf("failed to open /dev/mem");
        return;
}
else
{
    MAP_addr = (BS_GSM_PWR_REGISTER & ~(page_size - 1));
    pTemp = (unsigned char *)mmap(NULL, page_size,(PROT_READ |      PROT_WRITE),MAP_SHARED,fd,MAP_addr);

    if((pTemp == MAP_FAILED) || (pTemp == NULL))
    {
        printf("failed to map /dev/mem");
        return;
    }
    else
    {
    printf(“Memory Mapped at Address %p. \n”,pTemp);
    }

virt_addr = map_base + (control & MAP_MASK);



    reg_addr = (BS_GSM_PWR_REGISTER & (page_size - 1));
    pPWR = (unsigned long*)(pTemp + reg_addr);
    printf("GSM PWR PIN mapped in Application\n");
}

我只能通过这段代码读取该引脚,现在我想使用该引脚作为输出,并希望以 3 秒的时间间隔走高和走低。


最简单的方法是利用 GPIO 支持sysfs,您可以在其中控制所有导出的 GPIO。请看一下Linux内核 GPIO 文档 https://www.kernel.org/doc/Documentation/gpio.txt, 尤其,用户空间的 Sysfs 接口 part.

启用 GPIO 支持后sysfs (GPIO_SYSFS),GPIO 控制将非常简单:

Example

GPIO=22

cd /sys/class/gpio
ls
echo $GPIO > /sys/class/gpio/export
ls

请注意,第一个 ls 中 gpio22 不存在,但在将 GPIO 22 导出到用户空间后确实存在。

cd /sys/class/gpio/gpio$GPIO
ls

有一些文件可以设置方向并检索当前值。

echo "in" > direction
cat value

您可以配置 GPIO 进行输出并设置值。

echo "out" > direction
echo 1 > value

示例取自here https://www.ridgerun.com/developer/wiki/index.php/How_to_use_GPIO_signals.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在用户空间处理 GPIO ARM9 嵌入式 Linux AM1808 的相关文章

  • 如何在Linux中使用C或shell检查密码?

    我有一个用 C 编写的程序 运行在嵌入式 Linux 上 有时它想检查系统用户的密码 如果我能得到地穴盐 etc 密码 我可以使用 crypt 检查用户密码的正确性 有没有shell脚本可以帮助我检查密码 比如check passwd用户名
  • Node.js |如何通过串口向设备发送和接收一个字节?

    我正在尝试编写使用以下方法的 Node js 脚本serialport https serialport io 用于读取和写入数据的 npm 包COM5串行端口 使用 RS 232 电缆连接到设备 该设备会自动传输其拥有的数据 要检索设备内
  • USB 端口速度 Linux [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何以编程方式确定运行 Linux 内核的嵌入式设备中的 USB 端口速度 你可以阅读 sys bus usb devices usb s
  • ARM + gcc:不要使用一大块 .rodata 部分

    我想使用 gcc 编译一个程序 并针对 ARM 处理器进行链接时间优化 当我在没有 LTO 的情况下编译时 系统会被编译 当我启用 LTO 时 使用 flto 我收到以下汇编错误 错误 无效的文字常量 池需要更近 环顾网络 我发现这与我系统
  • 如何使用 Neon SIMD 将无符号字符转换为有符号整数

    如何转换变量的数据类型uint8 t to int32 t使用霓虹灯 我找不到执行此操作的任何内在因素 假设您想要将 16 x 8 位整数的向量转换为 4 个 4 x 32 位整数的向量 您可以通过首先解压缩为 16 位 然后再次解压缩为
  • ELF 文件头

    关于 elf 文件头的一个简单问题 我似乎找不到任何关于如何在 elf 头中添加 更改字段的有用信息 我希望能够更改幻数并向标题添加构建日期 以及可能的其他一些内容 据我了解 链接器创建标头信息 但我在 LD 脚本中没有看到任何引用它的内容
  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • u-boot:搬迁

    这是一个与u boot相关的基本问题 为什么 u boot 代码会自行重新定位 好吧 如果 u boot 是从 NOR flash 或启动 ROM 空间执行 那么这是有道理的 但如果它已经从 SDRAM 运行 为什么它必须再次重新定位自己呢
  • 如何随时暂停 pthread?

    最近我开始将 ucos ii 移植到 Ubuntu PC 上 我们知道 在pthread的回调函数中的 while 循环中简单地添加一个标志来执行暂停和恢复是不可能模拟ucos ii中的 进程 的 如下解决方案 因为ucos ii中的 进程
  • 为什么当大小大于 50 时,该程序花费的时间会呈指数级增长?

    所以我正在为类编写一个 ARM 汇编快速排序方法 我对大部分内容都有了解 除了复杂性没有意义 我们将其与我们制作的另一种冒泡排序方法进行比较 它对于具有 1 个参数和 10 个参数的示例表现更好 然而 我什至无法比较 100 个参数测试 因
  • 从内核空间中的块设备读取

    我正在编写一个内核模块 需要从现有的块设备执行读取 dev 东西 有谁知道有任何其他模块可以执行这些操作 我可以用作参考吗 欢迎任何指点 Linux 2 6 30 如果你真的绝对必须那么使用filp open filp close vfs
  • DS-5:什么是 FVP、RTSM、基础模型、AEM 模型、快速模型、CADI?

    DS 5 模拟器使用了很多术语 如 FVP RTSM 快速模型 基础模型 AEM 模型 CADI Arm的文档中提供的解释不是很清楚 这些术语的含义是什么 作为 DS 5 的最终用户我应该关心哪些术语 Model 软件模拟的行业术语 就 A
  • Linux、ARM:为什么仅当启动时存在 I2C GPIO 扩展器时才创建 gpiochip

    在 imx6sx 硬件平台 NXP 嵌入式 ARM 上使用 Linux 3 14 52 问题是设备树中指定的 PCF8575 I2C GPIO 扩展器不会实例化为 sys class gpio 结构中的设备 除非它们在内核启动期间存在 这些
  • CC2538 的 Contiki UDP 数据包传输持续时间

    有人可以解释一下 Contiki OS 传输 UDP 数据包时发生了什么吗 以下是我的设备使用 CC2538 芯片运行时的详细电流消耗 我的问题是 既然理论上在 250kbps 下 408 位长度的数据包应该在大约 2ms 内传输 为什么要
  • 为什么 GCC 交叉编译不构建“crti.o”?

    在尝试为arm构建gcc 4 x x交叉编译器时 我陷入了缺失的困境crti o文件在 BUILD DIR gcc子目录 An strace在顶层Makefile表明编译后的xgcc正在调用交联器ld with crti o 作为一个论点
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • ARM Chromebook 上的 Android 开发环境?

    我尝试了多次安装和使用安卓工作室 https developer android com studio index html on an ARM Chromebook C100P https archlinuxarm org platfor
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • Windows CE 与嵌入式 Linux [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 现在我确信我们都清楚 Linux 与 Windows 桌面的相对优点 然而 我对嵌入式开发世界的了解却少得多 我主要对行业解决方案感兴

随机推荐

  • 将原始类型对象列表作为子报表的数据源传递

    我需要传递给我的子报表数据源在主报告的帮助下List
  • Android 如何在 mediaPlayer 中仅播放歌曲 30 秒

    我正在 Android 上工作 我正在创建一个音频歌曲播放器 我只想播放一首歌 30 秒 之后 必须关闭播放器 如果我按下 它应该重新开始START再次按钮 这是创建媒体播放器的代码 MediaPlayer mediaPlayer new
  • 未找到 JavaFX 包

    我正在尝试使用组合的 Swing 和 JavaFX 组件创建一个项目 但我的 IDE 找不到 JavaFX 包 尝试使用 Netbeans 和 Eclipse import javafx embed swing JFXPanel says
  • 尝试完成输入事件,但输入事件接收器已被释放

    我正在尝试我在网上看到的教程 该应用程序从服务器获取并显示 JSONfeed 这部分工作正常 我试图在自定义列表视图中显示此提要 但是当我尝试这样做时 我得到 尝试完成输入 事件 但输入事件接收器已被处理 logcat 中的错误 并且应用程
  • 生成和执行之间有什么区别?

    我正在学习编写 TCL 期望 脚本 我注意到一些示例显示了如何使用 spawn 而其他示例则显示了命令 exec 我尝试谷歌搜索 但找不到有什么区别 假设我在一个很长的期望脚本中间调用 exec 我会期望发生什么 spawn is an e
  • 数组和线程安全访问

    如果我有一个可以 将在任何给定时间点被多个线程访问的数组 到底是什么导致它是非线程安全的 以及确保该数组在大多数情况下是线程安全的步骤是什么情况 我在互联网上进行了广泛的查找 发现几乎没有关于这个主题的信息 一切似乎都是特定的场景 例如 这
  • 使用 Entity FrameworkWork 保存更改/更新数据集中的现有对象,而不必单独设置每个属性

    我可以做类似下面的事情 这不起作用 而不必显式设置对象的每个属性吗 Product 是默认模型绑定程序从表单提交创建的对象 ProductInDb 是我希望覆盖 更新的上下文 数据库中的对象 两者的 ProductID 主键相同 var P
  • Ubuntu:无法纠正问题,您持有损坏的软件包

    尝试安装此程序时 我收到 无法纠正问题 您持有损坏的软件包 错误消息 阿帕奇版本 服务器版本 Apache 2 4 2 Ubuntu 服务器建成 2012 年 6 月 27 日 07 23 35 aptitude install libap
  • while(true) 与 setInterval(function(),0) [重复]

    这个问题在这里已经有答案了 设置间隔 重复调用函数或执行代码片段 每次调用该函数之间有固定的时间延迟 while 创建一个循环 只要测试条件的计算结果为 true 该循环就会执行指定的语句 之前评估过条件 执行该语句 如果我使用while
  • 公共属性的默认值

    我在某个班级有一个公共财产 我想要这个属性的默认值 1 而不需要像 MyField这样的私有变量 因为这个类中的属性太多 我不会一一添加它们 public int MyProperty get set 我认为 DefaultValue At
  • 在unittest中覆盖python函数局部变量

    我在 python 2 7 中有一个方法可以执行 foo 操作 如果 foo 不起作用 则在 5 分钟后放弃 def keep trying self timeout 300 empirically derived appropriate
  • GoogleFit 示例不起作用

    我正在尝试使用 BasicHistory Sample 来存储数据 然后读取它 但在我的情况下 代码卡在插入调用中 await 调用不会返回我尝试使用异步方式的任何内容 这里是代码 com google android gms common
  • 在哪里可以找到 Microsoft SQL Server 2008 的 Northwind 数据库?

    我正在尝试查找并创建 导入 Northwind 数据库来练习我的 Linq fu 我一生都找不到它 搜索只是将我转到此页面 这反过来又告诉我在不存在的官方页面上找到它 http msdn microsoft com en us librar
  • 数据绑定在表单加载之前不起作用 - 组合框项仅在表单加载后初始化

    我在 winform 上有两个组合框 一个包含列表 MyList 中的所有值 另一个我想拥有第一个选定索引中的所有值 但我认为将项目加载到组合框中时存在问题 public partial class Form1 Form public Fo
  • 在 Chrome 中禁用表单自动填充而不禁用自动完成[重复]

    这个问题在这里已经有答案了 我们如何禁用 Chrome 的自动填充功能
  • 如何在 Internet Explorer 中创建跨域 XMLHTTPRequest

    我的代码如下所示 推荐在 IE 下运行 但仅在 Chrome 和 FF 下运行 是否有正确的方法从另一个域访问 url 此外 该域是我拥有的域 可以允许访问尝试访问它的脚本
  • 如何检测 Topshelf 是否在控制台模式下运行

    我将 Topshelf 与 FluentSchedule 结合用于 Windows 服务 但是 我希望能够试运行应用程序以简单地启动而不是执行设置计时器等的 FluentSchedule 代码 从命令行运行 exe 文件 即没有 安装 命令
  • 在 PHP 中打印多维数组的单个值

    我正在使用以下数组 Array 0 gt Array id gt 6 key gt SITE NAME value gt Webg Smarty CMS Small name gt general title gt website name
  • ConstraintLayout - 如何垂直对齐两个视图的中心

    我有两个视图 A 和 B 它们有不同的高度 如何在内部垂直对齐这些视图的中心ConstraintLayout 例如 在下面的 XML 中 我想要中心img change picture与中心对齐txt change picture
  • 在用户空间处理 GPIO ARM9 嵌入式 Linux AM1808

    我必须将我的 GSM 模块与基于 ARM9 的 AM1808 连接起来 我已将所有 GPIO 引脚分配给 Da850 c 以及 mux h 文件 我成功创建了一个 uImage 并将该图像插入到我的 Flash 中 我需要处理用户应用程序中