一. 简介
本文继上一篇文章的学习,上一篇文章初步写好了 Led驱动框架代码的。
文章地址如下:
本文继续 Led灯驱动代码的实现,主要学习编写 Led灯 IO的初始化工作。
二. Led驱动的 IO 初始化说明
1. 地址映射
前面进行 Led灯裸机开发实验时,关于 Led的 IO初始化工作包括如下:
1. 使能时钟信号,即设置 Led灯相关的时钟IO口
2. 复用功能,即设置为 GPIO功能
3. 配置电气属性
4. 设置为输出功能
同理,LED驱动实验中,关于 IO初始化工作也如上。IO初始化工作就是向相关寄存器写入数据。Linux系统有 MMU(memory manage unit)的存在,所以Linux 不能直接访问寄存器的物理地址,MMU会负责将寄存器的物理地址映射为虚拟地址。
所以,Linux驱动开发中,Linux 访问的是 寄存器的虚拟地址值。这里就需要进行地址映射,即将Led灯 IO初始化相关的寄存器物理地址映射为虚拟地址。
参考之前 Led裸机实验,可以找到 Led涉及的寄存器的物理地址,如下:
//寄存器物理地址
#define CCM_CCGR1_BASE (0X020C406C)
#define SW_MUX_GPIO1_IO03_BASE (0X020E0068)
#define SW_PAD_GPIO1_IO03_BASE (0X020E02F4)
#define GPIO1_GDIR_BASE (0X0209C004)
#define GPIO1_DR_BASE (0X0209C000)
地址映射函数
进行地址映射时,会调用到 ioremap() 函数,定 义 在 内核源码 ar

本文详细介绍了在Linux环境下LED驱动的IO初始化过程,包括地址映射、使用ioremap函数、设置GPIO功能、电气属性和输出模式。作者还提供了具体的代码示例,展示了如何在驱动模块中实现这些操作。
最低0.47元/天 解锁文章
4279

被折叠的 条评论
为什么被折叠?



