1、驱动代码的开发
树莓派的io空间的起始地址是0x3f000000,GPIO的偏移量为20000000,所以GPIO的物理地址应该是从0x3f200000开始的。
本篇示例驱动的功能是将树莓派的一个的4引脚设置为OUTPUT,使其具有OUTPUT的功能(输出0,1)。
在开发之前我们需要查看树莓派的开发手册:
1、找到设置io口功能的寄存器:
从上图可知道FSEL4即为我们要设置的4号脚,它属于GPFSEL0寄存器控制,控制位为14-12位,具体的设置方法参考上图的FSEL9可知,将该寄存器的14-12位设置为001就是将pin4设置为output了。
设置好引脚模式,我们再来看怎么控制该引脚输出'0',和‘1’。
2、找到控制引脚输出1的寄存器:
由上图可知,GPIO Pin Output Set Registers (GPSETn) 翻译过来就是GPIO引脚输出寄存器(GPSETn),该寄存器就是控制引脚输出‘1’的寄存器。我们要设置的是四号脚,从表中可以看出,要设置n号脚为‘1’,就将n位置‘1’,我们要设置4号脚为‘1’,就将寄存器第4位置‘1’(属于0-31位之间所以我们选择的是0号也就是GPSET0寄存器),其余保持0(No effect)即可。
3、找到控制引脚输出‘0’的寄存器:
由上图可知,GPIO Pin Output Clear Registers (GPCLRn) 翻译过来就是GPIO引脚输出清除寄存器(GPCLRn),该寄存器功能就等同于控制引脚输出‘0’。我们要设置的是四号脚,从表中可以知,要设置n号脚为‘0’,就将n位置‘1‘,我们要设置4号脚为‘0’,就将寄存器第4位置'1'(属于0-31位之间所以我们选择的是0号也就是GPCLR0寄存器),其余保持0(No effect)即可。
4、找出各个寄存器的地址
结合上文所说的所以GPIO的物理地址应该是从0x3f200000开始的,
由图可知:
GPFSEL0 地址为0x3f200000
GPSET0的地址为0x3f20001C
GPCLR0的地址为0x3f200028
这里我们需要注意的是,上面的地址是