查看: 1183|回复: 1

[分享] Cortex-M3和A7中断向量表对比

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32017
    最后登录
    2024-4-9
    发表于 2022-3-14 17:52:20 | 显示全部楼层 |阅读模式
    Cortex-M3和A7中断向量表对比
    最近学习了Cortex A7内核的i.MX6ULL的中断部分,发现A7的中断向量表和M3的向量表不太一样。


    第一点:
    A7的中断向量表内容很少,只有8个中断向量。而M3的中断向量表内容很多,存放了每个外部中断。这其实是因为A7有FIQ或IRQ,当某一外设产生中断时首先进入FIQ或IRQ中断服务函数,然后软件再来识别具体是哪一个中断发生了。A7需要软件进一步识别才能执行具体中断服务函数,而M3硬件直接识别到了具体的中断服务函数。


    第二点:
    在以前接触的M3,M0,M4等内核单片机中,中断向量表都是通过汇编一个数据段,然后使用DCD指令把各个中断服务函数的入口地址填充到这个数据段。
    1. Vector Table Mapped to Address 0 at Reset
    2.                 AREA    RESET, DATA, READONLY
    3.                 EXPORT  __Vectors
    4.                 EXPORT  __Vectors_End
    5.                 EXPORT  __Vectors_Size

    6. __Vectors       DCD     __initial_sp               ; Top of Stack
    7.                 DCD     Reset_Handler              ; Reset Handler
    8.                 DCD     NMI_Handler                ; NMI Handler
    9.                 DCD     HardFault_Handler          ; Hard Fault Handler
    10.                 DCD     MemManage_Handler          ; MPU Fault Handler
    11.                 DCD     BusFault_Handler           ; Bus Fault Handler
    12.                 DCD     UsageFault_Handler         ; Usage Fault Handler
    13.                 DCD     0                          ; Reserved
    14.                 DCD     0                          ; Reserved
    15.                 DCD     0                          ; Reserved
    16.                 DCD     0                          ; Reserved
    17.                 DCD     SVC_Handler                ; SVCall Handler
    18.                 DCD     DebugMon_Handler           ; Debug Monitor Handler
    19.                 DCD     0                          ; Reserved
    20.                 DCD     PendSV_Handler             ; PendSV Handler
    21.                 DCD     SysTick_Handler            ; SysTick Handler

    22.                 ; External Interrupts
    23.                 DCD     WWDG_IRQHandler            ; Window Watchdog
    24.                 DCD     PVD_IRQHandler             ; PVD through EXTI Line detect
    复制代码
    而现在接触的A7中断向量表是通过跳转指令填充的。如下。
    1. _start:
    2.         ldr pc, =Reset_Handler       
    3.         ldr pc, =Undefined_Handler       
    4.         ldr pc, =SVC_Handler               
    5.         ldr pc, =PrefAbort_Handler       
    6.         ldr pc, =DataAbort_Handler       
    7.         ldr pc, =NotUsed_Handler       
    8.         ldr pc, =IRQ_Handler               
    9.         ldr pc, =FIQ_Handler
    复制代码
    此时我产生了一个疑问,M3的向量表能不能用跳转指令取而代之呢?亦或是A7的向量表能不能用中断服务函数的入口地址填充呢?经过一番折腾,是不行的。其实这在M3权威指南和A7编程参考手册有明确说明,如下。
    13.png
    14.png
    M3的中断向量表:存放的是各个中断服务函数的入口地址。
    A7的中断向量表:存放的是当中断发生时,响应对应中断服务函数的跳转指令。
    虽然都是来自ARM家庭的,但是这一点有本质的区别。






    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92618
    最后登录
    2024-4-24
    发表于 2022-3-14 21:39:57 | 显示全部楼层
    感谢管管的分享,学习到了~~
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 20:26 , Processed in 0.123533 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表