主题 : 看不懂mini6410使用手册上的一段程序,请各位大侠指教 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 26940
精华: 0
发帖: 13
金钱: 65 两
威望: 13 点
综合积分: 26 分
注册时间: 2010-08-17
最后登录: 2018-07-15
楼主  发表于: 2010-08-27 09:56

 看不懂mini6410使用手册上的一段程序,请各位大侠指教

管理提醒: 本帖被 arm9home 从 Linux技术交流专区 移动到本区(2010-09-09)
有段程序请教各位大侠:
希望能详细的解说一下
static int sbc2440_leds_ioctl(
             struct inode*inode,
             struct file*file,
             unsigned int cmd,
             unsigned long arg)
    {
        switch(cmd)
            {
            unsigned tmp;
            case 0:
            case 1:
                    if(arg>4)
                        {
                            return-EINVAL;
                        }
            tmp=readl(S3C64XX_GPKDAT);什么意思?
            tmp&=~(1<<(4+arg));什么意思?
            tmp|=((!cmd)<<(4+arg));什么意思?
            writel(tmp,S3C64XX_GPKDAT);什么意思?
            //printk(DEVICE_NAME":%d%d\n",arg,cmd);
                    return 0;
            default:
                    return-EINVAL;
        }
    }
不胜感激
[ 此帖被besthgt在2010-08-27 10:25重新编辑 ]
级别: 新手上路
UID: 31572
精华: 0
发帖: 10
金钱: 50 两
威望: 10 点
综合积分: 20 分
注册时间: 2010-11-02
最后登录: 2011-08-01
1楼  发表于: 2010-11-04 22:46
tmp=readl(S3C64XX_GPKDAT);//将S3C64XX_GPKDAT寄存器中的数据赋给tmp
tmp&=~(1<<(4+arg));//tmp的第(4+arg)位置0;
tmp|=((!cmd)<<(4+arg));//若cmd=0,tmp的第(4+arg)位置1;
writel(tmp,S3C64XX_GPKDAT);//将tmp的值赋给S3C64XX_GPKDAT
级别: 新手上路
UID: 4864
精华: 0
发帖: 48
金钱: 285 两
威望: 129 点
综合积分: 96 分
注册时间: 2009-04-01
最后登录: 2014-07-11
2楼  发表于: 2010-11-10 20:38
楼上正解