想写一个tiny6410驱动,通过该驱动可以查看led的开关状态和设置开关。代码是在tiny6410-led驱动代码原有的代码的基础上改的,先贴出一部分关键代码。。
static long sbc2440_leds_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
int ioarg,ret;
switch(cmd) {
unsigned tmp;
case 0:
ioarg = ((readl(S3C64XX_GPKDAT) >> 4) & 0XF);
ret = __put_user(ioarg,(int *)arg);
break;
case 1:
tmp = readl(S3C64XX_GPKDAT);
tmp &= ~(1 << (4 + (arg/10)));
tmp |= ( (!(arg%10)) << (4 + (arg/10)) );
writel(tmp, S3C64XX_GPKDAT);
//printk (DEVICE_NAME": %d %d\n", arg, cmd);
return 0;
default:
return -EINVAL;
}
}
应用测试程序关键代码如下
if(argc == 1)
{
ioctl(fd,0,&arg);
printf("led dat: %d\n",arg);
}
else
{
arg=atoi(argv[1]);
ioctl(fd,1,arg);
}
效果图:
把开发板上第二个灯点亮,,读取值为13:即1101.。成功。。
阅读(1566) | 评论(0) | 转发(0) |