查看: 3799|回复: 4

[分享] Kinetis中断使用的小技巧

[复制链接]

该用户从未签到

40

主题

212

帖子

0

高级会员

Rank: 4

积分
618
最后登录
1970-1-1
发表于 2016-7-15 10:14:57 | 显示全部楼层 |阅读模式
Kinetis为了提高中断执行的速率,在启动代码部分把中断向量表copy了一份放到RAM里面,然后把向量中断寄存器重定位到该部分向量表,这样一定程度上缩短了Kinetis执行中断的时间,这部分的功能代码如下所示(在启动代码里可以找得到):

  1. /* Copy the vector table to RAM */

  2. if (__VECTOR_RAM != __VECTOR_TABLE)

  3. {

  4. for (n = 0; n < 0x410; n++)

  5. __VECTOR_RAM[n] = __VECTOR_TABLE[n];

  6. }

  7. /* Point the VTOR to the new copy of the vector table */

  8. write_vtor((uint32)__VECTOR_RAM);
复制代码



既然Kinetis的中断执行机制是这样的,那么我们可以这样想,既然Kinetis执行中断服务的时候是根据发生中断的中断向量号查找到其在中断向量表的位置(即根据n找到_VECTOR_RAM[n]的内容)然后读出目标中断服务程序(即ISR)的地址然后跳到该地址执行目标中断服务函数,以PORTB口中断为例,那么我们在加载中断服务函数地址到向量表的时候完全可以不采用以前我说的那种方法(以前是#define VECTOR_104 PortB_ISR),而是采用如下这种方式,即我们直接更改RAM中向量表的内容(即把default_isr替代为我们自己定义的中断服务函数的地址,这样可以达到同样的目的):

  1. extern uint32 __VECTOR_RAM[]; //Get vector table that was copied to RAM

  2. __VECTOR_RAM[104]=(uint32)PortB_ISR; //replace ISR
复制代码


呵呵,其实通篇说了这么多话,上面这两行代码才是本篇的目的所在,即核心技巧就在这里了,我想表达意思也很明白,就是不要小看这两行代码,虽然很简单,但它表达的是一种思想,即如果我们把内在的机制领悟透彻了,你就会明白,有些东西并不是一成不变的,在保证功能的时候,随心所欲的改变才说明你完全懂它了...





回复

使用道具 举报

  • TA的每日心情
    开心
    2020-1-12 00:23
  • 签到天数: 745 天

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-7-15 12:03:07 | 显示全部楼层
    学习了!
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    该用户从未签到

    715

    主题

    6374

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    25234
    最后登录
    2025-8-20
    发表于 2016-7-15 15:13:54 | 显示全部楼层
    谢谢楼主分享!!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    35

    主题

    356

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    3295
    最后登录
    2023-6-23
    发表于 2016-7-18 16:59:24 | 显示全部楼层
    “Kinetis为了提高中断执行的速率,在启动代码部分把中断向量表copy了一份放到RAM里面,然后把向量中断寄存器重定位到该部分向量表,这样一定程度上缩短了Kinetis执行中断的时间

    这个结论(上面下划线部分)是怎么得出来的?好像没有这种说法呀
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2017-1-16 12:20
  • 签到天数: 16 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    12

    主题

    653

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1667
    最后登录
    2022-5-2
    发表于 2016-7-21 08:48:51 | 显示全部楼层
    这个不错啊            
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-21 13:14 , Processed in 0.087581 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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