前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MQX中断系统深度解析(一)

MQX中断系统深度解析(一)

作者头像
用户1605515
发布2018-04-10 11:47:34
8350
发布2018-04-10 11:47:34
举报
文章被收录于专栏:嵌入式程序猿嵌入式程序猿

Q

中断的处理绝对是嵌入式开发的重中之重,所以理解对中断和异常的处理显得尤为重要,今天我们来讲讲MQX的中断处理。

关于中断的基本概念,相信大家都已经清楚,在这里就不赘述了,主要是搞清楚中断源,中断向量表和中断相量号,中断优先级,可屏蔽中断,不可屏蔽中断的概念。中断处理的基本过程可以分为中断请求,中断检测,中断响应,等过程。

中断请求

某一中断源要CPU为它服务时,会向CPU发出中断请求信号,中断控制器获取中断源的中断相量号,并通过识别中断相量号将对应的硬件中断源模块的中断状态寄存器中的中断标志位置位,以使CPU知道到底是何种中断请求来了。

中断检测

CPU在每条指令结束时候都会检测中断请求或者异常,在指令周期的中断周期中,CPU将会检测系统是否存在中断请求,若有中断请求,则CPU会暂停当前执行的任务,去对中断事件进行响应,若没有中断请求,则继续执行当前的指令

中断响应

中断响应的过程是由系统自动完成,在中断响应过程中,CPU首先会查找中断源的中断模式是否允许中断,若中断模块允许中断,则响应中断请求,CPU会保存当前运行环境的内部寄存器的内容到堆栈中,通过中断相量号在中断相量表中找到中断对应的中断服务例程,也就是我们常说的ISR,执行中断处理服务程序ISR,在中断结束后,在将之前保存的内容恢复到内部寄存器,从而使中断前后程序的执行现场没有任何变化。

MQX中断处理过程

MQX的中断处理跟之前我们的无操作系统的处理过程稍微有点不同,MQX可以支持多种架构的处理器,为屏蔽不同架构在硬件上对中断管理的差异,使用了独特的中断管理子系统对中断事件的响应过程进行统一管理,中断和异常处理是MQX的可选性组件,但默认状态下是支持这一特性的。

MQX的中断服务例程分为内核ISR和用户ISR两个相对独立的部分,内核ISR与处理器相关,位于MQX安装包的源码目录下PSP文件夹,是汇编文件dispatch.s,用于实现硬件中断到用户ISR的映射,用汇编语言实现,可以确保MQX对中断事件的快速响应。用户ISR一般由C语言编写,实现具体的功能。

在IAR环境下打开此文件可以详细分析。

中断相量表文件vectors.c位于MQX的安装目录源码bsp文件夹下,每个不同的bsp文件夹都有一个vectors.c,如果是安装基于KSDK+MQX的系统,会稍有不同,如果是开kv4x的板载支持包,KSDK的中断相量表可以参考startup_MKV46F15.s文件,vectors.c几乎把所有的中断相量都设为内核ISR,除过复位相量,以及系统服务调用,和可挂起系统调用这两个异常不经过_int_kernel_isr处理外,其他的所有异常和中断都是从这个通用入口来处理的,包括NMI(不可屏蔽中断)和HardFaul(硬错误)。复位相量由硬件决定,不受MQX管理。

在MQX中要弄明白,用户ISR不是任务,而是一个速度快,能对硬件中断做出迅速响应的例程,MQX也完全支持中断嵌套,MQX支持独立的中断栈,用于保存用户的ISR上下文。简单来说中断到来时,MQX执行如下操作:

⑴进入内核ISR,执行_int_kernel_isr

⑵保存现场

⑶运行用户ISR

⑷用户ISR返回

⑸返回内核ISR

⑹返回中断前的任务。

配置MQX中断组件

由MQX用户手册可知,中断组件是一个可选组件,但在默认情况下,MQX是支持中断的,可参考mqx_cnfg.h源码。

/*

** When MQX_USE_INTERRUPTS is defined as 1,the support for interrupts is

** enabled in MQX.

** MGCT: <optiontype="bool"/>

*/

#ifndef MQX_USE_INTERRUPTS

#define MQX_USE_INTERRUPTS 1

#endif

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 中断请求
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档