您的位置:首页 > 其它

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);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: