这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » ARM处理器中的异常、中断和向量表

共2条 1/1 1 跳转至

ARM处理器中的异常、中断和向量表

菜鸟
2015-11-19 15:36:28     打赏
当异常发生时,ARM处理器自动将PC更新为向量表中的中断入口地址。处理器挂起正常的指令执行,将流水线重新刷新,并开始装载异常处理指令进行执行。

向量表保存的一般为跳转地址。
Each vector table entry contains a form of branch instruction pointing to the start of a specific routine:

  • 复位向量    处理器上电时第一条需要执行的指令的位置,该指令将跳转至初始化代码段,执行系统初始化功能。
  • 未定义指令向量  当处理器不能解码一条指令时
  • 软件中断向量     当处理器执行SWI指令时,SWI指令常用于调用操作系统API,由用户态切换至内核态时。
  • 预取终止向量    当处理器试图从一个未授权的地址取指令时,实际的异常在流水线解码阶段发生。
  • 数据终止向量   当处理器试图从一个未授权的地址取数据时。与预取终止类似。
  • 中断请求向量   当外设发出请求并中断处理器正常执行流程时,仅在CPSR中I标志位未屏蔽时。
  • 快速中断请求向量  与中断请求类似,保留给需要快速响应的硬件外设,仅在CPSR中F标志位未屏蔽时。


示例:CMSIS Cortex-M0P Core Device Startup File,摘自KSDK 1.3

; The modules in this file are included in the libraries, and may be replaced
; by any user-defined modules that define the PUBLIC symbol _program_start or
; a user defined start symbol.
; To override the cstartup defined in the library, simply add your modified
; version to the workbench project.
;
; The vector table is normally located at address 0.
; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
; The name "__vector_table" has special meaning for C-SPY:
; it is where the SP start value is found, and the NVIC vector
; table register (VTOR) is initialized to this address if != 0.
;
; Cortex-M version
;

MODULE  ?cstartup;; Forward declaration of sections.
SECTION CSTACK ATA:NOROOT(3)

SECTION .intvec:CODE:NOROOT(2)

EXTERN  __iar_program_start
EXTERN  SystemInit
EXTERN  init_data_bss
PUBLIC  __vector_table
PUBLIC  __vector_table_0x1c
PUBLIC  __Vectors
PUBLIC  __Vectors_End
PUBLIC  __Vectors_Size

DATA

__vector_table
DCD     sfe(CSTACK)
DCD     Reset_Handler

DCD     NMI_Handler                                   ;NMI Handler
DCD     HardFault_Handler                             ;Hard Fault Handler
DCD     0                                             ;Reserved
DCD     0                                             ;Reserved
DCD     0                                             ;Reserved
__vector_table_0x1c
DCD     0                                             ;Reserved
DCD     0                                             ;Reserved
DCD     0                                             ;Reserved
DCD     0                                             ;Reserved
DCD     SVC_Handler                                   ;SVCall Handler
DCD     0                                             ;Reserved
DCD     0                                             ;Reserved
DCD     PendSV_Handler endSV Handler
DCD     SysTick_Handler                               ;SysTick Handler

;External Interrupts
DCD     DMA0_IRQHandler                               ;DMA channel 0 transfer complete
DCD     DMA1_IRQHandler                               ;DMA channel 1 transfer complete
DCD     DMA2_IRQHandler                               ;DMA channel 2 transfer complete
DCD     DMA3_IRQHandler                               ;DMA channel 3 transfer complete
DCD     Reserved20_IRQHandler                         ;Reserved interrupt
DCD     FTFA_IRQHandler                               ;Command complete and read collision
DCD     PMC_IRQHandler                                ;Low-voltage detect, low-voltage warning
DCD     LLWU_IRQHandler                               ;Low leakage wakeup
DCD     I2C0_IRQHandler                               ;I2C0 interrupt
DCD     I2C1_IRQHandler                               ;I2C1 interrupt
DCD     SPI0_IRQHandler                               ;SPI0 single interrupt vector for all sources
DCD     SPI1_IRQHandler                               ;SPI1 single interrupt vector for all sources
DCD     LPUART0_IRQHandler                            ;LPUART0 status and error
DCD     LPUART1_IRQHandler                            ;LPUART1 status and error
DCD     UART2_FLEXIO_IRQHandler                       ;UART2 or FLEXIO
DCD     ADC0_IRQHandler                               ;ADC0 interrupt
DCD     CMP0_IRQHandler                               ;CMP0 interrupt
DCD     TPM0_IRQHandler                               ;TPM0 single interrupt vector for all sources
DCD     TPM1_IRQHandler                               ;TPM1 single interrupt vector for all sources
DCD     TPM2_IRQHandler                               ;TPM2 single interrupt vector for all sources
DCD     RTC_IRQHandler                                ;RTC alarm
DCD     RTC_Seconds_IRQHandler                        ;RTC seconds
DCD     PIT_IRQHandler IT interrupt
DCD     Reserved39_IRQHandler                         ;Reserved interrupt
DCD     Reserved40_IRQHandler                         ;Reserved interrupt
DCD     Reserved41_IRQHandler                         ;Reserved interrupt
DCD     Reserved42_IRQHandler                         ;Reserved interrupt
DCD     Reserved43_IRQHandler                         ;Reserved interrupt
DCD     LPTMR0_IRQHandler                             ;LPTMR0 interrupt
DCD     Reserved45_IRQHandler                         ;Reserved interrupt
DCD     PORTA_IRQHandler ORTA Pin detect
DCD     PORTBCDE_IRQHandler                           ;Single interrupt vector for PORTB,PORTC,PORTD,PORTE
__Vectors_End

SECTION FlashConfig:CODE
__FlashConfig
DCD        0xFFFFFFFF
DCD        0xFFFFFFFF
DCD        0xFFFFFFFF
DCD        0xFFFF3DFE
__FlashConfig_End

__Vectors       EQU   __vector_table
__Vectors_Size         EQU   __Vectors_End - __Vectors


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Default interrupt handlers.
;;
THUMB

PUBWEAK Reset_Handler
SECTION .text:CODE:REORDER:NOROOT(2)
Reset_Handler
CPSID   I               ; Mask interrupts
LDR     R0, =SystemInit
BLX     R0
LDR     R0, =init_data_bss
BLX     R0
CPSIE   I               ; Unmask interrupts
LDR     R0, =__iar_program_start
BX      R0

PUBWEAK NMI_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
NMI_Handler
B .

PUBWEAK HardFault_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
HardFault_Handler
B .

PUBWEAK SVC_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
SVC_Handler
B .

PUBWEAK PendSV_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
PendSV_Handler
B .

PUBWEAK SysTick_Handler
SECTION .text:CODE:REORDER:NOROOT(1)
SysTick_Handler
B .

PUBWEAK DMA0_IRQHandler
PUBWEAK DMA1_IRQHandler
PUBWEAK DMA2_IRQHandler
PUBWEAK DMA3_IRQHandler
PUBWEAK Reserved20_IRQHandler
PUBWEAK FTFA_IRQHandler
PUBWEAK PMC_IRQHandler
PUBWEAK LLWU_IRQHandler
PUBWEAK I2C0_IRQHandler
PUBWEAK I2C1_IRQHandler
PUBWEAK SPI0_IRQHandler
PUBWEAK SPI1_IRQHandler
PUBWEAK LPUART0_IRQHandler
PUBWEAK LPUART1_IRQHandler
PUBWEAK UART2_FLEXIO_IRQHandler
PUBWEAK ADC0_IRQHandler
PUBWEAK CMP0_IRQHandler
PUBWEAK TPM0_IRQHandler
PUBWEAK TPM1_IRQHandler
PUBWEAK TPM2_IRQHandler
PUBWEAK RTC_IRQHandler
PUBWEAK RTC_Seconds_IRQHandler
PUBWEAK PIT_IRQHandler
PUBWEAK Reserved39_IRQHandler
PUBWEAK Reserved40_IRQHandler
PUBWEAK Reserved41_IRQHandler
PUBWEAK Reserved42_IRQHandler
PUBWEAK Reserved43_IRQHandler
PUBWEAK LPTMR0_IRQHandler
PUBWEAK Reserved45_IRQHandler
PUBWEAK PORTA_IRQHandler
PUBWEAK PORTBCDE_IRQHandler
PUBWEAK DefaultISR
SECTION .text:CODE:REORDER:NOROOT(2)
DMA0_IRQHandler
DMA1_IRQHandler
DMA2_IRQHandler
DMA3_IRQHandler
Reserved20_IRQHandler
FTFA_IRQHandler
PMC_IRQHandler
LLWU_IRQHandler
I2C0_IRQHandler
I2C1_IRQHandler
SPI0_IRQHandler
SPI1_IRQHandler
LPUART0_IRQHandler
LPUART1_IRQHandler
UART2_FLEXIO_IRQHandler
ADC0_IRQHandler
CMP0_IRQHandler
TPM0_IRQHandler
TPM1_IRQHandler
TPM2_IRQHandler
RTC_IRQHandler
RTC_Seconds_IRQHandler
PIT_IRQHandler
Reserved39_IRQHandler
Reserved40_IRQHandler
Reserved41_IRQHandler
Reserved42_IRQHandler
Reserved43_IRQHandler
LPTMR0_IRQHandler
Reserved45_IRQHandler
PORTA_IRQHandler
PORTBCDE_IRQHandler
DefaultISR
LDR R0, =DefaultISR
BX R0

END





院士
2015-11-19 16:49:33     打赏
2楼
好长好长

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]