您的位置 首页 设计

AVR单片机中的中止嵌套

AVR响应中断后,由硬件自动清零全局中断标志位,此时任何中断都无法响应。直到中断响应程序执行完毕后,全局中断自动打开。因此,若不作特

AVR呼应中止后,由硬件主动清零大局中止标志位,此刻任何中止都无法呼应。直到中止呼应程序履行结束后,大局中止主动翻开。因而,若不作特别处理,AVR单片机是无法完成中止嵌套的。

但,如果在中止服务程序中敞开大局中止,一旦有中止(包含中止等级较低的,或者是自己自身)请求,AVR将当即呼应中止,打断当时正在履行的任何程序(包含正在履行中止服务程序),进入新的中止服务程序,然后完成中止嵌套。此刻如有多个中止请求一起存在,MCU呼应高优先权的中止。
可见,AVR单片机中,若软件合理规划,即可完成中止嵌套。
和MCS51特别不同的是,AVR中止嵌套不只可处理优先级更高的中止,也能够处理同优先级乃至优先级较低的中止。这能满意一些特别的规划,可是也简单引起紊乱。在软件规划过程中,这一点规划者需特别留意。
详细试验:

interrupt [iv_INT1] void USB_Link_Int(void)

{

//显现提示信息,提示进入INT1中止处理程序

DispScreen(scr_info_of_int1,true,null);

//推迟3秒,使得屏幕提示能够看清

//留意:推迟过程中产生iv_TIMER0_COMP中止,该中止的优先级低于iv_INT1

Timer0_Start(0,3); //注:此函数中运用sei()敞开中止

while (Timer0_IsRun());

Timer0_Stop();

//答应INT3(ENTER)键按下产生中止

EIMSK &= 0xf7; //制止INT3产生中止

EICRA |= 0x80;

EICRA &= 0xbf; //INT3中止方法:下降沿产生异步中止

EIFR |= 0x08;//清INT3中止标志

EIMSK |= 0x08;//答应INT3产生中止

//制止INT1,避免重入,专等INT3

EIMSK &= ~( 1 << INT1 );//制止INT1产生中止

//等候INT3中止

//留意:iv_INT3中止的优先级低于iv_INT1

while(true);

}

//按ENTER键后产生INT3中止

interrupt [iv_INT3] void EnterKey_Int(void)

{

//显现提示信息,提示进入INT3中止处理程序

DispScreen(scr_info_of_int3,true,null);

//推迟3秒,使得屏幕提示能够看清

//留意:推迟过程中产生iv_TIMER0_COMP中止,该中止的优先级低于iv_INT3

Timer0_Start(0,3); //注:此函数中运用sei()敞开中止

while (Timer0_IsRun());

Timer0_Stop();

//发动看门狗,等候复位

watch_dog_reset_cpu();

}

试验成果:iv_TIMER0_COMP中止、iv_INT3中止按期产生。

由此可见,AVR单片机中,进入中止处理程序当令敞开大局中止,不只能够运用中止嵌套,并且高等级中止中可呼应任何等级(包含更低等级的)的中止。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部