1

私は beagleboard-xm rev C ボードを持っています。プロセッサの TRM。ネットでパッド設定を行う方法の例をいくつか見ました。例の 1 つを次に示します。

 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:CONTROL_PADCONF_UART2_CTS[15:0] //www.ti.com/lit/ug/spruf98x/spruf98x.pdf ページ 778 で構成 ( ) したいピンを表していることがわかります。32ビットレジスタであることがわかります。しかし、そのレジスタの下位 16 ビットの 4 ポイントで機能 0x2174 を取得できませんか?

4

2 に答える 2

3

これは、ポインタがこのプラットフォームでは 4 バイトのように見える「ulong」型であるためです。pinconf のレジスタ アドレスが 0x12174 であると仮定すると、オフセットを 0x10000 に 4 で割って、ulong の配列の適切なインデックス (したがって、正しいバイト アドレス) を取得する必要があります。

于 2013-02-11T16:56:20.193 に答える
2

C でのアドレス算術pinconf[n]は、 のアドレスがpinconfプラス nにを掛けsizeof(ulong)たアドレスになるように機能します。そのため、 when sizeof(ulong)is 4 の場合、対象単語の生のオフセットを 4 で割って、pinconf配列内の単語のインデックスを取得します。

于 2013-02-11T16:55:21.387 に答える