linux 内核中清除中断标志位怎么做?

83 views
Skip to first unread message

chengdong diao

unread,
May 18, 2012, 6:31:42 AM5/18/12
to sh...@googlegroups.com

是一个gpio口上的中断。当中断到来时,需要进行一些数据处理,在处理的时候,用disable_irq_nosync()
禁止中断了,但是这个时候,gpio上如果有中断信号的话,还是会存在单片机的中断寄存器里。
当我处理完数据,enable_irq()的时候,因为中断寄存器里有数据,所以马上就触发一次中断程序了。

我现在想做的是,当处理程序时,io口上的中断信号要丢弃,我是这么做的,enable_irq()之前,清空中断寄存器里的数据,
可是这样似乎还是不行,不知道内核里哪里已经把这个信号存进去了?
请大侠们赐教。

Zhen Xin

unread,
May 18, 2012, 10:48:22 AM5/18/12
to sh...@googlegroups.com
你GPIO中断是电平触发还是边缘触发?

--
https://fedoraproject.org/wiki/User:Lonestar

chengdong diao

unread,
May 20, 2012, 9:45:21 PM5/20/12
to sh...@googlegroups.com
边沿触发的。

Peter Chen

unread,
May 21, 2012, 12:36:17 AM5/21/12
to sh...@googlegroups.com
2012/5/21 chengdong diao <diaoch...@gmail.com>:

> 边沿触发的。
>
> 在 2012年5月18日 下午10:48,Zhen Xin <lone...@fedoraproject.org>写道:
>
>> 你GPIO中断是电平触发还是边缘触发?
>>
>> 在 2012年5月18日 下午6:31,chengdong diao <diaoch...@gmail.com> 写道:
>> >
>> > 是一个gpio口上的中断。当中断到来时,需要进行一些数据处理,在处理的时候,用disable_irq_nosync()
>> > 禁止中断了,但是这个时候,gpio上如果有中断信号的话,还是会存在单片机的中断寄存器里。
>> > 当我处理完数据,enable_irq()的时候,因为中断寄存器里有数据,所以马上就触发一次中断程序了。
>> >
>> > 我现在想做的是,当处理程序时,io口上的中断信号要丢弃,我是这么做的,enable_irq()之前,清空中断寄存器里的数据,
>> > 可是这样似乎还是不行,不知道内核里哪里已经把这个信号存进去了?
可不可能那时候中断又产生了?

>> > 请大侠们赐教。
>>
>>
>>
>> --
>> https://fedoraproject.org/wiki/User:Lonestar
>
>

--
BR,
Peter Chen

chengdong diao

unread,
May 21, 2012, 1:09:08 AM5/21/12
to sh...@googlegroups.com
那时候中断没有产生。

我现在打算换个方式来做了。打算在中断里设置一些flag信息,然后用内核线程轮询flag,这样可以将不需要的中断去掉。
Reply all
Reply to author
Forward
0 new messages