中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開(kāi)發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開(kāi)發(fā)工具

提供開(kāi)發(fā)工具、應(yīng)用測(cè)試 完善的開(kāi)發(fā)代碼案例庫(kù)分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

單片機(jī)的中斷:MCU如何處理中斷?

更新時(shí)間: 2021-08-26
閱讀量:7900

在本文中,將討論定時(shí)器中斷的概念,事實(shí)上中斷是有效使用MCU的最基本方法之一?,F(xiàn)在用一個(gè)類比來(lái)說(shuō)明事情如何在沒(méi)有中斷的情況下工作:如果你正在煮雞蛋,并且想在10分鐘內(nèi)將它們從爐子上取下來(lái),那么一種方法是不時(shí)檢查時(shí)鐘以確??纯磿r(shí)間是否到了。在嵌入式系統(tǒng)中也是如此:如果你想在執(zhí)行某些操作之前等待特定狀態(tài)發(fā)生變化,那么一種方法是定期檢查狀態(tài)?;蛘?,如果你的程序正在等待GPIO輸入電平;要在執(zhí)行某個(gè)步驟之前從0更改為1,那么一種方法是定期檢查GPIO值。這種定期檢查的方法稱為輪詢。

雖然輪詢是一種檢查狀態(tài)變化的簡(jiǎn)單方法,但它是有代價(jià)的。如果檢查間隔太長(zhǎng),發(fā)生和檢測(cè)之間可能會(huì)有很長(zhǎng)的滯后——如果在檢查之前狀態(tài)又變回,你可能會(huì)完全錯(cuò)過(guò)更改。更短的間隔將獲得更快、更可靠的檢測(cè),但也會(huì)消耗更多的處理時(shí)間和功率,因?yàn)楦嗟臋z查將返回否定。

另一種方法是利用中斷。使用這種方法,狀態(tài)變化會(huì)產(chǎn)生一個(gè)中斷信號(hào),使CPU暫停其當(dāng)前操作(并保存其當(dāng)前狀態(tài)),然后執(zhí)行與中斷相關(guān)的處理,然后恢復(fù)其先前的狀態(tài)并從中斷處恢復(fù)。(見(jiàn)圖1)

fig1-interrupts-vs-polling-en.jpg

讓我們回到煮雞蛋的例子。我們不會(huì)定期檢查,而是將計(jì)時(shí)器設(shè)置為10分鐘,然后做其他事情直到計(jì)時(shí)器響起,將我們的注意力轉(zhuǎn)回到雞蛋上。在這種情況下,定時(shí)器作為中斷工作,“把雞蛋從鍋里拿出來(lái)”是相關(guān)的處理。

MCU如何處理中斷?

中斷可以來(lái)自MCU內(nèi)部和MCU外部設(shè)備。例如,來(lái)自外部開(kāi)關(guān)或傳感器的中斷有時(shí)稱為“附加中斷”,因?yàn)樗怯筛郊拥組CU上的IRQ(中斷請(qǐng)求)引腳的外部設(shè)備產(chǎn)生的。當(dāng)相關(guān)狀態(tài)發(fā)生變化時(shí),外部設(shè)備向該引腳發(fā)送中斷請(qǐng)求信號(hào),進(jìn)而產(chǎn)生通知給MCU的中斷控制器(在RX63N上,該控制器稱為“ICUb”)。

相比之下,來(lái)自片上外設(shè)(內(nèi)部定時(shí)器、GPIO線、UART等)的中斷稱為“外設(shè)中斷”。這些中斷信號(hào)直接通知中斷控制器,無(wú)需引腳連接。

中斷控制器的工作就是將這些中斷請(qǐng)求以協(xié)調(diào)的方式傳遞給CPU。當(dāng)發(fā)生多個(gè)中斷時(shí),控制器必須根據(jù)它們的相對(duì)優(yōu)先級(jí)以適當(dāng)?shù)捻樞驅(qū)⑺鼈儼l(fā)送到CPU。并且控制器還必須知道哪些中斷當(dāng)前被屏蔽(禁用),以便它可以完全忽略這些中斷。

當(dāng)CPU收到控制器的中斷請(qǐng)求時(shí),它停止執(zhí)行它正在處理的程序,并自動(dòng)保存所有相關(guān)的工作信息,以便以后可以從中斷的地方繼續(xù)執(zhí)行。然后加載并執(zhí)行與接收到的中斷請(qǐng)求對(duì)應(yīng)的中斷處理程序。完成這個(gè)處理后,CPU恢復(fù)保存的信息并從它停止的地方恢復(fù)。(見(jiàn)圖2)注意保存和恢復(fù)是由CPU自動(dòng)處理的;程序員不需要關(guān)心這些細(xì)節(jié)。

fig2-interrupt-processing-flow-en.jpg

考慮通過(guò)UART進(jìn)行串行通信的情況。定期監(jiān)視UART以了解新字符的到來(lái)是低效的。因此,在大多數(shù)情況下,系統(tǒng)設(shè)計(jì)為當(dāng)新字符到達(dá)時(shí)UART本身會(huì)產(chǎn)生中斷,提醒CPU執(zhí)行適當(dāng)?shù)奶幚怼?br/>
類似地,內(nèi)部定時(shí)器通常被設(shè)置為驅(qū)動(dòng)中斷以某個(gè)特定間隔重復(fù)執(zhí)行某個(gè)特定進(jìn)程:每次間隔過(guò)去時(shí),定時(shí)器都會(huì)生成一個(gè)中斷,告訴CPU運(yùn)行該進(jìn)程。一般來(lái)說(shuō),使用這些類型的中斷可以大大提高M(jìn)CU的運(yùn)行效率。

相關(guān)文章推薦:

上杭县| 朝阳县| 兴和县| 太仓市| 汝阳县| 麟游县| 涿州市| 广州市| 凉城县| 东海县| 色达县| 皋兰县| 曲麻莱县| 武鸣县| 光泽县| 新平| 余干县| 鱼台县| 竹溪县| 南通市| 盖州市| 寿光市| 绥芬河市| 西乌珠穆沁旗| 南平市| 北安市| 木里| 佛山市| 监利县| 十堰市| 甘孜| 南乐县| 泰州市| 沭阳县| 平江县| 延川县| 合山市| 睢宁县| 英吉沙县| 襄樊市| 徐水县|