我正在努力从 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
.
我哪里错了?