Linux4个led灯循环点亮程序,linux驱动学习笔记---点亮一个led灯(三)

这篇博客详细介绍了如何在Linux下编写驱动程序,以控制S5PV210平台上的4个LED灯进行循环点亮。内容涵盖了LED灯的硬件地址映射、驱动模块的加载与卸载、状态寄存器和数据寄存器的操作,以及open、write、close函数的实现,使得用户可以通过应用程序控制LED灯的亮灭状态。
摘要由CSDN通过智能技术生成

led硬件地址映射和操作

1.点亮s5pv210的led灯首先需要知道其所用引脚,以及引脚所对应的状态寄存器与数据寄存器

cbf8d0a123f7da2136ee3edaffc2fbf5.png

d21133cb2ecf12b333ffabcf6ae53271.png

根据外围电路图可知两个灯所用的引脚分别为gpc0_3与gpc0_4,找到其引脚所对应的寄存器

131d40fb664a4dc08e0ce613fade2b44.png

状态寄存器

7b852aacf801b9a212c18cdba2d3d340.png

5位的数据寄存器

在驱动模块加载中做地址映射,映射的地址为8个字节64位(包括状态寄存器与数据寄存器)

gpc0con + 1(一个寄存器为4个字节32位,表示指向下一个寄存器0xE0200064)

// 3,实现驱动模块加载/卸载入口函数

static int led_drv_init(void)

{

printk("--------^_* %s-------\n", __FUNCTION__);

int ret;

// 申请主设备号, 默认次设备号为0

// 参数1---指定的主设备号--就是一个整数,选255以上

//参数2--设备的描述--自定义的字符串

//参数3--设备驱动的文件操作对象

//返回值: 错误为负数,正确为0

ret = register_chrdev(led_major, led_name, &led_fops);

if(ret < 0)

{

printk("register_chrdev error\n");

return ret;

}

// 自动创建设备节点

//创建设备文件所属类别

//参数1--拥有者--当前模块

//参数2--类别的名字--自定义

//返回值---返回一个指针

led_cls = class_create(THIS_MODULE, "led_cls");

//创建设备文件

//参数1--所属类别

//参数2--当前创建的设备文件的父类是谁--一般NULL

//参数3--关联的设备号

//参数4--当前设备文件的私有数据--一般NULL

//参数5/6--设定设备文件的名字

device_create(led_cls, NULL, MKDEV(led_major, 0), NULL, "led0"); // led0

//参数1--硬件的物理地址

//参数2--映射的地址长度

//返回值---映射之后的虚拟地址

gpc0con = ioremap(0xE0200060, 8);

gpc0dat = gpc0con + 1;

return 0;

}

在卸载的函数中 去映射

static void led_drv_exit(void)

{

printk("--------^_* %s-------\n", __FUNCTION__);

//去映射

//参数1---映射之后的虚拟地址

iounmap(gpc0con);

//

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值