原帖 | Jack | 2024-10-08 01:29 | 👍0 | 阅读约1
老师,NVIC_SetPendingIRQ(IRQn)设置悬起和NVIC->STIR触发中断是一样的嘛?
NVIC_SetPendingIRQ()是CMSIS库提供的函数,用于设置指定中断的挂起位(Pending)(记住:是操作NVIC内部寄存器),它适用于所有支持的中断。调用 NVIC_SetPendingIRQ(IRQn) 会将指定的中断 IRQn 设置为挂起状态,这样中断控制器就会在适当的时机响应该中断。
NVIC->STIR这句话操作的是一个寄存器, (STIR,Software Trigger Interrupt Register),,用于触发一个软件中断。它只能用于触发外部中断。通过向 STIR 写入一个中断号,可以立即触发该中断。该方法的主要作用是模拟外部中断的行为。使用 STIR 可以在不修改挂起位的情况下直接触发中断。
区别:
1,NVIC_SetPendingIRQ() 是通过设置挂起(悬起)位来触发中断(能触发所有中断,除了内部异常),而 NVIC->STIR 是通过写寄存器来触发一个软中断。
应用场景:
如果你想在代码中模拟硬件中断的触发,可以使用 NVIC->STIR。
如果你需要更灵活的控制,例如对中断进行挂起和清除,可以使用 NVIC_SetPendingIRQ()。
相关笔记