在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

中斷是什么 如何使用它們

454398 ? 來源:工程師吳畏 ? 2019-07-31 14:08 ? 次閱讀

原理圖

中斷是什么 如何使用它們

什么是中斷?

微控制器編寫的簡單程序通常都可以在主函數(shù)內(nèi)部完成,并且?guī)缀醪恍枰褂猛庠O(shè)。但是,大多數(shù)其他微控制器程序更復(fù)雜,需要大量代碼。當(dāng)發(fā)生這種情況時(shí),中斷會(huì)變得非常有用,但究竟什么是中斷?

想象一下,我們的微控制器需要同時(shí)做兩件事:準(zhǔn)確跟蹤時(shí)間并使LED閃爍。我們的程序可以通過重置計(jì)時(shí)器,遞增計(jì)數(shù)器,然后等待計(jì)時(shí)器溢出來開始。完成后,我們的代碼可以使LED閃爍。雖然這有點(diǎn)完成工作,但是有兩個(gè)問題。 CPU花費(fèi)大部分時(shí)間坐在延遲循環(huán)中,這浪費(fèi)了CPU時(shí)間,并且LED的執(zhí)行時(shí)間很難計(jì)算。

那么,我們?nèi)绾谓鉀Q這個(gè)問題呢?我們可以在計(jì)時(shí)器上使用中斷!因此,我們不是在主代碼中遞增計(jì)數(shù)器,而是將代碼轉(zhuǎn)換為處理時(shí)序的中斷服務(wù)程序。

通常,微控制器將運(yùn)行LED閃爍代碼,但是一旦定時(shí)器生成中斷請(qǐng)求,微控制器停止LED閃爍代碼,執(zhí)行定時(shí)器中斷服務(wù)程序,然后返回到LED閃爍代碼。這樣,LED閃爍代碼不會(huì)干擾我們的定時(shí)器代碼,它可以更準(zhǔn)確(并且更容易)跟蹤時(shí)間。

AVR Core上的中斷

AVR有一個(gè)向量表,每個(gè)中斷源都跳轉(zhuǎn)到一個(gè)唯一的地址。這是非常有利的,因?yàn)槲覀儾辉傩枰獔?zhí)行比較來查看觸發(fā)了哪個(gè)中斷,這可能需要一些時(shí)間。

下表顯示了Atmega168上可用的不同中斷以及它們跳轉(zhuǎn)到的地址。程序記憶。但是,在我們使用它們之前必須配置幾個(gè)中斷選項(xiàng)。

從ATmega168數(shù)據(jù)表中提取

表位置

Atmega168具有允許的引導(dǎo)加載程序區(qū)域它可以動(dòng)態(tài)地重寫自己的程序存儲(chǔ)器,這對(duì)固件更新很有用。因此,ISR向量表將位于內(nèi)存中很重要。如果表位于引導(dǎo)加載程序區(qū)域中,則在啟用引導(dǎo)加載程序時(shí)永遠(yuǎn)不會(huì)更新(不推薦)。

因此,如果沒有引導(dǎo)加載程序,則應(yīng)將向量表放在內(nèi)存的底部(接近地址0x0000),但如果使用引導(dǎo)加載程序,則應(yīng)將向量表移動(dòng)到引導(dǎo)加載程序上方。這可以通過改變MCUCR寄存器中的幾個(gè)位來輕松完成。

如果IVSEL = 0,則ISR位于向量表的起始,否則ISR駐留在引導(dǎo)加載程序中。現(xiàn)在,將其保留為0,因?yàn)槲覀儧]有使用引導(dǎo)加載程序

如果IVCE = 1,則執(zhí)行ISR切換。暫時(shí)保留為0

中斷啟用位

每個(gè)中斷源(I/O引腳,外設(shè)等)都有關(guān)聯(lián)中斷使能位。與PIC類似,STATUS寄存器中有一個(gè)全局中斷使能位,需要將其設(shè)置為允許中斷工作。要找出這些中斷標(biāo)志所在的位置,需要參考數(shù)據(jù)手冊(cè)中的特定外設(shè)章節(jié)。

例如,我們將在定時(shí)器0上使用溢出中斷,所以如果我們看一下定時(shí)器0在章節(jié)中,我們發(fā)現(xiàn)中斷使能位位于TIMSK0寄存器(第89頁)中,稱為TOIE0。需要將此位設(shè)置為1才能觸發(fā)定時(shí)器溢出。該寄存器還有另外兩個(gè)中斷源,A匹配溢出和B匹配溢出,這對(duì)PWM功能很有用(將來會(huì)介紹)。

注意,設(shè)置我在SREG中的位不是使用SREG本身,而是使用函數(shù)sei();設(shè)置I位和cei();清除I位。

在WinAVR中編寫ISR

所以我們現(xiàn)在明白需要啟用中斷才能啟動(dòng),但我們?nèi)绾问褂肅和WINAVR編譯器編寫?答案很簡單:我們使用特殊保留字ISR并傳遞中斷名稱參數(shù)來告訴編譯器哪個(gè)中斷函數(shù)處理。注意我們需要包含中斷頭文件,否則中斷函數(shù)將不起作用!

#include

ISR(TIMER0_OVF_vect)

{

// Interestingly, the AVR automatically clears interrupt flags.。。.unlike the PIC

// Put your code here

}

簡單閃爍示例

在這個(gè)例子中,ATmega168會(huì)使連接到PD0的LED頻繁閃爍,其中閃爍的速率受到控制通過定時(shí)器0但是,您可能會(huì)注意到主功能為空,并且LED在定時(shí)器溢出中斷服務(wù)程序(ISR)內(nèi)閃爍。這意味著我們可以在while循環(huán)中放入我們想要的任何代碼,并且該代碼不會(huì)阻止中斷運(yùn)行。

/*

* AVR Interrupt.c

*

* Created: 09/01/2018

* Author : RobinLaptop

*/

// These are really useful macros that help to get rid of unreadable bit masking code

#define setBit(reg, bit) (reg = reg | (1 《《 bit))

#define clearBit(reg, bit) (reg = reg & ~(1 《《 bit))

#define toggleBit(reg, bit) (reg = reg ^ (1 《《 bit))

#define clearFlag(reg, bit) (reg = reg | (1 《《 bit))

#include

#include

ISR(TIMER0_OVF_vect)

{

// Interestingly, the AVR automatically clears interrupt flags =) 。。..unlike the PIC =(

// Toggle the LED (PD0 , Pin 2)

toggleBit(PORTD, PD0);

}

int main(void)

{

// Initialize Registers

clearBit(TCCR0A, WGM00); // Configure WGM to be 0x00 for normal mode

clearBit(TCCR0A, WGM01);

clearBit(TCCR0B, WGM02);

setBit(TCCR0B, CS00); // Configure clock source to be clock io at 1024 pre-scale

clearBit(TCCR0B, CS01);

setBit(TCCR0B, CS02);

DDRD = 0xFF; // Make PORT D and output

sei(); // Enable interrupts

setBit(TIMSK0, TOIE0); // Enable the timer interrupt

while (1)

{

// Put any code you want here

// It should not affect the interrupt service routine!

}

}

結(jié)論

教程僅涵蓋單個(gè)中斷,即定時(shí)器0溢出中斷,但它清楚地表明中斷是非常強(qiáng)大。如果使用得當(dāng),您可以擁有一個(gè)系統(tǒng),它可以在信號(hào)到達(dá)時(shí)立即響應(yīng)并暫停主代碼。這可以用來做很多事情,包括多任務(wù)處理,不同外圍設(shè)備的多重處理,以及創(chuàng)建實(shí)時(shí)代碼!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    904

    瀏覽量

    42571
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    第六章 外部中斷

    本章介紹W55MH32的IO口作為外部中斷輸入的使用。先闡述了NVIC(嵌套向量中斷控制器) 的結(jié)構(gòu)、寄存器、優(yōu)先級(jí)及相關(guān)函數(shù),再說明EXTI(外部中斷和事件控制器)的功能。框圖及IO口與
    的頭像 發(fā)表于 05-26 16:27 ?428次閱讀
    第六章 外部<b class='flag-5'>中斷</b>

    AS32X601驅(qū)動(dòng)系列教程 PLIC_中斷應(yīng)用詳解

    平臺(tái)中斷控制器(Platform Level Interrupt Controller,PLIC)是國科安芯AS32系列MCU芯片的中斷控制器,主要對(duì)中斷源進(jìn)行采樣,優(yōu)先級(jí)仲裁和分發(fā)。各外設(shè)
    的頭像 發(fā)表于 05-23 17:10 ?144次閱讀
    AS32X601驅(qū)動(dòng)系列教程 PLIC_<b class='flag-5'>中斷</b>應(yīng)用詳解

    如何在CYPD7299中禁用和啟用SWD,并在需要時(shí)啟用它

    基本上,我的要求是在 CYPD7299 中禁用 SWD,并在需要時(shí)啟用它。 僅供參考,我們正在通過 LIN 使用固件更新。 有人可以指導(dǎo)如何實(shí)現(xiàn)這一點(diǎn)嗎?
    發(fā)表于 05-19 08:02

    單片機(jī)中斷技術(shù)詳解

    在現(xiàn)代電子設(shè)備中,單片機(jī)作為控制核心發(fā)揮著舉足輕重的作用。而在其高效運(yùn)作的背后,中斷機(jī)制是推動(dòng)單片機(jī)實(shí)現(xiàn)實(shí)時(shí)響應(yīng)與高效執(zhí)行的關(guān)鍵因素。本文將深入探討單片機(jī)中的中斷概念、中斷系統(tǒng)的結(jié)構(gòu)、中斷
    的頭像 發(fā)表于 02-02 15:57 ?858次閱讀

    串口中斷是內(nèi)部中斷還是外部中斷,串口中斷是怎么觸發(fā)的

    串口中斷通常被視為外部中斷。雖然串口控制器(如USART、UART等)可能集成在微控制器或處理器的內(nèi)部,但從中斷的角度來看,串口中斷是由處理器外部的通信事件觸發(fā)的。這些事件包括數(shù)據(jù)的接
    的頭像 發(fā)表于 01-29 15:03 ?1558次閱讀

    串口中斷需要清除標(biāo)志位嗎,串口中斷標(biāo)志位會(huì)自動(dòng)清除嗎

    在電子通信領(lǐng)域,串口中斷作為一種重要的通信機(jī)制,廣泛應(yīng)用于各種嵌入式系統(tǒng)和計(jì)算機(jī)設(shè)備中。串口中斷標(biāo)志位的管理,尤其是是否需要手動(dòng)清除以及是否會(huì)自動(dòng)清除,是理解和實(shí)現(xiàn)串口通信的關(guān)鍵環(huán)節(jié)。
    的頭像 發(fā)表于 01-29 14:59 ?1604次閱讀

    利用Minitab應(yīng)對(duì)供應(yīng)鏈中斷問題

    供應(yīng)鏈中斷是不可避免的,但積極的措施和數(shù)據(jù)驅(qū)動(dòng)的戰(zhàn)略可以減輕其影響。Minitab全面的數(shù)據(jù)分析和問題解決工具使組織能夠分析、優(yōu)化和調(diào)整其供應(yīng)鏈,以應(yīng)對(duì)不可預(yù)見的挑戰(zhàn),確保面對(duì)中斷時(shí)的彈性和連續(xù)性。
    的頭像 發(fā)表于 01-02 17:16 ?411次閱讀

    ADS1299fe自帶濾波功能嗎?用它測得EEG信號(hào)還得做濾波處理嗎?

    ADS1299fe這個(gè)板子 自帶濾波功能嗎?用它測得EEG信號(hào)還得做濾波處理嗎?急急急。
    發(fā)表于 12-26 06:59

    stm32 GPIO中斷配置教程

    在嵌入式開發(fā)中,STM32微控制器因其高性能和豐富的外設(shè)而廣受歡迎。GPIO(通用輸入/輸出)中斷是STM32微控制器中常用的功能之一,它允許開發(fā)者在特定引腳上檢測到外部信號(hào)變化時(shí)快速響應(yīng)。 1.
    的頭像 發(fā)表于 11-19 15:53 ?3250次閱讀

    LRA致動(dòng)器:如何移動(dòng)它們

    電子發(fā)燒友網(wǎng)站提供《LRA致動(dòng)器:如何移動(dòng)它們.pdf》資料免費(fèi)下載
    發(fā)表于 10-26 09:18 ?0次下載
    LRA致動(dòng)器:如何移動(dòng)<b class='flag-5'>它們</b>

    單片機(jī)有哪些中斷類型

    單片機(jī)中斷是指在單片機(jī)執(zhí)行程序的過程中,當(dāng)外部設(shè)備或內(nèi)部條件發(fā)生某個(gè)特定事件時(shí),能夠暫停當(dāng)前正在執(zhí)行的程序,轉(zhuǎn)而去執(zhí)行一個(gè)特定的服務(wù)程序(稱為中斷服務(wù)程序或中斷處理程序),處理該事件,之后再返回到被
    的頭像 發(fā)表于 10-17 18:12 ?2272次閱讀

    單片機(jī)的中斷機(jī)制

    單片機(jī)的中斷機(jī)制是一種重要的處理方式,它允許單片機(jī)在執(zhí)行主程序的過程中,能夠暫停當(dāng)前任務(wù),轉(zhuǎn)而處理外部或內(nèi)部緊急事件。這種機(jī)制極大地提高了系統(tǒng)的響應(yīng)速度和處理能力,使得單片機(jī)在各種應(yīng)用領(lǐng)域中得到廣泛應(yīng)用。以下是對(duì)單片機(jī)中斷機(jī)制的詳細(xì)探討。
    的頭像 發(fā)表于 10-17 18:03 ?1858次閱讀

    freertos中斷優(yōu)先級(jí)在哪設(shè)置

    中斷優(yōu)先級(jí)之前,我們需要理解中斷優(yōu)先級(jí)的概念。在嵌入式系統(tǒng)中,中斷是硬件或軟件事件,它們可以打斷CPU的當(dāng)前執(zhí)行流程,讓CPU去處理更緊急的任務(wù)。
    的頭像 發(fā)表于 09-02 14:17 ?1466次閱讀

    stm32怎樣觸發(fā)軟件中斷

    了解STM32中斷系統(tǒng) STM32微控制器具有豐富的中斷系統(tǒng),包括NVIC(嵌套向量中斷控制器)和SYSTICK定時(shí)器。NVIC可以處理多達(dá)240個(gè)中斷源,包括外部
    的頭像 發(fā)表于 09-02 09:32 ?1724次閱讀

    CKS32F107xx系列MCU的中斷和事件

    本章節(jié)首先將以MCU開發(fā)人員常接觸到的“中斷”、“事件”和“中斷事件”三個(gè)名詞的概念展開,然后去闡述彼此的主要區(qū)別,最后借助MCU的GPIO外部中斷/事件控制器(EXTI)的傳輸路徑來加深對(duì)上述概念的理解。
    的頭像 發(fā)表于 07-22 09:29 ?868次閱讀
    CKS32F107xx系列MCU的<b class='flag-5'>中斷</b>和事件
    主站蜘蛛池模板: 午夜神马福利免费官方 | 四虎影院最新网站 | 成人久久久精品乱码一区二区三区 | 色在线视频播放 | 久久久久久夜精品精品免费啦 | 伊人久久大香线蕉综合影 | 国产嫩草影院精品免费网址 | 欧美一级片免费在线观看 | 91三级视频 | 亚洲第一在线 | 男人的天堂免费网站 | 婷婷爱五月| 女人aaaaa片一级一毛片 | 精品精品国产理论在线观看 | 欧美午夜精品一区二区三区 | 日韩免费视频一区 | 韩国免费特一级毛片 | 麻豆国产三级在线观看 | 亚洲高清国产一线久久 | 丁香花五月天婷婷 | 在线观看午夜 | 人人揉揉香蕉大免费不卡 | 中文字幕亚洲一区 | 色综合天天综合网看在线影院 | 综合激情在线 | 视频一区日韩 | 婷婷爱五月 | 久久福利免费视频 | 操人网站 | 国产精品亚洲玖玖玖在线靠爱 | 青青伊人91久久福利精品 | 久青草久青草高清在线播放 | 97影院理论| 深夜福利一区 | 色婷婷99综合久久久精品 | 天天干天天操天天干 | 亚洲最大的成网4438 | 五月天激情开心网 | 欧美大全 | 久久婷婷丁香七月色综合 | 久久久久久久性潮 |