树莓派上用的ARM有54个通过的GPIO口,我们把这54个GPIO口分成了两个banks。所有GPIO引脚至少有两个功能。具体的关于GPIO口的功能,后面再详述。GPIO口当作IO口时,也可以配置是否有上下拉。下面是关于GPIO的地址。
下面的地址都是以0x7e开关的,但是在我们学习的课程中都是以0x20开头的,所以可见,我们写的程序都是经常mmu映射的虚拟地址。
上面这个图中有两个寄存器地址相同,所以上面共有6组寄存器,每组寄存器控制10个GPIO引脚,因为树莓派上有54个GPIO引脚<6x10=60个,所以6组寄存器就足够了。
上面的寄存器具体如何用,下面会有讲,现在我们只要知道上面的6组寄存器是确定GPIO的功能(输入,输出,还是其它功能),每3位决定一个引脚的功能。
下面的4个寄存器就更容易了,GPSET是置1引脚,GPCLR是清0引脚。因为在我们的课程中是往0x20200028中写数据时,LED会亮,所以可以知识树莓派上的LED是送0就点亮。
只要给GPIO16脚送0,就可以点亮Led了。
因为一个寄存器才32位
所以GPSET0控制GPIO0到GPIO31引脚 。
GPSET1控制GPIO32到GPIO53引脚。
下面清0寄存器也是一样的道理。
上面的这个就是关于GPIO的最基本的控制了,下面的寄存器是有关于GPIO的高级功能。
下面的每一个功能都有两个寄存器来决定,因为一个寄存就是32位。2x32=64才能决定54个GPIO的控制。
下面我们总结整理一下:(注意我们写程序时用到是虚拟地址,所以用地址0x20代替0x7e)