mdjukan Asked: 2025-04-16 06:43:05 +0800 CST2025-04-16 06:43:05 +0800 CST 2025-04-16 06:43:05 +0800 CST 当中断被禁用时如何处理中断? 772 假设我通过执行从用户模式切换到系统模式,通过设置中的位ecall来禁用中断。SIEsstatus0 当中断被禁用时,发生中断会发生什么? riscv 1 个回答 Voted Best Answer ytropek 2025-04-16T08:10:06+08:002025-04-16T08:10:06+08:00 有一个待处理SIP中断的概念,它通过寄存器的值(或MIP机器模式)来体现。该中断将一直处于待处理状态,直到全局中断使能位(SIE)恢复。此时,如果中断源仍然处于活动状态(或其待处理位保持设置),处理器将触发中断陷阱。 如果在中断禁用期间发生多个中断,则它们各自的待处理位都会被设置。RISC-V 硬件通常会为中断分配优先级,因此当您重新启用中断时,优先级最高的待处理中断将首先被执行。 因此,简而言之,中断是排队的,并且应该在 ecall处理程序退出后(使用sret或mret)按优先级顺序处理。 实际的传递行为可能取决于确切的中断源(例如,电平敏感与边沿触发),但通常,中断被锁存为待处理而不是被忽略。 还有一种选项是嵌套中断,即在处理程序仍在执行时处理中断,但这是一个相当不同且更复杂的故事。
有一个待处理
SIP
中断的概念,它通过寄存器的值(或MIP
机器模式)来体现。该中断将一直处于待处理状态,直到全局中断使能位(SIE
)恢复。此时,如果中断源仍然处于活动状态(或其待处理位保持设置),处理器将触发中断陷阱。如果在中断禁用期间发生多个中断,则它们各自的待处理位都会被设置。RISC-V 硬件通常会为中断分配优先级,因此当您重新启用中断时,优先级最高的待处理中断将首先被执行。
因此,简而言之,中断是排队的,并且应该在
ecall
处理程序退出后(使用sret
或mret
)按优先级顺序处理。实际的传递行为可能取决于确切的中断源(例如,电平敏感与边沿触发),但通常,中断被锁存为待处理而不是被忽略。
还有一种选项是嵌套中断,即在处理程序仍在执行时处理中断,但这是一个相当不同且更复杂的故事。