樹莓派4B 寄存器基地址查詢
樹莓派4B的datasheet在我看來非常混亂複雜,尤其是地址映射方面。單datasheet就有兩個版本而且還自相矛盾。爲了查找到確定的物理地址,使用官方提供的函數進行讀取。
首先在應用層插入頭文件:
#include <bcm_host.h>
可用函數有如下選擇:
<1> unsigned bcm_host_get_peripheral_address() //讀取外設物理地址
<2> unsigned bcm_host_get_peripheral_size()
<3> unsigned bcm_host_get_sdram_address()
本例要求讀取外設物理地址,使用函數(1),代碼如下:
#include <stdio.h>
#include <bcm_host.h>
void main()
{
unsigned t;
t = bcm_host_get_peripheral_address();
printf("baseadd = %x\n",t);
}
用下面的語句進行編譯,一定要在樹莓派上進行編譯運行
gcc test.c -I/opt/vc/include -L/opt/vc/lib -lbcm_host -o test
生成test文件,如下圖。運行test文件如下,可以看到此時樹莓派4B的基地址爲
baseadd=fe000000
這個很重要,是驅動開發的基礎,以此爲基地址相對偏移一個位置。如GPIO的設置。在這裏要特別注意相對偏移量。
GPFSEL0= (volatile unsigned int *)ioremap(0xfe200000,4);
GPSET0 = (volatile unsigned int *)ioremap(0xfe20001c,4);
GPCLR0 = (volatile unsigned int *)ioremap(0xfe200028,4);