查看: 1427|回复: 2

[求助] 飞思卡尔Kinetis中断使用的小技巧

[复制链接]

该用户从未签到

4

主题

132

帖子

0

中级会员

Rank: 3Rank: 3

积分
418
最后登录
2018-12-14
发表于 2016-3-9 09:05:01 | 显示全部楼层 |阅读模式
本篇小技巧是我最近在编写USB驱动的时候发现的,觉着挺好玩的,这里就写出来跟大家分享一下,如果觉着有用就收着了,没用的话就算是娱乐一下吧!
       不知道有木有人有这种感脚,即如果你把技术当作一种专业的爱好,而不是养家糊口的工具,你往往会沉迷其中,往往会因为一点小收获、一点小成就、一点小发现而感到欣喜,对这一类人来说,收获知识所带来的自身素质的提高是最大的满足,他们把技术当作爱好,从中收获知识、优越感、自信等等,哈哈,不知道看到本篇的又中枪的没。好了,不扯这些了,进入正题吧:
       本篇是一种另类的使用方法,小技巧而已,不过相信一些人会喜欢。在以前我介绍过Kinetis的启动代码部分,在里面我曾经介绍过,Kinetis为了提高中断执行的速率,在启动代码部分把中断向量表copy了一份放到RAM里面,然后把向量中断寄存器重定位到该部分向量表,这样一定程度上缩短了Kinetis执行中断的时间,这部分的功能代码如下所示(在启动代码里可以找得到):
            /* Copy the vector table to RAM */
            if (__VECTOR_RAM != __VECTOR_TABLE)
            {
                for (n = 0; n < 0x410; n++)
                    __VECTOR_RAM[n] = __VECTOR_TABLE[n];
            }
            /* Point the VTOR to the new copy of the vector table */
            write_vtor((uint32)__VECTOR_RAM);

        既然Kinetis的中断执行机制是这样的,那么我们可以这样想,既然Kinetis执行中断服务的时候是根据发生中断的中断向量号查找到其在中断向量表的位置(即根据n找到_VECTOR_RAM[n]的内容)然后读出目标中断服务程序(即ISR)的地址然后跳到该地址执行目标中断服务函数,以PORTB口中断为例,那么我们在加载中断服务函数地址到向量表的时候完全可以不采用以前我说的那种方法(以前是#define VECTOR_104 PortB_ISR),而是采用如下这种方式,即我们直接更改RAM中向量表的内容(即把default_isr替代为我们自己定义的中断服务函数的地址,这样可以达到同样的目的):
            extern uint32 __VECTOR_RAM[];           //Get vector table that was copied to RAM
                            __VECTOR_RAM[104]=(uint32)PortB_ISR;      //replace ISR
      
       其实通篇说了这么多话,上面这两行代码才是本篇的目的所在,即核心技巧就在这里了,我想表达意思也很明白,就是不要小看这两行代码,虽然很简单,但它表达的是一种思想,即如果我们把内在的机制领悟透彻了,你就会明白,有些东西并不是一成不变的,在保证功能的时候,随心所欲的改变才说明你完全懂它了...
我知道答案 目前已有2人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2017-3-2 08:55
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    23

    主题

    193

    帖子

    0

    高级会员

    Rank: 4

    积分
    500
    最后登录
    2017-11-3
    发表于 2016-3-9 09:13:47 | 显示全部楼层
    支持一下
    1.png
    天气好
    回复

    使用道具 举报

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

    连续签到: 1 天

    [LV.9]以坛为家II

    27

    主题

    1万

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    6868
    最后登录
    2020-7-15
    发表于 2016-3-9 09:38:26 | 显示全部楼层
    谢谢分享,收藏了。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-22 06:52 , Processed in 0.090889 second(s), 24 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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