Kinetis中断使用技巧

分享到:

Kinetis为了提高中断执行的速率,在启动代码部分把中断向量表copy了一份放到RAM里面,然后把向量中断寄存器重定位到该部分向量表,这样一定程度上缩短了Kinetis执行中断的时间,这部分的功能代码如下所示(在启动代码里可以找得到):
 

  1. /* Copy the vector table to RAM */
  2.  
  3. if (__VECTOR_RAM != __VECTOR_TABLE)
  4.  
  5. {
  6.  
  7. for (n = 0; n < 0x410; n++)
  8.  
  9. __VECTOR_RAM[n] = __VECTOR_TABLE[n];
  10.  
  11. }
  12.  
  13. /* Point the VTOR to the new copy of the vector table */
  14.  
  15. 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.  
  3. __VECTOR_RAM[104]=(uint32)PortB_ISR; //replace ISR



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

 

更多恩智浦(NXP)及恩智浦技术教程请关注:
NXP中文官方:https://www.nxp.com/zh-Hans/
NXP中文技术论坛:https://www.nxpic.org/

 

继续阅读
Kinetis启动分析

在对Kinetis 系列MCU开发应用程序或编写硬件模块的驱动程序之前,我们需要对其启动流程有所了解,对于像ARM这类的复杂的32位片上系统来说,在启动代码部分,需要通过软件对一些硬件资源进行配置和设置一定的工作状态,这样我们就不得不去认真的去了解它了。

车联网的技术要点在哪?

现在的汽车变得愈来愈聪清楚明了,启用停车体系则汽车能够自立探求停车位,启用自顺应巡航体系则汽车可主动调速跟车行驶,但是咱们在享用汽车智能化带给咱们便捷和温馨的同时,也面对智能汽车所带来的平安成绩,那末智能汽车平安若何分类?黑客若何进击智能汽车?车联网平安技巧若何结构?

恩智浦发布MCUXpresso软件和工具,为其强大的微控制器产品组合提供统一的开发支持

恩智浦半导体NXP Semiconductors N.V.(纳斯达克代码:NXPI)今天发布MCUXpresso软件和工具,这是一款全新的Kinetis和LPC微控制器(MCU)通用工具包,旨在为嵌入式设计人员提供高品质的工具,实现无缝协同工作,并配合ARM® Cortex®-M生态系统的最佳工具,从而大幅减少设计人员开发工作量、时间和成本。

当OpenSDA遭遇WIN10

目前使用Windows10操作系统的工程师越来越多,在使用Kinetis的FRDM板子OpenSDA时会碰到无法被系统识别的问题。如何能在Win10系统中继续使用FRDM板子上的OpenSD。

MAPS-KS22教程二:定时器中断

关于KS22的定时器,本来想做个PWM闪烁灯,看了看连接连接LED的接口,没有带定时器功能的,时间有限,先学习个定时器中断,闪个灯吧,前两篇先整简单点,想想这灯可真是立大功了!

精彩活动