树莓派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);