欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4364|回復: 0
打印 上一主題 下一主題
收起左側

AVR單片機中的中斷嵌套

[復制鏈接]
跳轉到指定樓層
樓主
ID:104287 發表于 2016-1-31 20:22 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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單片機中,進入中斷處理程序適時開放全局中斷,不僅可以使用中斷嵌套,而且高級別中斷中可響應任何級別(包括更低級別的)的中斷。



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表