gpt4 book ai didi

arm - mmap 和访问 ARM 处理器中的 GPIO 配置寄存器

转载 作者:行者123 更新时间:2023-12-05 00:08:21 25 4
gpt4 key购买 nike

我正在努力从 Linux 用户空间读取(和写入)硬件寄存器。目标是配置一些 GPIO 引脚,并能够设置和读取这些引脚。

根据处理器规范(飞思卡尔的 imx27),控制 GPIO 的寄存器组的物理地址是 0x10015000

我的假设是我可以使用这样的东西:

unsigned long *gpio;
fd = open("/dev/mem", O_RDWR);
gpio = (unsigned long *) mmap(0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0x10015000);

我现在希望能够读取数据并将数据设置到处理器中的寄存器。问题是我读哪个位置并不重要,我总是得到 0。

例如,物理位置 0x10015220 中的寄存器包含一个寄存器,显示哪些引脚在我们中作为 GPIO。这默认为 0xFFFFFFFF。阅读这个寄存器,我希望得到不同于 0 的东西:
printf("PTC_GIUS: 0x%08lX\n", gpio[0x220]);

PTC_GIUS: 0x00000000 .

我哪里错了?

最佳答案

mmap/dev/mem应该管用。您是否尝试以 root 身份运行您的代码?也许某些安全措施阻止您的程序访问地址空间。还要确保您已经传递了 GPIO-Space 的正确物理地址。

您使用的方法在我运行 linux 的 Cortex-A8 ARM 板上没有问题。

如果你不能让它工作,除了为 gpio 寻找或编写一个设备驱动程序(顺便说一句,编写一个并不难)之外,你无能为力。

幸运的是,有人已经为你做到了。是否有一个名为 /dev/gpio 的节点?存在于您的文件系统中吗?如果是这样,您已经有一个驱动程序。

谷歌搜索 /dev/gpio将为您提供有关如何使用它的所有详细信息。您还可以找到一个简单的 gpio 驱动程序的源代码,您可以对其进行修改以满足您的需要。

关于arm - mmap 和访问 ARM 处理器中的 GPIO 配置寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1542838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com