Linux设备驱动开发(学习笔记)_第一章 Linux设备驱动概述及开发环境构建

本文深入探讨了在无操作系统环境下,如何通过直接控制GPIO寄存器来实现LED的开关操作。介绍了GPIO控制寄存器和数据寄存器的功能,以及如何通过修改这些寄存器的特定位来设置GPIO口为输出,并在引脚上产生高或低电平。

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

在嵌入式系统的设计中,LED一般直接由CPU的GPIO(通用可编程I/O)口控制。GPIO一般由两组寄存器控制,即一组控制寄存器和一组数据寄存器。

屏蔽具体 CPU 的差异,假设在 GPIO_REG_CTRL 物理地址中控制寄存器处的第 n 位写入 1 可设置 GPIO 口为
输出,在地址 GPIO_REG_DATA 物理地址中数据寄存器的第 n 位写入 1 或 0 可在引脚上产生高或低电平,则在
无操作系统的情况下,设备驱动代码如下:
//无操作系统时的LED驱动
#define reg_gpio_ctrl *(voltatile int*)(ToVirtual)(GPIO_REG_CTRL)
#define reg_gpio_ctrl *(voltatile int*)(ToVirtual)(GPIO_REG_DATA)
//初始化LED
void LightInit(void)
{
    reg_gpio_ctrl |=(1<<n);//设置GPIO为输出
}
//点亮LED
void Lighton(void)
{
    reg_gpio_data |=(1<<n);//在GPIO上输出高电平
}
void LightOff(void)
{
    reg_gpio_data &=~(1<<n);//在GPIO上输出低电平
}
上述程序中的LightInit()、LightOn()、LightOff()都直接作为驱动提供给应用程序的外部接口函数。
程序中ToVirtual()的作用是当系统启动了硬件MMU之后,根据物理地址和虚拟地址的映射关系,将寄存器
的物理地址转化为虚拟地址

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值