我有一个beagleboard xm rev c板。处理器的trm。我在网上看到了一些如何配置pad的例子。下面是一个例子:

 int fd = open("/dev/mem", O_RDWR | O_SYNC);
if (fd < 0) {
  printf("Could not open memory\n");
  exit(1);
}

// Pad configuration
volatile ulong *pinconf;
pinconf = (ulong*) mmap(NULL, 0x10000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0x48000000);
if (pinconf == MAP_FAILED) {
  printf("Pinconf Mapping failed\n");
  close(fd);
  exit(1);
}
// configure expansion header
pinconf[0x2174/4] = 0x001A001A; //
close(fd);

我的问题是,将0x2174除以4的目的是什么?
我看到0x2174代表我想在http://www.ti.com/lit/ug/spruf98x/spruf98x.pdfpage778上配置(CONTROL_PADCONF_UART2_CTS[15:0])的管脚。我看到它是一个32位寄存器。但是我不能用那个寄存器低16位的4点来获得功能0x2174?

最佳答案

这是因为指针的类型是“ulong”,在这个平台上似乎是4个字节。假设pinconf的寄存器地址是0x12174,则必须将偏移量除以4,得到一个ulong数组的正确索引(因此是正确的字节地址)。

09-18 01:54