|
发表于 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
|
|
|
|
|
|
|
在4412中中断消抖是通过硬件实现的~不能像单片机中那样搞延时函数~
你去掉延时函数试试~
迅为电子是有中断实验手册和视频的~
另外还有好几篇中断的扩展文档 |
|
|
|
|
|
|
登录或注册
扫一扫关注迅为公众号
|