LINUX AM335X NMI中断使用方法

来源:互联网 发布:淘宝怎么找逆战代练 编辑:程序博客网 时间:2024/06/08 13:41

首先高清楚你要用什么中断,如果是用普通的GPIO去申请中断,那在网上百度就可以了,这里主要讲一下如何使用NMI中断(不可屏蔽中断),自己在这里走了很多弯路,希望可以帮助大家理解,有其他看法的大家在这里交流交流

首先

NMI中断号我们可以从数据手册上面查到是7,此时不能直接用request_irq(7,xxx,xxx,xxx,xxx)去申请,我目前解决的方法是配合设备数去完成:
首先、在设备数中加入如下设备节点


设备节点中的名字am335x_nmi是你自己随意取得,下面的

compatible = "自己设置、能够对应你的驱动中的就可以"如果用的是AM3352、那这里的中断号就是7

加上之后,驱动中一定要与compatible中对应,这样驱动才能匹配到我们的设备节点

接下来就是如何去申请了,首先
(1)用irq=platform_get_irq()去获得中断号(下面解释)
(2)用request_irq( )去申请中断
(3)接下来的步骤就跟平常的中断一样了

这里就有一个疑问了,NMI的中断号已经给出了是7,我们为什么还要申请?,我再程序中将申请到的中断打印出来是194,这就尴尬了,不一样,此时需要大家看一下下面的图:

这里写图片描述

你会发现他有两个地方代表着我们的中断,中断号是INTC后面的数,但我们内核认识的是前面的中断号,因此我们前面的irq=platform_get_irq()就是用来获得前面的中断号供内核认识,接下来的就是用request_irq()来申请就可以了,有什么问题,留言交流

问题

我这里是用来检测电量的,当电量低于一定的值时就中断报警,但这里导致,电量较低时,就不停的进入中断,有没有什么办法可以只中断一次,因为这里是NMI(不可屏蔽中断)确实还挺不好处理的,大家可以发表一下自己的看法,讨论讨论

下面贴上自己的代码
有需要的自己下载一下,交流交流
http://download.csdn.net/detail/lixiaojie123123/9874802