led驱动程序Word文件下载.docx

上传人:b****4 文档编号:17610670 上传时间:2022-12-07 格式:DOCX 页数:7 大小:181.27KB
下载 相关 举报
led驱动程序Word文件下载.docx_第1页
第1页 / 共7页
led驱动程序Word文件下载.docx_第2页
第2页 / 共7页
led驱动程序Word文件下载.docx_第3页
第3页 / 共7页
led驱动程序Word文件下载.docx_第4页
第4页 / 共7页
led驱动程序Word文件下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

led驱动程序Word文件下载.docx

《led驱动程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《led驱动程序Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。

led驱动程序Word文件下载.docx

b.Led灯为低电平有效

(5)驱动程序如下:

#include<

linux/fs.h>

linux/init.h>

linux/miscdevice.h>

linux/delay.h>

linux/device.h>

linux/cdev.h>

asm/irq.h>

mach/gpio.h>

plat/regs-gpio.h>

plat/gpio-cfg.h>

mach/hardware.h>

linux/io.h>

#defineDEVICE_NAME"

ok6410_led"

staticints3c6410_leds_ioctl(structinode*inode,structfile*file,unsignedintcmd,unsignedlongarg)

{

unsignedlongtmp;

switch(cmd)

{

case0:

case1:

if(arg>

4)

return-EINVAL;

tmp=__raw_readl(S3C64XX_GPMDAT);

//读出GPMDAT里的数据

if(cmd)//这里cmd=1,当是第0个灯,arg=0,tmp&

=1110,

tmp&

=(~(1<

<

arg));

//上面相当于这个命令./app_led01代表第0个灯亮

else

tmp|=(1<

arg);

//这里cmd=0的,当是第0个灯,arg=0,tmp|=0001

__raw_writel(tmp,S3C64XX_GPMDAT);

//上面相当于这个命令./app_led00代表第0个灭

return0;

default:

return-EINVAL;

 

}

}

staticstructfile_operationss3c6410_leds_fops={

.owner=THIS_MODULE,

.ioctl=s3c6410_leds_ioctl,

};

staticstructmiscdevicemisc={

.minor=MISC_DYNAMIC_MINOR,

.name=DEVICE_NAME,

.fops=&

s3c6410_leds_fops,

staticint__inits3c6410_leds_init()

intret;

printk("

\n\n---------s3c6410_leds_init------------\n\n"

);

//gpm0-3outputmode

tmp=__raw_readl(S3C64XX_GPMCON);

tmp&

=(~0xFFFF);

//全清0

tmp|=0x1111;

//清1

__raw_writel(tmp,S3C64XX_GPMCON);

//gpm0-3output0

tmp=__raw_readl(S3C64XX_GPMDAT);

tmp|=0x10;

//低四位写0

__raw_writel(tmp,S3C64XX_GPMDAT);

misc_register(&

misc);

//注册混杂设备

printk(DEVICE_NAME"

initialized\n"

return0;

staticvoid__exits3c6410_leds_exit()

\n\n---------s3c6410_leds_exit------------\n\n"

misc_deregister(&

module_init(s3c6410_leds_init);

module_exit(s3c6410_leds_exit);

MODULE_LICENSE("

GPL"

MODULE_AUTHOR("

dachang"

(5)测试程序

stdio.h>

stdlib.h>

unistd.h>

sys/ioctl.h>

intmain(intargc,char**argv)

inton;

intled_num;

intfd;

if(argc!

=3||sscanf(argv[1],"

%d"

&

led_num)!

=1||sscanf(argv[2],"

&

on)!

=1||on<

0||on>

1||led_num<

0||led_num>

3)

printf("

Usage:

ledsled_num0|1\n"

exit

(1);

fd=open("

/dev/leds"

0);

if(fd<

0)

perror("

opendeviceleds"

ioctl(fd,on,led_num);

close(fd);

(6)Makefile(其中linux2.6.28首先要编译好)

KERN_DIR=/root/linux2.6.28

all:

make-C$(KERN_DIR)M=`pwd`modules

clean:

make-C$(KERN_DIR)M=`pwd`modulesclean

rm-rfmodules.order

obj-m+=led_dev.o

(7)由于是混杂设备,不需要创建设备节点

可以直接运行程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1