搜索

1

主题

1

帖子

20

积分

新手上路

Rank: 1

积分
20
发表于 2016-2-26 10:27:07 12515 浏览 1 回复

中断延时函数请教



   对于mdelay()和msleep()这两个函数。我在中断按键里做了小小的修改但是出现了问题。在驱动中的中断处理函数中我首先使用了系统的延时mdelay()。这个时候将修改后编译生成的.ko文件移到开发板上。使用“insmod”命令是可以用的,我使用的是精英开发板,我做的中断处理函数是这样的:

static irqreturn_t eint9_interrupt(int irq, void *dev_id) {//当检测到按键中断的时候就进入中断处理函数
                if(gpio_get_value(EXYNOS4_GPX1(1))==0){//当检测到有按键被摁下的时候
                        mdelay(100);//使用延时函数延时100ms
                        if(gpio_get_value(EXYNOS4_GPX1(1))==0){  //再检测一下是否被摁下,相当于是试验一                                                                      下键盘软件消抖
                                gpio_set_value(EXYNOS4_GPL2(0), 0);  //这个时候可控制LED灯灭
                       
                                gpio_set_value(EXYNOS4_GPD0(0), 1);  //蜂鸣器响
                                mdelay(300);//延时300ms
                                gpio_set_value(EXYNOS4_GPD0(0), 0);  //蜂鸣器不响       
                        }


                }
        printk("%s(%d)\n", __FUNCTION__, __LINE__);


        return IRQ_HANDLED;
}




   这个时候是可以的键盘消抖起了一定的作用。
   我一直对mdelay()和msleep()这两个函数的使用不太明确,而且哪个是可以使用在驱动里边的,那个是使用在应用里边的不太明确。所以我决定试一下。我把它们换成msleep()。再编译,移到开发板,这个时候重新加载驱动的.ko文件。这时候就出问题了。当我摁下按键的时候系统好像就崩溃了。
    不多说了上图,,同时求解。















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

48

主题

604

帖子

1923

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1923
发表于 2016-2-26 10:53:46
在4412中中断消抖是通过硬件实现的~不能像单片机中那样搞延时函数~
你去掉延时函数试试~
迅为电子是有中断实验手册和视频的~
另外还有好几篇中断的扩展文档
回复 点赞

使用道具 举报

返回列表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

登录或注册

官方客服

QQ:2551456065

官方QQ群

195631883

扫一扫关注迅为公众号

群号652692981

 
快速回复 返回顶部 返回列表