LPC2000中断嵌套:ARM编译器与处理策略

需积分: 10 3 下载量 136 浏览量 更新于2024-09-16 收藏 32KB DOC 举报
LPC2000系列的中断嵌套设计是一项关键的系统级功能,特别是在处理多任务和实时性要求较高的应用中。ARM编译器对中断服务程序提供了特定的支持,使得中断服务程序可以用C语言编写,这增加了代码的灵活性和可读性。以下是对中断嵌套设计的详细解释: 1. **中断服务程序的编译器支持**: - Keil ARM编译器允许使用`__irq`关键字来创建中断服务程序(ISRs)。例如,`void IRQ_Handler__irq {...}` 这样的函数声明会自动进行特殊处理,如压栈工作寄存器(包括敏感寄存器)和CPSR,以及在函数结束时恢复它们。然而,这可能导致无法实现真正的中断嵌套,因为编译器不会保存SPECSR_irq寄存器。 2. **中断嵌套问题与LR_irq和SPSR_irq寄存器**: - 主要问题源于LR_irq寄存器,它通常保存着中断服务程序的返回地址。当中断服务程序在处理中断后再次启用中断并调用子程序时,如果子程序内部发生更高优先级的中断,LR_irq会被新的中断返回地址覆盖,从而破坏原始中断返回的路径。 - SPSR_irq,即程序状态寄存器,可能也会受到影响。在使用编译器关键字的情况下,它通常不会被保存,这意味着中断处理过程中的状态可能会丢失,导致中断嵌套处理的混乱。 3. **解决方法**: - 为了处理中断嵌套,开发人员需要采取额外措施,比如手动保存和恢复LR_irq和可能的其他寄存器。这可以通过在中断服务程序中添加适当的代码来完成,以确保在子程序调用和中断处理期间,这些关键寄存器的状态得到正确的管理。 - 另外,如果子函数调用是通过BL指令而非传统的保存和恢复LR的方式,开发者需要更加谨慎地处理中断返回地址的保存和替换,以防止数据混乱。 LPC2000系列中断嵌套设计的关键在于理解中断服务程序的编译器特性及其潜在问题,并通过适当的编程策略来确保中断处理的正确性和顺序。理解LR_irq和SPSR_irq寄存器的作用以及它们在中断嵌套情况下的行为至关重要,这对于编写稳定、高效的嵌套中断程序至关重要。