3.4 最简单的设备驱动——LED灯驱动
2012-12-02 18:50
225 查看
3.4 最简单的设备驱动——LED灯驱动
ARM处理系统中经常使用GPIO口驱动LED灯作为系统运行状态的指示。采用S3C2410X的GPF4脚接一个LED灯,电路原理图如图3.6所示。这个驱动无疑是ARM系统中最简单的驱动。下面介绍如何开发这个LED灯的驱动。
#define LED_SI_OUT
_raw_writel((_raw_readl(S3C2410_GPFCON)&(~(3<<8)))|(1<<8),S3C2410_GPFCON)
//设置管脚为输出
#define LED_SI_H
_raw_writel(_raw_readl(S3C2410_GPFDAT)|(1<<4),S3C2410_GPFDAT)
//输出高电平
#define LED_SI_L
_raw_writel(_raw_readl(S3C2410_GPFDAT)&(~(1<<4)),S3C2410_GPFDAT)
//输出低电平
#define COMMAND_LEDON 1
#define COMMAND_LEDOFF2
利用ioctl命令来控制LED灯:
int DEMO_ioctl(structinode *inode, struct file *filp,unsigned int cmd, unsigned
long arg)
{
if(cmd==COMMAND_LEDOFF)
{
printk("ioctlLEDOFF successfully\n");
LED_SI_H;
return 0;
}
if(cmd==COMMAND_LEDON)
{
printk("ioctlLEDON successfully\n");
LED_SI_L;
return 0;
}
printk("ioctl error\n");
return-EFAULT;
}
编译完成后,使用insmod加载驱动,然后使用mknod /dev/led c 224 0命令建立节点。应用层的测试程序代码如下:
main()
{
int fd;
int i;
char data[256];
int retval;
fd=open("/dev/led",O_RDWR);
if(fd==-1)
{
perror("error open\n");
exit(-1);
}
printf("open /dev/led successfully\n");
retval=ioctl(fd,COMMAND_LEDON,0);
if(retval==-1)
{
perror("ioctl LEDON error\n");
exit(-1);
}
sleep(10);
retval=ioctl(fd,COMMAND_LEDOFF,0);
if(retval==-1)
{
perror("ioctl LEDOFF error\n");
exit(-1);
}
close(fd);
}
相关文章推荐
- Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动
- Tiny6410 简单的LED字符设备驱动
- Tiny6410 简单的LED字符设备驱动
- 自制简单字符型设备驱动程序——LED驱动
- 简单字符设备驱动——LED驱动
- Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动
- 自制简单字符型设备驱动程序——LED驱动
- Linux 字符设备驱动开发基础(一)—— 编写简单 LED 设备驱动
- Linux简单设备驱动(1):使用IO内存操作GPIO--LED
- 简单i2c设备驱动实例
- 一个极简单的 块设备驱动 的编写
- linux字符设备驱动之LED
- Linux设备驱动之Led
- s3c2440简单驱动编程-led
- 设备驱动的艺术之旅 - 简单网卡驱动模型
- USB鼠标设备简单驱动设计
- 字符设备驱动程序--LED驱动
- linux设备驱动第三篇:写一个简单的字符设备驱动
- 代码:编写一个简单的字符设备驱动
- 韦东山第12课-字符设备驱动框架、led驱动