Linux树莓派4B 驱动学习 驱动开发(GPIO)

您所在的位置:网站首页 驱动开发都是做什么 Linux树莓派4B 驱动学习 驱动开发(GPIO)

Linux树莓派4B 驱动学习 驱动开发(GPIO)

2024-04-08 14:40| 来源: 网络整理| 查看: 265

开发前的准备:内核源码获取、源码配置、内核编译、内核替换

根据数据手册(4B芯片是BCM2711)找到想要配置的寄存器地址

通过寄存器配置树莓派GPIO所操作的是寄存器的虚拟地址,芯片手册上的是物理地址,操作前要先得到物理地址和虚拟地址的关系( 在linux系统中,所有操作的地址都是虚拟地址,都是由linux内核去管理,所以需要将物理地址转换成内核可识别的虚拟地址。)

使用 cat /proc/iomem指令查看地址映射

指令找到的映射地址0xfe200000

GPIO相关寄存器解读

GPFDEL(x):端口功能选择寄存器(可针对于该端口下的某一个具体的GPIO进行选择输入还是输出功能配置),GPFDEL0端口可用于控制GPIO(0-9)

以控制GPIO4为例,在手册中找到FSEL4,它属于GPFDEL0控制手册中例举了GPIO9的操作方法:29:27三个位配置GPIO9,那么GPIO4是用14:12三个位配置(000是输入模式,001是输出模式,默认值是000也就是输入模式)GPFDEL0是32位寄存器,由虚拟基地址进行偏移(偏移量直接看手册加上去就行)得到的该寄存器地址:0xfe200000+0x00 volatile unsigend int *GPFSEL0 = NULL;//定义一个无符号整型的指针,volatile是C语言关键字后面会补充GPFSEL0 = (volatile unsigned int*) ioremap(0xfe200000,4);//指针指向ioremap返回的空类型地址(需要进行数据类型转换),ioremap函数后面会补充按位操作(配置GPIO4为输出模式) *GPFSEL0 &= ~(0x6


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3