c - 通过 mmap 配置焊盘

标签 c linux posix mmap beagleboard

我有一个 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.pdf 上配置的引脚(CONTROL_PADCONF_UART2_CTS[15:0])第 778 页。我看到它是一个 32 位寄存器。但是我无法通过该寄存器的低 16 位 4 点获得功能 0x2174?

最佳答案

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

关于c - 通过 mmap 配置焊盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14816798/

相关文章:

c - 警告比较整数和指针

sizeof(pointer)可以用来查找机器类型吗

c - 应用程序退出后信号量保持打开状态

c++ - pthread_create 没有参数?

c - 当我强制退出服务器(输入 clt + c)时,有什么办法可以做到这一点,客户端也会同时终止吗?

c - 为什么指针的值在转换后会发生变化?

c - 结构接口(interface)

linux - 如何在 Linux 上静默安装 anaconda/miniconda

linux - 使用带有 Node webapp 的 vhosts 的记录器

linux - Catalina.out 未通过 bash 脚本在编辑后登录