为什么 ARM 中有 2 个寄存器用于启用/禁用中断,而不是 1 个?

fgb*_*ist 5 arm interrupt interrupt-handling

我最近被问到这个问题。我正在研究ARM架构,并且尝试过研究它,但我觉得我没有得到正确的答案。

我的想法是,关键原因是为了避免干扰正在进行的中断,我们使用设置启用寄存器来启用所有中断,使用清除启用寄存器来禁用所有中断。

这是正确的理由吗?这背后是否有更深层次的解释?有一些文件解释这个设计决策吗?

编辑:抱歉,我正在使用的芯片是 Cortex M4

Car*_*sen 3

虽然我无法说出原始设计中的想法,但我的观察是,这使得确保线程安全变得更容易。

假设只有一个寄存器可用于启用和禁用中断;在寄存器中设置一个位将启用相应的中断,而清除该位将禁用它。

这将是一个读-修改-写操作,容易出现竞争条件,除非软件仔细防范它(例如,通过在访问寄存器之前禁用所有中断,或使用同步原语)。

将此与单独的设置/清除寄存器进行对比,后者根本不需要软件同步。任何线程都可以设置或清除各个位,而不会干扰其他位。

单独的设置/清除寄存器也常用于 GPIO 等,以允许多个线程自由修改 I/O 状态。