首页 > 其他分享 >【中断与异常】ARM Cortex-M的中断与异常

【中断与异常】ARM Cortex-M的中断与异常

时间:2022-12-27 14:35:49浏览次数:65  
标签:中断 DCD Handler 处理器 Cortex 异常 ARM NMI

ARM Cortex-M系列处理器与以往的ARM7系列处理器不同,以往中断控制器由IP授权的各家芯片厂商自行定义,而ARMCortex-M则把中断控制器统一,命名为NVIC(嵌套中断向量控制)。

NVIC支持的功能

当一个中断触发并且系统进行响应时,处理器硬件会将当前运行的部分上下文寄存器自动压入中断栈中,这部分寄存器包括:PSR,R0,R1,R2,R3以及R12寄存器。

当系统正在服务一个中断时,如果有一个更高优先级的中断触发,那么处理器同样会打断当前运行的中断服务例程,然后把老的中断服务例程上下文的PSR,R0,R1,R2,R3和R12寄存器自动保存到中断栈中。

这些部分上下文寄存器保存到中断栈的行为完全是硬件行为。

另外Cortex-M系列处理器上,所有中断都采用中断向量表的方式进行处理,当一个中断触发时,处理器将直接判定是哪个中断源,然后直接跳转到相应的固定位置进行处理。在ARM7,ARM9中,一般是先跳转进入IRQ入口,然后再由软件进行判断是哪个中断源触发,获得了相对的中断服务例程入口地址后,再进行后续的中断的处理。

ARM7、ARM9的好处在于,所有中断它们都有统一的入口地址,便于OS的统一管理。而Cortex-M系列处理器恰恰相反,每个中断服务例程必须排列在一些放在统一的地址上。

中断向量表一般由一个数组定义。在STM32上,中断向量表如下:

__Vectors       DCD     __initial_sp            ; Top of Stack
                DCD     Reset_Handler           ; Reset Handler
                DCD     NMI_Handler             ; NMI Handler
                DCD     HardFault_Handler       ; Hard Fault Handler
                DCD     MemManage_Handler       ; MPU Fault Handler
                DCD     BusFault_Handler        ; Bus Fault Handler
                DCD     UsageFault_Handler      ; Usage Fault Handler
                DCD     0                           ; Reserved
                DCD     0                           ; Reserved
                DCD     0                           ; Reserved
                DCD     0                           ; Reserved
                DCD     SVC_Handler             ; SVCall Handler
                DCD     DebugMon_Handler        ; Debug Monitor Handler
                DCD     0                           ; Reserved
                DCD     PendSV_Handler          ; PendSV Handler
                DCD     SysTick_Handler         ; SysTick Handler
 
… … 
 
NMI_Handler             PROC
                EXPORT NMI_Handler              [WEAK]
                B       .
                ENDP
HardFault_Handler   PROC
                EXPORT HardFault_Handler        [WEAK]
                B       .
                ENDP
 
… … 

[WEAK]标识,是符号弱化标识,在[WEAK]前面的符号如NMI_Handler、HardFault_Handler)将被执行弱化处理,如果整个代码在链接时遇到了名称相同的符号(例如与NMI_Handler相同名称的函数),那么代码将使用未被弱化定义的符号(与NMI_Handler相同名称的函数),而与弱化符号相关的代码将被自动丢弃。












转载文章:
https://www.bookstack.cn/read/rtthread-manual-doc/8.5.md

标签:中断,DCD,Handler,处理器,Cortex,异常,ARM,NMI
From: https://www.cnblogs.com/Wangzx000/p/17007707.html

相关文章