免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2580 | 回复: 4
打印 上一主题 下一主题

按键驱动程序中的一点不明白的地方 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-19 17:18 |只看该作者 |倒序浏览
我在看按键的驱动程序时,对中断处理函数中的一行代码(下面代码红色的部分)不清楚,望高手赐教,谢谢,相关代码如下:
static volatile int key_values [] = {0, 0, 0, 0};
static DECLARE_WAIT_QUEUE_HEAD(button_waitq);
static volatile int ev_press = 0;

struct button_irq_desc
{
        int irq;
        int pin;
        int pin_setting;
        int number;
        char *name;       
};

/* 用来指定按键所用的外部中断引脚及中断触发方式, 名字 */
static struct button_irq_desc button_irqs [] =
{
        {IRQ_EINT4,        S3C2410_GPF(4),        S3C2410_GPF4_EINT4,        0, "KEY1"}, /* K1 */
        {IRQ_EINT5,        S3C2410_GPF(5),        S3C2410_GPF5_EINT5,        1, "KEY2"}, /* K2 */
        {IRQ_EINT6,        S3C2410_GPF(6),        S3C2410_GPF6_EINT6,        2, "KEY3"}, /* K3 */
        {IRQ_EINT7,        S3C2410_GPF(7),        S3C2410_GPF7_EINT7,        3, "KEY4"}, /* K4 */
};

static irqreturn_t buttons_interrupt(int irq, void *dev_id)
{
        struct button_irq_desc *button_irqs = (struct button_irq_desc *)dev_id;
        int key_press = s3c2410_gpio_getpin(button_irqs->pin);

        if (key_press == 0)
        {
                mdelay(5);
                key_press = s3c2410_gpio_getpin(button_irqs->pin);
                if (key_press == 0)
                        key_values[button_irqs->number] = (button_irqs->number + 1);//这行代码是干什么用的
        }
        ev_press = 1;
        wake_up_interruptible(&button_waitq);

        return IRQ_RETVAL(IRQ_HANDLED);
}

论坛徽章:
0
2 [报告]
发表于 2011-10-19 21:31 |只看该作者
保存键值,供read函数返回user

论坛徽章:
0
3 [报告]
发表于 2011-10-20 11:43 |只看该作者
能详细一点吗,还是有些不懂

论坛徽章:
0
4 [报告]
发表于 2011-10-20 11:43 |只看该作者
能详细一点吗,还是有些不懂

论坛徽章:
0
5 [报告]
发表于 2011-11-02 23:19 |只看该作者
key_values[button_irqs->number] = (button_irqs->number + 1);//这行代码是干什么用的

button_irqs->number指的key_values []这个数组的index,就是哪个按键按下了,对应数组的这个元素 +1 ,比如第一个按下了,key_values [0]+=1;第一个按下了key_values [1]+=1;…………

你这下面应该还会有个read的函数  ,此函数使用 copy—to—user(),把你这里定义的key_values []的内容拷贝到用户空间里。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP