欢迎来到天天文库
浏览记录
ID:38157233
大小:102.49 KB
页数:3页
时间:2019-05-28
《浅谈Kinetis的中断》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Kinetis-2015朝花夕拾系列(十二)浅谈Kinetis中断中断机制是学习任何一款单片机中必须要掌握的,编写相应的中断服务程序也是最基本的要求之一了。Kinetis的中断机制是Cortex-M4核的机制,Cortex-M4引入了嵌套向量中断控制器(NVIC)来管理其中断功能,其主要的特点包括:可嵌套中断支持;向量中断支持,Cortex-M系列通过查询中断向量表找到相应的ISR入口,并跳转执行;动态优先级调整,即支持软件运行时改变中断优先级;中断可屏蔽,支持条件性屏蔽即只屏蔽优先级低于某个
2、阈值的中断,当然也可以屏蔽全部中断了;Cortex-M核的NVIC最多支持200多个中断(包括系统异常16个和外部中断240个),其中前16个中断为系统中断。这16个中断可以通过对Cortex-M4内核的调用来完成相关控制。首先介绍飞思卡尔Kinetis系列中断特点:低中断延迟,从中断发生到进入中断服务程序最多12时钟周期;最多120个中断,包含16个核中断和剩余的外部IRQ中断;最多16个可编程优先级;动态改变优先级;可重定位向量表,通过写SCB_VTOR寄存器。NVIC框图:使能外设的
3、中断功能,使之与NVIC的中断输入连接;清除已经挂号发生的中断,写NVICICPRx寄存器;使能相应IRQ中断号在NVIC的中断功能,写NVICISERx寄存器;配置中断优先级,写NVICIPx;写相应的中断服务程序(ISR);使能全局中断EnableInterrupts;具体举例:使能相应外设的中断:ENABLE_EOR_INT;/*使能TSI越界中断*/根据TSI的IRQ中断号,清除已经发生的TSI中断事件,并且使能TSI中断功能,首先在K60的datasheet或者直接到其头文件开
4、始处即可找到中断向量表,查到TSI的IRQ中断号(IRQ号=中断向量表号-16(即前16个核中断,它们不是IRQ中断)):然后利用ARM核自带的API函数使能TSI的IRQ中断,如下enable_irq(83);/*使能TSI的IRQ中断*/该函数的具体内容如下,注意每个NVICCPRx和NVICISERx都是32字节对齐的。voidenable_irq(intirq){intdiv;div=irq/32;switch(div){case0x0:NVICICPR0
5、=1<<(irq%32);NVICI
6、SER0
7、=1<<(irq%32);break;case0x1:NVICICPR1
8、=1<<(irq%32);NVICISER1
9、=1<<(irq%32);break;case0x2:NVICICPR2
10、=1<<(irq%32);NVICISER2
11、=1<<(irq%32);break;}}(3)配置优先级,set_irq_priority(83,5);/*设置TSI中断优先级为5,注意越小优先级越大*/(4)编写相应的中断服务函数/**********************************
12、************************************************Routine:TSI_isr**Description:TSI模块,outofRange中断服务程序,中断服务号为99,IRQ为83**Notes:********************************************************************************/voidTSI_isr(void);然后在写完该中断服务函数之后,我们需要把该中断函数地址映射到中
13、断向量表里面,所以找到isr.h文件打开,设置如下;#undefVECTOR_099/*取消原来默认的宏定义*/#defineVECTOR_099TSI_isr/*重定义中断服务函数名为VECTOR_99*/(5)使能全局中断EnableInterrupts;/*其宏定义为CPSIEi,即设置特殊功能寄存器*/
此文档下载收益归作者所有