【发布时间】:2009-10-09 09:40:38
【问题描述】:
我正在努力从 Linux 用户空间读取(和写入)硬件寄存器。目标是配置一些 GPIO 引脚,并能够设置和读取这些引脚。
根据处理器规范(来自 Freescale 的 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。
我哪里错了?
【问题讨论】:
-
如果 gpio 为 0x10015000 并且类型为 unsigned long *,则 gpio[0x220] 可能不会读取您认为的内容。