树莓派底层驱动开发示例(一个简单io口驱动的开发)

本文详细介绍了如何开发一个树莓派的GPIO驱动,包括设置GPIO口为OUTPUT,使用ioremap映射物理地址,以及如何通过file_operations结构体配置驱动操作。驱动代码完成后,通过编译内核模块,加载驱动并进行测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这里我们需要注意的是,上面的地址是

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值