N 久没更新从零系列了,呵呵,今天终于抽出空来写写了。其实写这个系列真是个头疼的事,作为主要面
对入门级大众的博客既要少些非常专业性的语言(咳咳,当然太专业的俺也说不出,嘿嘿),通俗化而又
不失专业,同时作为工程技术类博客,又马虎不得,笔风要严谨。所以好久能憋出一篇算是得意的系列来
就不错了,嘿嘿,这不,终于憋出第九篇了,哈哈...(想起本山大叔小品,写月子 2 的段子了,挺像来)
对于掌握一款单片机(Coretex-M 系列定位就是高端单片机,呵呵,和 Cortex-A 系列的应用处理器定位是
两个档次)来说,其中断机制是必须要掌握的,所以作为一个单片机开发者,编写相应的中断服务程序是
最基本的要求之一了
### 从零入手Kinetis系统开发之九:中断使用方法
#### 一、中断机制简介
中断机制是单片机的重要组成部分,尤其对于高端单片机如Cortex-M系列而言,掌握中断机制更是必不可少的基本技能。本文将详细介绍Kinetis系列单片机中的中断使用方法,帮助初学者更好地理解并运用这一核心概念。
#### 二、Kinetis中断机制特点
Kinetis系列单片机基于Cortex-M4内核,因此其中断机制遵循Cortex-M4的NVIC(Nested Vectored Interrupt Controller,嵌套向量中断控制器)机制。NVIC的主要特点如下:
1. **可嵌套中断支持**:允许更高级别的中断打断正在执行的较低级别中断处理程序,从而提高系统的实时响应能力。
2. **向量中断支持**:通过查询中断向量表来确定中断服务程序的入口地址,进而执行相应的中断处理程序。
3. **动态优先级调整**:可以在软件运行过程中改变中断的优先级,提供更大的灵活性。
4. **中断延迟减少**:引入新的特性,如“咬尾中断”、“晚到中断”,有效降低中断响应时间。
5. **中断屏蔽**:可以有条件地屏蔽某些中断,例如仅屏蔽优先级低于特定阈值的中断。
#### 三、Kinetis中断特性
针对Kinetis系列单片机,其特有的中断特性包括:
1. **低中断延迟**:从触发中断到进入中断服务程序的时间不超过12个时钟周期。
2. **丰富的中断数量**:支持多达120个中断,其中包括16个内核异常中断以及剩余的外部IRQ中断。
3. **灵活的优先级设置**:最多支持16个可编程的中断优先级。
4. **动态优先级调整**:能够在运行时动态改变中断优先级。
5. **向量表重定位**:通过修改SCB_VTOR寄存器实现中断向量表的位置变更。
#### 四、中断服务程序实现步骤
为了实现一个完整的中断服务程序,通常需要经过以下步骤:
1. **使能外设中断**:通过设置外设的相关寄存器位来使能该外设的中断功能。
2. **清除已挂起的中断**:为了避免在使能中断后立即触发中断,需要先清除已经挂起的中断标志,通常通过写入NVIC_ICPRx寄存器实现。
3. **使能NVIC中的中断**:通过写入NVIC_ISERx寄存器使能具体的IRQ中断号。
4. **配置中断优先级**:虽然不是必须步骤,但配置优先级能够优化中断的调度顺序,通过写入NVIC_IPx寄存器实现。
5. **编写中断服务程序(ISR)**:编写具体的中断处理逻辑,通常包含在ISR中。
6. **使能全局中断**:确保全局中断处于使能状态,通常在启动代码中就已经设置好。
#### 五、实例分析
以Kinetis K60系列的TSI(Touch Sensor Interface)中断为例,具体实现步骤如下:
1. **使能TSI中断**:通过调用`ENABLE_EOR_INT`宏来使能TSI越界中断。
2. **清除并使能TSI IRQ中断**:查询数据手册或头文件获取TSI的IRQ中断号。然后,通过调用`enable_irq`函数使能TSI的IRQ中断。这里需要注意IRQ号等于中断向量表号减去16(前16个为内核异常中断)。
```c
enable_irq(83); // 使能TSI的IRQ中断
```
通过上述步骤,可以有效地实现Kinetis系列单片机中的中断服务程序,从而充分利用中断机制来提升系统的性能和响应速度。掌握这些基础知识对于单片机开发者来说至关重要,希望本文能够帮助读者更好地理解和应用Kinetis系列单片机的中断技术。