GPIO子系统
GPIO 是 General Purpose I/O 的缩写,即通用输入输出端口,简单来说就是MCU/CPU可控制的引脚,这些引脚通常有多种功能,最基本的是高低电平输入检测和输出,部分引脚还会与主控器的片上外设绑定,如作为串口、I2C、网络、电压检测的通讯引脚
GPIO的方向 : 输入(int) 输出(out)
LED9:GPIO0_B7
GPIOB复用寄存器
对于一个GPIO出现问题如何进行筛查?
查阅寄存器手册。
1.判断GPIO是否为复用寄存器?
2.判断GPIO方向,是否为输入输出?
3.判断GPIO拉高拉低,高电平还是低电平?
通过io命令控制GPIO
作用:在内核阶段读写寄存器。
io -r -4 0xFDD60008 读
io -w -4 0xFDD60008 0X80008044 写
通过内存映射的方式控制GPIO
/dev/mem设备
/dev/mem设备是linux系统中的一个虚拟设备,/dev/mem设备通常和mmap结合使用,可以将设备的物理内存映射到用户态,从而实现用户空间直接访问内核态。
开启方法:
Device Drivers —>
Character devices —>
[*] /dev/mem virtual device support
/dev/mem设备的使用方法:
使用 open 打开 /dev/mem 文件描述符,访问权限可以为只读(O_RDONLY)、只写(O_WRONLY)、读写(O_RDWR)的阻塞或非阻塞形式。
int fd = 0;
fd = open(“/dev/mem”, O_RDWR | O_NDELAY); /* 读写权限,非阻塞*/
mmap函数原型:
void *mmap(void * start, size_t length, int prot, int flags, int fd ,off_t offset);
函数参数:
void * start :指向要映射到的内存起始地址,通常设置为NULL,表示让系统自动选择地址。映射成功后返回地址
size_t length :把多大部分映射到内存
int prot :映射区域的参数,可以有以下几种参数:
PROT_EXEC:映射区域可被执行
PROT_READ:映射区域可被读取
PROT_WRITE:映射区域可被写入
PROT_NONE:映射区域不能存取
int flags:映射区域的各种特性,可以有以下几种参数:
MAP_FIXED
MAP_SHARED
MAP_PRIVATE
MAP_LOCKED
注意:在使用mmap函数时必须指定MAP_SHARED 或者 MAP_PRIVATE
int fd :要映射到内存中的文件描述符
oof_t offset :文件映射的偏移量,offset的大小必须是页的整数倍。
返回值:成功返回映射到的内存区域的实际地址,失败返回值小于0.
示例:

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 351134995@qq.com