来自Cortex-R参考手册,可能不仅适用于Cortex-R
我的问题是,如果我自重置以来已经掩码了位异步中断屏蔽
由于异步中断的性质,它们可能会在处理其他中断时发生。如果在这种情况下异步中断生成新的异常,
r14_abt
和SPSR_abt
值将被覆盖。如果在数据被推送到内存堆栈之前发生这种情况,则有关第一个中断的状态信息将丢失。为了防止这种情况发生,CPSR包含一个掩码位,即A位,用于指示不能接受异步中断。当设置A位时,任何发生的异步中断都将被处理器挂起,直到清除A位并实际执行异常。A位在处理abort、IRQ或FIQ异常以及重置时自动设置。您只能在处理程序中清除A位,此时状态信息已经被堆栈到内存中,或者不再需要。
A
,那么我怎样才能知道是否有一个 异步中止 是待处理的呢?可以在不取消掩码 A
并引发异常的情况下清除待处理的外部中止吗?或者更一般地说,在重置后如何清除 A
位? 显然,在我的当前引导链中有一个待处理的外部中止(但仅在硬件上电后)。 我想启用外部中止,但似乎在异常代码中为第一个 外部中止 进行 特例处理 太过繁琐。