为什么ARM中有2个寄存器用于启用/禁用中断,而不是1个?
最近有人向我提出了这个问题。我正在研究ARM架构,我也尝试过研究它,但我觉得我没有得到正确的答案 我的想法是,关键原因是为了避免干扰正在进行的中断,我们使用set enable寄存器启用所有中断,使用clear enable寄存器禁用所有中断 这是正确的理由吗?这背后有更深刻的解释吗?是否有文件解释此设计决策为什么ARM中有2个寄存器用于启用/禁用中断,而不是1个?,arm,interrupt,interrupt-handling,Arm,Interrupt,Interrupt Handling,最近有人向我提出了这个问题。我正在研究ARM架构,我也尝试过研究它,但我觉得我没有得到正确的答案 我的想法是,关键原因是为了避免干扰正在进行的中断,我们使用set enable寄存器启用所有中断,使用clear enable寄存器禁用所有中断 这是正确的理由吗?这背后有更深刻的解释吗?是否有文件解释此设计决策 编辑:对不起,我正在使用的芯片是Cortex M4虽然我无法说出原始设计中的想法,但我的观察是,这使得确保线程安全变得更容易 假设只有一个寄存器可用于启用和禁用中断;在寄存器中设置一个位将
编辑:对不起,我正在使用的芯片是Cortex M4虽然我无法说出原始设计中的想法,但我的观察是,这使得确保线程安全变得更容易 假设只有一个寄存器可用于启用和禁用中断;在寄存器中设置一个位将启用相应的中断,而清除该位将禁用它 这将是一个读-修改-写操作,除非软件小心防范(例如,通过在访问寄存器之前禁用所有中断,或使用同步原语),否则很容易发生错误 与此相比,单独的设置/清除寄存器根本不需要软件同步。任何线程都可以设置或清除单个位,而不会干扰其他位
单独的设置/清除寄存器也常用于GPIO,以允许多个线程自由修改I/O状态。哪些寄存器,以及哪些体系结构?就A级/遗留体系结构而言,一个寄存器中只有两个位(一个用于禁用每种类型的中断),就是这样。M-class架构有点不同,它也包含了实际的中断控制器本身,但本质上仍然只是PRIMASK。或者在控制CPU是否发生中断与它们是否首先生成之间是否存在一些混淆?