本文主要是介绍Linux 一个简单的中断信号实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.查看手册,学习中断处理图
流程:(次级源->开关)到 源挂起 到 开关 到 处理优先级 到 中断挂起标志 到 CPSR里面的开关(图中未展现) 最后cpu处理
此次我们先使用k1按键实现中断,即是eint8
2.此次仅涉及一个中断挂起,步骤较简单,有的寄存器未涉及处理。
寄存器挂起后,通过写1清除对应位(
-
硬件设计逻辑:
- 中断标志位通常由硬件自动设置为
1
,表示中断发生。硬件设计者选择通过写1
来清除中断标志位,因为这样可以避免在软件清除中断标志时意外地清除其他标志位的风险。这个方法使得中断控制逻辑更为简单和可靠。
- 中断标志位通常由硬件自动设置为
-
防止误操作:
- 如果通过写
0
清除中断标志,开发者可能在编写代码时不小心误写其他的0
,导致其他不该清除的标志位被误清除。通过写1
来清除特定位的设计可以避免这种误操作。
- 如果通过写
-
效率考虑:
- 有些硬件设计使用写
1
清除来减少指令周期,因为写1
清除通常只需一条指令,而写0
可能需要多条指令。
- 有些硬件设计使用写
-
与其他寄存器的行为一致:
- 在某些微控制器和处理器架构中,这种写
1
清除标志位的设计是一个普遍的模式,这样可以在设计和操作这些寄存器时保持一致性,降低使用上的复杂性。
- 在某些微控制器和处理器架构中,这种写
)
3.源挂起后面的开关(中断屏蔽寄存器INTMSK)设置为可服务。(enit8到enit23都在enit8_23里,属于其次级)
4.同样处理完成后写1清除中断挂INTPND)
5.通过中断偏移寄存器可以得知是否已经清除,方便后续操作
6.有的源挂起有自己的次级源挂起,同样需要先开启服务,处理后再关闭。
这种就类似小组成员有问题,要通过组长向上级发送,小组成员是次级源,组长是源,而没有次级源的直接就可以直接中断,相当于自己代表自己,不用向小组长请求。而本次操作的enit8_23,是源,其次级是enit8,这个才是案件的中断,既是后面的第三四张图,前两张是举例。
按键的寄存器,同样处理完要清除
7.当然要想使用按键还需要设置触发方式,此次使用下降沿触发,因为原本为高电平,按下后变为低电平,由高到低
8.前面的操作讲完,处理清除位时,要从前往后清除,因为如果先清除后面的,前面的又会持续发送中断信号,还有就是注意要在汇编里面先打开cpsr的开关(中断禁止位),否则接收不到中断
9.如果有需要还可以设置中断模式,此次就不需要了
这篇关于Linux 一个简单的中断信号实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!