[资料分享与下载] ARM处理器中的异常、中断和向量表

[复制链接]
3095|3
 楼主| Roderman_z 发表于 2015-11-21 18:02 | 显示全部楼层 |阅读模式
当异常发生时,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

 楼主| Roderman_z 发表于 2015-11-21 18:02 | 显示全部楼层
  1. ; The modules in this file are included in the libraries, and may be replaced
  2. ; by any user-defined modules that define the PUBLIC symbol _program_start or
  3. ; a user defined start symbol.
  4. ; To override the cstartup defined in the library, simply add your modified
  5. ; version to the workbench project.
  6. ;
  7. ; The vector table is normally located at address 0.
  8. ; When debugging in RAM, it can be located in RAM, aligned to at least 2^6.
  9. ; The name "__vector_table" has special meaning for C-SPY:
  10. ; it is where the SP start value is found, and the NVIC vector
  11. ; table register (VTOR) is initialized to this address if != 0.
  12. ;
  13. ; Cortex-M version
  14. ;

  15.         MODULE  ?cstartup

  16.         ;; Forward declaration of sections.
  17.         SECTION CSTACKATA:NOROOT(3)

  18.         SECTION .intvec:CODE:NOROOT(2)

  19.         EXTERN  __iar_program_start
  20.         EXTERN  SystemInit
  21.         EXTERN  init_data_bss
  22.         PUBLIC  __vector_table
  23.         PUBLIC  __vector_table_0x1c
  24.         PUBLIC  __Vectors
  25.         PUBLIC  __Vectors_End
  26.         PUBLIC  __Vectors_Size

  27.         DATA

  28. __vector_table
  29.         DCD     sfe(CSTACK)
  30.         DCD     Reset_Handler

  31.         DCD     NMI_Handler                                   ;NMI Handler
  32.         DCD     HardFault_Handler                             ;Hard Fault Handler
  33.         DCD     0                                             ;Reserved
  34.         DCD     0                                             ;Reserved
  35.         DCD     0                                             ;Reserved
  36. __vector_table_0x1c
  37.         DCD     0                                             ;Reserved
  38.         DCD     0                                             ;Reserved
  39.         DCD     0                                             ;Reserved
  40.         DCD     0                                             ;Reserved
  41.         DCD     SVC_Handler                                   ;SVCall Handler
  42.         DCD     0                                             ;Reserved
  43.         DCD     0                                             ;Reserved
  44.         DCD     PendSV_Handler                                endSV Handler
  45.         DCD     SysTick_Handler                               ;SysTick Handler

  46.                                                               ;External Interrupts
  47.         DCD     DMA0_IRQHandler                               ;DMA channel 0 transfer complete
  48.         DCD     DMA1_IRQHandler                               ;DMA channel 1 transfer complete
  49.         DCD     DMA2_IRQHandler                               ;DMA channel 2 transfer complete
  50.         DCD     DMA3_IRQHandler                               ;DMA channel 3 transfer complete
  51.         DCD     Reserved20_IRQHandler                         ;Reserved interrupt
  52.         DCD     FTFA_IRQHandler                               ;Command complete and read collision
  53.         DCD     PMC_IRQHandler                                ;Low-voltage detect, low-voltage warning
  54.         DCD     LLWU_IRQHandler                               ;Low leakage wakeup
  55.         DCD     I2C0_IRQHandler                               ;I2C0 interrupt
  56.         DCD     I2C1_IRQHandler                               ;I2C1 interrupt
  57.         DCD     SPI0_IRQHandler                               ;SPI0 single interrupt vector for all sources
  58.         DCD     SPI1_IRQHandler                               ;SPI1 single interrupt vector for all sources
  59.         DCD     LPUART0_IRQHandler                            ;LPUART0 status and error
  60.         DCD     LPUART1_IRQHandler                            ;LPUART1 status and error
  61.         DCD     UART2_FLEXIO_IRQHandler                       ;UART2 or FLEXIO
  62.         DCD     ADC0_IRQHandler                               ;ADC0 interrupt
  63.         DCD     CMP0_IRQHandler                               ;CMP0 interrupt
  64.         DCD     TPM0_IRQHandler                               ;TPM0 single interrupt vector for all sources
  65.         DCD     TPM1_IRQHandler                               ;TPM1 single interrupt vector for all sources
  66.         DCD     TPM2_IRQHandler                               ;TPM2 single interrupt vector for all sources
  67.         DCD     RTC_IRQHandler                                ;RTC alarm
  68.         DCD     RTC_Seconds_IRQHandler                        ;RTC seconds
  69.         DCD     PIT_IRQHandler                                IT interrupt
  70.         DCD     Reserved39_IRQHandler                         ;Reserved interrupt
  71.         DCD     Reserved40_IRQHandler                         ;Reserved interrupt
  72.         DCD     Reserved41_IRQHandler                         ;Reserved interrupt
  73.         DCD     Reserved42_IRQHandler                         ;Reserved interrupt
  74.         DCD     Reserved43_IRQHandler                         ;Reserved interrupt
  75.         DCD     LPTMR0_IRQHandler                             ;LPTMR0 interrupt
  76.         DCD     Reserved45_IRQHandler                         ;Reserved interrupt
  77.         DCD     PORTA_IRQHandler                              ORTA Pin detect
  78.         DCD     PORTBCDE_IRQHandler                           ;Single interrupt vector for PORTB,PORTC,PORTD,PORTE
  79. __Vectors_End

  80.         SECTION FlashConfig:CODE
  81. __FlashConfig
  82.               DCD        0xFFFFFFFF
  83.               DCD        0xFFFFFFFF
  84.               DCD        0xFFFFFFFF
  85.               DCD        0xFFFF3DFE
  86. __FlashConfig_End

  87. __Vectors       EQU   __vector_table
  88. __Vectors_Size         EQU   __Vectors_End - __Vectors


  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;;
  91. ;; Default interrupt handlers.
  92. ;;
  93.         THUMB

  94.         PUBWEAK Reset_Handler
  95.         SECTION .text:CODE:REORDER:NOROOT(2)
  96. Reset_Handler
  97.         CPSID   I               ; Mask interrupts
  98.         LDR     R0, =SystemInit
  99.         BLX     R0
  100.         LDR     R0, =init_data_bss
  101.         BLX     R0
  102.         CPSIE   I               ; Unmask interrupts
  103.         LDR     R0, =__iar_program_start
  104.         BX      R0

  105.         PUBWEAK NMI_Handler
  106.         SECTION .text:CODE:REORDER:NOROOT(1)
  107. NMI_Handler
  108.         B .

  109.         PUBWEAK HardFault_Handler
  110.         SECTION .text:CODE:REORDER:NOROOT(1)
  111. HardFault_Handler
  112.         B .

  113.         PUBWEAK SVC_Handler
  114.         SECTION .text:CODE:REORDER:NOROOT(1)
  115. SVC_Handler
  116.         B .
 楼主| Roderman_z 发表于 2015-11-21 18:03 | 显示全部楼层
  1. PUBWEAK PendSV_Handler
  2.         SECTION .text:CODE:REORDER:NOROOT(1)
  3. PendSV_Handler
  4.         B .

  5.         PUBWEAK SysTick_Handler
  6.         SECTION .text:CODE:REORDER:NOROOT(1)
  7. SysTick_Handler
  8.         B .

  9.         PUBWEAK DMA0_IRQHandler
  10.         PUBWEAK DMA1_IRQHandler
  11.         PUBWEAK DMA2_IRQHandler
  12.         PUBWEAK DMA3_IRQHandler
  13.         PUBWEAK Reserved20_IRQHandler
  14.         PUBWEAK FTFA_IRQHandler
  15.         PUBWEAK PMC_IRQHandler
  16.         PUBWEAK LLWU_IRQHandler
  17.         PUBWEAK I2C0_IRQHandler
  18.         PUBWEAK I2C1_IRQHandler
  19.         PUBWEAK SPI0_IRQHandler
  20.         PUBWEAK SPI1_IRQHandler
  21.         PUBWEAK LPUART0_IRQHandler
  22.         PUBWEAK LPUART1_IRQHandler
  23.         PUBWEAK UART2_FLEXIO_IRQHandler
  24.         PUBWEAK ADC0_IRQHandler
  25.         PUBWEAK CMP0_IRQHandler
  26.         PUBWEAK TPM0_IRQHandler
  27.         PUBWEAK TPM1_IRQHandler
  28.         PUBWEAK TPM2_IRQHandler
  29.         PUBWEAK RTC_IRQHandler
  30.         PUBWEAK RTC_Seconds_IRQHandler
  31.         PUBWEAK PIT_IRQHandler
  32.         PUBWEAK Reserved39_IRQHandler
  33.         PUBWEAK Reserved40_IRQHandler
  34.         PUBWEAK Reserved41_IRQHandler
  35.         PUBWEAK Reserved42_IRQHandler
  36.         PUBWEAK Reserved43_IRQHandler
  37.         PUBWEAK LPTMR0_IRQHandler
  38.         PUBWEAK Reserved45_IRQHandler
  39.         PUBWEAK PORTA_IRQHandler
  40.         PUBWEAK PORTBCDE_IRQHandler
  41.         PUBWEAK DefaultISR
  42.         SECTION .text:CODE:REORDER:NOROOT(2)
  43. DMA0_IRQHandler
  44. DMA1_IRQHandler
  45. DMA2_IRQHandler
  46. DMA3_IRQHandler
  47. Reserved20_IRQHandler
  48. FTFA_IRQHandler
  49. PMC_IRQHandler
  50. LLWU_IRQHandler
  51. I2C0_IRQHandler
  52. I2C1_IRQHandler
  53. SPI0_IRQHandler
  54. SPI1_IRQHandler
  55. LPUART0_IRQHandler
  56. LPUART1_IRQHandler
  57. UART2_FLEXIO_IRQHandler
  58. ADC0_IRQHandler
  59. CMP0_IRQHandler
  60. TPM0_IRQHandler
  61. TPM1_IRQHandler
  62. TPM2_IRQHandler
  63. RTC_IRQHandler
  64. RTC_Seconds_IRQHandler
  65. PIT_IRQHandler
  66. Reserved39_IRQHandler
  67. Reserved40_IRQHandler
  68. Reserved41_IRQHandler
  69. Reserved42_IRQHandler
  70. Reserved43_IRQHandler
  71. LPTMR0_IRQHandler
  72. Reserved45_IRQHandler
  73. PORTA_IRQHandler
  74. PORTBCDE_IRQHandler
  75. DefaultISR
  76.         LDR R0, =DefaultISR
  77.         BX R0

  78.         END

春风的暖暖 发表于 2015-11-22 17:43 | 显示全部楼层
复位向量    处理器上电时第一条需要执行的指令的位置,该指令将跳转至初始化代码段,执行系统初始化功能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

354

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部