您的位置 首页 传感器

浅谈嵌入式MCU的中止处理

浅谈嵌入式MCU的中断处理-众所周知,一方面,MCU在嵌入式系统中的广泛使用的一个重要原因就是其相对于MPU和通用CPU的时效性优势。而低延迟的外设中断和中断嵌套正是MCU实时性的最大保障。

众所周知,一方面,MCU在嵌入式体系中的广泛运用的一个重要原因便是其相关于MPU和通用CPU的时效性优势。而低推迟的外设中止和中止嵌套正是MCU实时性的最大确保。另一方面,在嵌入式体系MCU软件开发中,跟着体系功用的日益杂乱,不管是否选用RTOS,多使命都是不行避免的。在裸奔体系中,为了让时刻要害的使命得到最早呼应,往往需求经过外设中止嵌套来完结,归于依据外设的硬件中止嵌套,而在RTOS中,则给一切体系使命,都赋以详细的优先级,由内核依据优先级凹凸来进行调度,实践上是完结了一套依据优先级的软件中止嵌套。RTOS中的使命软件嵌套经过内核TIck守时器中止不断查询RTOS使命安排妥当表中各使命的优先级凹凸来完结使命切换,其外设硬件中止未必需求嵌套。

本文旨在给我们介绍嵌入式MCU的中止处理相关常识,协助我们了解中止,并运用好中止。

已然中止嵌套关于嵌入式体系规划如此重要,详细什么是中止嵌套呢?在详细解说中止嵌套之前,有必需求先讲一下嵌入式MCU的中止作业机制和中止优先级:

写过裸奔程序的工程师都知道,一个内核CPU同一个时刻只能履行一个使命/程序代码/指令,比方数据核算,与片上外设进行交互通讯等。代码的履行次序是用户自己首要写好的,CPU逐行取指、译码、履行即可。产品功用的完结便是在main函数的while(1)循环中(常称作主程序),不断的调用其他功用函数完结的。但实践作业环境中、许多事情是随机产生的,比方网络通讯,外部IO输入等不确定事情,这个时分CPU就不得不放下当时正在履行的作业,却呼应这些紧急事情,及时读取网络报文、处理并回复网络通讯需求,及时外部IO恳求。这样的处理就叫做中止。

嵌入式MCU中内核CPU反常和各种外设作业都能够产生呼应的中止,且经过中止控制器一致进行办理。这样CPU在中止未产生时就能够专注处理次序履行的使命,而只要在中止产生时才经过中止控制器中止CPU(经过产生一个高电平/低电平信号给CPU,这个进程被称为中止恳求),假如此刻CPU大局中止处于使能状况,则CPU会结合中止向量表和中止优先级装备,依据中止优先级凹凸(假如一起有多个外设中止产生),从中止向量表中取出优先级最高的中止服务程序ISR地址,将当时CPU的运转时环境压栈,之后跳转至该中止ISR地址运转;若此刻CPU大局中止处于封闭状况,则疏忽当时中止恳求。

下图为典型CPU正常主程序处理流程与外设中止呼应的联系图:

浅谈嵌入式MCU的中止处理

S12内核CPU的中止/反常处理流程图如下:

浅谈嵌入式MCU的中止处理

中止呼应–中止ISR与中止实时性

当中止产生后,中止控制器就会恳求内核CPU进行中止呼应,其典型的呼应便是CPU运转事前准备好的中止ISR。

中止ISR不同于其他用户软件程序,归于一类特别的函数,原因入下:

1. 中止ISR有必要是void型的无参数传递函数–无形参无返回值;

2.中止ISR由硬件外设触发,而非其他函数调用,其运转机遇具有随机不确定性和硬件实时性

3.中止ISR运转时刻有必要尽量短,以确保外设中止的实时性;

在中止ISR中需求完结以下作业:

1. 将引起该中止恳求的外设中止标志铲除,确保外设不因该中止ISR运转而丢掉下一次中止,而CPU在中止退出后能够处理其他使命;

2. 处理外设中止事情,典型如守时计数,通讯外设RX数据接纳或许TX数据buffer填充等;

为了确保中止的实时性,中止ISR程序要尽量短,不能条件等候句子乃至将死循环句子放在中止ISR内。主张用户一般只把要害处理放在中止ISR中,其他相关的一般性作业放在主程序中履行。典型比方如CAN的数据接纳放在CAN RX 中止ISR中,而经过大局变量告诉主程序履行相关的确诊协议(如UDS)。

中止优先级与中止嵌套

中止优先级是指内核CPU在呼应硬件外设中止时的先后次序,当不同的硬件外设中止产生时,高优先级的外设其中止ISR最早被内核履行;

中止嵌套是指在外设中止具有不同的优先级,在CPU呼应低优先级中止的时分(也便是运转中止ISR时),翻开CPU大局中止,假如此刻有更高优先级的中止到来,CPU能够停下当时的中止处理区呼应优先级高的中止,然后确保高优先级使命外设呼应实时性的状况:

一个三级中止优先级嵌套的典型嵌套流程如下所示:

浅谈嵌入式MCU的中止处理

总结一下中止嵌套产生的必要条件:

1. 不同的外设中止源有必要有不同的优先级

一些MCU的中止优先级时固定不行装备的,如S12G系列MCU,其外设中止优先级固定,中止向量地址越高的优先级越高);而别的一些MCU的中止优先级是能够灵敏装备的,如S12XE系列MCU的外设中止具有8个优先级设置和Qorivva MPC56xx系列MCU的外设中止有16个优先级能够装备,此类MCU其默许一切外设优先级相同,所以要进行中止嵌套,需求依据外设使命的重要性对相应外设装备不同的优先级;

2. 在中止ISR中有必要翻开CPU大局中止

简直一切嵌入式MCU的默许在进中止压栈的时分都是封闭CPU大局中止的,也便是默许制止中止嵌套的,要使能中止嵌套,用户有必要在能够被嵌套的外设中止ISR中手动翻开CPU的大局中止。

下图为S12内核CPU中止压栈进程,压栈CCR寄存器,封闭大局中止的处理,箭头所指红圈中,硬件置位 I-BIT(制止I-bit外设中止)、S-BIT(制止STOP低功耗指令)和X-BIT(制止XIRQ中止)(注:该进程是用户不行控且不行中止的”原子”操作)

浅谈嵌入式MCU的中止处理

翻开大局中止的机遇需求依据详细使命来决议,一般主张在中止ISR中,铲除当时外设中止标志后翻开即可。

留意,在一些高档MCU中,比方Qorivva MPC56xx和依据ARM Cortex M4F内核的最早轿车级MCU–S32K系列MCU中还集成了DMA,其也能够呼应大部分的片上外设中止,这时,外设中止标志就由DMA来铲除,然后完结外设数据的搬移(无需编写外设中止ISR了),然后减少了CPU被外设中止的频次,进步CPU的作业效率。

别的, 经过以上剖析结合上一篇共享文章–浅谈嵌入式MCU软件开发之使用工程的堆与栈,嵌入式MCU中止嵌套需求较大的仓库(stack)耗费,所以嵌入式MCU中止嵌套层数不宜过多,不然简单呈现仓库溢出。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/345222.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部