好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

浅谈kinetis的中断.pdf

3页
  • 卖家[上传人]:wt****50
  • 文档编号:37095156
  • 上传时间:2018-04-07
  • 文档格式:PDF
  • 文档大小:102.49KB
  • / 3 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • Kinetis-2015 朝花夕拾系列(十二) 浅谈 Kinetis 中断 中断机制是学习任何一款单片机中必须要掌握的,编写相应的中断服务程序也是最基本的要求之一了Kinetis 的中断机制是 Cortex-M4 核的机制,Cortex-M4 引入了嵌套向量中断控制器(NVIC)来管理其中断功能,其主要的特点包括: ? 可嵌套中断支持; ? 向量中断支持,Cortex-M 系列通过查询中断向量表找到相应的 ISR 入口,并跳转执行; ? 动态优先级调整,即支持软件运行时改变中断优先级; ? 中断可屏蔽,支持条件性屏蔽即只屏蔽优先级低于某个阈值的中断,当然也可以屏蔽全部中断了; Cortex-M 核的 NVIC 最多支持 200 多个中断(包括系统异常 16 个和外部中断 240 个),其中前 16 个中断为系统中断这 16 个中断可以通过对 Cortex-M4 内核的调用来完成相关控制 首先介绍飞思卡尔 Kinetis 系列中断特点: ? 低中断延迟,从中断发生到进入中断服务程序最多 12 时钟周期; ? 最多 120 个中断,包含 16 个核中断和剩余的外部 IRQ 中断; ? 最多 16 个可编程优先级; ? 动态改变优先级; ? 可重定位向量表,通过写 SCB_VTOR 寄存器。

      NVIC 框图: ? 使能外设的中断功能,使之与 NVIC 的中断输入连接; ? 清除已经挂号发生的中断,写 NVICICPRx 寄存器; ? 使能相应 IRQ 中断号在 NVIC 的中断功能,写 NVICISERx 寄存器; ? 配置中断优先级,写 NVICIPx; ? 写相应的中断服务程序(ISR); ? 使能全局中断 EnableInterrupts; 具体举例: ? 使能相应外设的中断: ENABLE_EOR_INT; /* 使能 TSI 越界中断 */ ? 根据 TSI 的 IRQ 中断号,清除已经发生的 TSI 中断事件,并且使能 TSI 中断功能,首先在 K60 的datasheet 或者直接到其头文件开始处即可找到中断向量表,查到 TSI 的 IRQ 中断号(IRQ 号=中断向量表号-16(即前 16 个核中断,它们不是 IRQ 中断)): 然后利用 ARM 核自带的 API 函数使能 TSI 的 IRQ 中断,如下 enable_irq(83); /* 使能 TSI 的 IRQ 中断 */ 该函数的具体内容如下,注意每个 NVICCPRx 和 NVICISERx 都是 32 字节对齐的。

      void enable_irq (int irq) { int div; div = irq/32; switch (div) { case 0x0: NVICICPR0 |= 1 << (irq%32); NVICISER0 |= 1 << (irq%32); break; case 0x1: NVICICPR1 |= 1 << (irq%32); NVICISER1 |= 1 << (irq%32); break; case 0x2: NVICICPR2 |= 1 << (irq%32); NVICISER2 |= 1 << (irq%32); break; } } (3)配置优先级, set_irq_priority (83,5); /* 设置 TSI 中断优先级为 5,注意越小优先级越大 */ (4)编写相应的中断服务函数 /******************************************************************************** **Routine: TSI_isr **Description: TSI 模块,out of Range 中断服务程序,中断服务号为 99,IRQ 为 83 **Notes: ********************************************************************************/ void TSI_isr(void); 然后在写完该中断服务函数之后,我们需要把该中断函数地址映射到中断向量表里面,所以找到 isr.h 文件打开,设置如下; #undef VECTOR_099 /* 取消原来默认的宏定义 */ #define VECTOR_099 TSI_isr /* 重定义中断服务函数名为 VECTOR_99*/ (5)使能全局中断 EnableInterrupts; /* 其宏定义为 CPSIE i,即设置特殊功能寄存器 */ 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.