树莓派2使用的是bcm2836,树莓派1使用的是bcm2835,据说bcm2836除了CPU使用的是cortex-a7,外设与bcm2835基本相同,因为官方没有提供bcm2836的外设参考手册,所以只能使用bcm2835的外设参考手册,BCM2835-ARM-Peripherals.pdf
手册中第5页的地址映射图如下:
左侧的是bcm2835中的GPU的虚拟地址空间,中间的是在没有启用mmu时ARM的物理地址空间,右侧是的ARM开启mmu时的虚拟地址空间映射。
对于我们的裸机led实验,我们只关心中间的物理地址空间。所以bcm2835的外设被映射到0x20000000开始的物理地址。但是在树莓派2中这个外设起始地址变为0x3f000000。
有人在uboot的补丁中发现了这个地址。继续查看手册的第90页,可以得知gpio寄存器被映射到0x7e200000,这个GPU的虚拟地址,根据上图可以换算为0x20200000,也就是相对外设偏移0x200000,由此推测出在树莓派中gpio的起始地址为0

本文详细介绍了如何在树莓派2上进行GPIO LED闪烁实验,讲解了BCM2835外设地址映射,特别是GPIO寄存器的配置,并提供了设置功能选择寄存器、控制LED高低电平的函数。通过汇编代码设置堆栈指针,最终实现LED的闪烁效果。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



