Chinaunix首页 | 论坛 | 博客
  • 博客访问: 169338
  • 博文数量: 27
  • 博客积分: 533
  • 博客等级: 中士
  • 技术积分: 426
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-14 19:54
文章分类

全部博文(27)

文章存档

2013年(4)

2012年(18)

2011年(5)

分类: 嵌入式

2012-07-16 18:00:11

想写一个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.。成功。。
 
 
 
阅读(1537) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~