天嵌 ARM开发社区

 找回密码
 注册
查看: 3504|回复: 1

linux下怎样清除外部中断问题?

[复制链接]
corebear 发表于 2011-1-14 12:55:31 | 显示全部楼层 |阅读模式
本帖最后由 corebear 于 2011-1-14 12:57 编辑

用按键申请外部中断控制LED灯产生了几个问题。
1,利用request_irq申请中断后。当发生中断时(即按键按下),就会产生中断,如果在中断程序中用disable_irq(),就会死机。只要是解决按键抖动问题。但是有些教程说是可地直接屏蔽的。这是什么原因?

2,为了解决上个问题。利用了INIT_WORK()工作队列进行底层调用,调用disable_irq()就会不死机。但是请问一下INIT_WORK()只有两个参数。都是用来绑定的。所以中断中怎样向底层传输参数?

3,最主要问题是,怎样清除中断标示?disable_irq(),只是暂时屏蔽中断而已。只是在屏蔽中断期间不产生反正。但是中断标至位还是置了1,消除按键抖动后,调用enable_irq()。又会自动响应原本的中断。而后面阻塞了的中断是不想要的。所以怎样在linux下清除中断标致位?
天嵌_support1 发表于 2011-1-15 12:23:44 | 显示全部楼层
本帖最后由 embedsky_lxt 于 2011-1-15 12:40 编辑

1# corebear

1,利用request_irq申请中断后。当发生中断时(即按键按下),就会产生中断,如果在中断程序中用disable_irq(),就会死机。只要是解决按键抖动问题。但是有些教程说是可地直接屏蔽的。这是什么原因?

答:你既然进入了中断处理程序,为何要在中断处理函数中禁用中断,矛盾所在

2,为了解决上个问题。利用了INIT_WORK()工作队列进行底层调用,调用disable_irq()就会不死机。但是请问一下INIT_WORK()只有两个参数。都是用来绑定的。所以中断中怎样向底层传输参数?

答:中断本来就是可以直接和底层工作。中断中向底层传递参数,你直接访问底层寄存器变量就行了

3,最主要问题是,怎样清除中断标示?disable_irq(),只是暂时屏蔽中断而已。只是在屏蔽中断期间不产生反正。但是中断标至位还是置了1,消除按键抖动后,调用enable_irq()。又会自动响应原本的中断。而后面阻塞了的中断是不想要的。所以怎样在linux下清除中断标致位?

答:建议你读一读芯片手册,网友。中断标志位是通过往该寄存器的对应位来写1清除的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-8-21 10:14 , Processed in 1.033243 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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