2013-02-11 37 views
1

我有一個beagleboard-xm rev C板。處理器的TRM。我看到一些示例如何在網絡上進行焊盤配置。這裏是一個例子:pad配置由mmap

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); 

我的問題是,什麼是除以4 0x2174的目的是什麼?

我看到0x2174代表我想要配置的針(CONTROL_PADCONF_UART2_CTS[15:0]http://www.ti.com/lit/ug/spruf98x/spruf98x.pdf page778。我看到它是一個32位寄存器。但是我不能通過4點得到該寄存器的低16位的功能0x2174?用C

回答

3

這是因爲指針是這似乎是這個平臺上的4個字節型「ULONG」。假設pinconf的寄存器地址爲0x12174,則必須將偏移量除以0x10000,以便爲ulong數組(以及正確的字節地址)獲得正確的索引。

2

地址運算工作在這樣的方式的pinconf[n]地址是地址pinconf加N 乘以sizeof(ulong)。這就是爲什麼當sizeof(ulong)爲4時,您將目標單詞的原始偏移量除以4以獲取pinconf數組中的單詞索引。