色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

中斷是什么 如何使用它們

454398 ? 來(lái)源:工程師吳畏 ? 2019-07-31 14:08 ? 次閱讀

原理圖

中斷是什么 如何使用它們

什么是中斷?

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

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

那么,我們?nèi)绾谓鉀Q這個(gè)問(wèn)題呢?我們可以在計(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í)行比較來(lái)查看觸發(fā)了哪個(gè)中斷,這可能需要一些時(shí)間。

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

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

表位置

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

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

如果IVSEL = 0,則ISR位于向量表的起始,否則ISR駐留在引導(dǎo)加載程序中。現(xiàn)在,將其保留為0,因?yàn)槲覀儧](méi)有使用引導(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頁(yè))中,稱為TOIE0。需要將此位設(shè)置為1才能觸發(fā)定時(shí)器溢出。該寄存器還有另外兩個(gè)中斷源,A匹配溢出和B匹配溢出,這對(duì)PWM功能很有用(將來(lái)會(huì)介紹)。

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

在WinAVR中編寫(xiě)ISR

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

#include

ISR(TIMER0_OVF_vect)

{

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

// Put your code here

}

簡(jiǎn)單閃爍示例

在這個(gè)例子中,ATmega168會(huì)使連接到PD0的LED頻繁閃爍,其中閃爍的速率受到控制通過(guò)定時(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)并暫停主代碼。這可以用來(lái)做很多事情,包括多任務(wù)處理,不同外圍設(shè)備的多重處理,以及創(chuàng)建實(shí)時(shí)代碼!

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

    關(guān)注

    5

    文章

    899

    瀏覽量

    41535
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

    RISC-V的中斷處理 中斷操作三個(gè)步驟

    中斷操作三個(gè)步驟: 1、中斷初始化 2、trap處理 3、用戶中斷處理
    的頭像 發(fā)表于 05-20 16:38 ?1256次閱讀

    stm32使用workbench只生成了一些.h和.c文件,然后該如何使用它們

    使用workbench只生成了一些.h和.c文件,然后該如何使用它們?還需要手動(dòng)在MDK中建立工程添加標(biāo)準(zhǔn)庫(kù)再把這些文件加進(jìn)去么?哪位有相關(guān)開(kāi)發(fā)經(jīng)驗(yàn),請(qǐng)賜教!
    發(fā)表于 05-15 07:29

    微控制器和嵌入式系統(tǒng)中的并發(fā)和中斷

    除了通用 CPU 之外,它們還包含許多用于與外界交互的專用硬件設(shè)備(稱為外圍設(shè)備),因此您可以連接諸如按鈕和顯示器之類的東西以及實(shí)現(xiàn)系統(tǒng)所需的其他外部硬件。通常,這些外設(shè)具有中斷機(jī)制,因此 CPU 可以要求它們監(jiān)視特定事件,然后
    發(fā)表于 05-03 10:01 ?213次閱讀
    微控制器和嵌入式系統(tǒng)中的并發(fā)和<b class='flag-5'>中斷</b>

    CPU中斷程序:從硬件看什么是中斷

    CPU響應(yīng)中斷轉(zhuǎn)去執(zhí)行中斷服務(wù)程序前,需要把被中斷程序的現(xiàn)場(chǎng)信息保存起來(lái),以便執(zhí)行完中斷服務(wù)程序后,接著從被中斷程序的斷點(diǎn)處繼續(xù)往下執(zhí)行。
    發(fā)表于 03-26 11:36 ?3919次閱讀
    CPU<b class='flag-5'>中斷</b>程序:從硬件看什么是<b class='flag-5'>中斷</b>?

    單片機(jī)中斷功能及其應(yīng)用

    單片機(jī)中斷功能及其應(yīng)用? 單片機(jī)中斷是指在程序執(zhí)行過(guò)程中,根據(jù)特定的條件或事件自動(dòng)暫時(shí)中斷當(dāng)前程序的執(zhí)行,轉(zhuǎn)而執(zhí)行特定的中斷服務(wù)程序。中斷
    的頭像 發(fā)表于 01-30 14:45 ?5547次閱讀

    什么是中斷向量偏移,為什么要做中斷向量偏移?

    當(dāng)MCU中有兩段或以上程序的時(shí)候(第一個(gè)程序?yàn)橛脩鬊ootLoader程序,其他的為APP程序,這個(gè)在前期視頻《什么是ISP?什么是IAP》中有講過(guò)),APP程序中都需要做中斷向量偏移,那么什么是中斷向量偏移,為什么要做中斷向量
    的頭像 發(fā)表于 01-30 09:47 ?1821次閱讀
    什么是<b class='flag-5'>中斷</b>向量偏移,為什么要做<b class='flag-5'>中斷</b>向量偏移?

    GD32 MCU是如何進(jìn)入中斷函數(shù)的

    用過(guò)GD32 MCU的小伙伴們都知道,程序是順序執(zhí)行的,但當(dāng)有中斷來(lái)的時(shí)候程序會(huì)跳轉(zhuǎn)到中斷函數(shù),執(zhí)行完中斷函數(shù)后程序又繼續(xù)回到原來(lái)的位置繼續(xù)執(zhí)行,那么你們知道MCU是如何找到中斷函數(shù)入
    的頭像 發(fā)表于 01-30 09:45 ?1112次閱讀
    GD32 MCU是如何進(jìn)入<b class='flag-5'>中斷</b>函數(shù)的

    外部中斷的工作原理 外部中斷方式有哪些 為什么要使用外部中斷

    外部中斷的工作原理是單片機(jī)響應(yīng)外部事件的一種機(jī)制** **。
    的頭像 發(fā)表于 01-28 17:37 ?3759次閱讀

    單片機(jī)外部中斷和定時(shí)器中斷的區(qū)別和用法

    單片機(jī)外部中斷和定時(shí)器中斷在觸發(fā)來(lái)源、應(yīng)用場(chǎng)景以及功能特點(diǎn)上存在明顯差異** **。
    的頭像 發(fā)表于 01-28 17:35 ?3187次閱讀

    圖像采集卡到底是什么?為什么要使用它們

    :圖像采集卡到底是什么?它們有什么用?何時(shí)以及為什么應(yīng)該使用它們?為什么要使用圖像采集卡?幀或視頻采集卡的最初目的是將模擬圖片轉(zhuǎn)換為數(shù)字信號(hào)。由于當(dāng)今純數(shù)字圖像處理技
    的頭像 發(fā)表于 01-26 16:14 ?1514次閱讀
    圖像采集卡到底是什么?為什么要使<b class='flag-5'>用它們</b>?

    西門子S7-200 PLC中斷程序的應(yīng)用講解

    有很多PLC內(nèi)部或外部的事件是隨機(jī)發(fā)生的,例如外部開(kāi)關(guān)量輸入信號(hào)的上升沿或下降沿、通信事件、高速計(jì)數(shù)器的當(dāng)前值等于設(shè)定值和定時(shí)中斷等,事先并不知道這些事件何時(shí)發(fā)生,但是它們出現(xiàn)時(shí)需要盡快地處理它們,PLC用
    的頭像 發(fā)表于 01-09 12:23 ?1534次閱讀

    cc2530總中斷控制位是什么?

    cc2530是一款著名的無(wú)線通信芯片,它內(nèi)置了豐富的功能和資源,其中包括總中斷控制位。在本文中,將介紹cc2530總中斷控制位的概念、作用、使用方法以及注意事項(xiàng)。 首先,讓我們來(lái)了解一下總中斷控制位
    的頭像 發(fā)表于 01-08 09:37 ?1104次閱讀
    主站蜘蛛池模板: 在线亚洲精品福利网址导航| 久久伊人网站| 换脸国产AV一区二区三区| 免费看毛片网| 亚洲 日韩 欧美 另类 蜜桃| 999www成人免费视频| 国产欧美二区综合| 欧美97色伦影院在线观看| 亚洲黄色在线播放| 处xxxx.88| 快插我我好湿啊公交车上做| 无人在线观看免费高清视频播放| 张开腿我尝尝你的草莓| 国产精品视频免费观看| 欧美乱码卡一卡二卡四卡免费 | 四虎永久在线精品国产免费| 最近在线视频观看2018免费| 国产午夜亚洲精品区| 欧美三级不卡在线观线看| 亚洲中文字幕无码爆乳APP| 国产WW久久久久久久久久| 免费国产黄线在线播放| 亚洲伊人久久大香线蕉综合图片| 高H短篇辣肉纯肉| 暖暖 视频 在线 观看 高清| 亚洲香蕉网久久综合影院| 国产传媒精品1区2区3区| 欧美精品做人一级爱免费| 在线观看99| 好嗨哟在线看片免费| 特级淫片大乳女子高清视频| www伊人网| 免费鲁丝片一级在线观看| 一级毛片免费在线播放| 国产香蕉视频在线观看| 熟妇少妇任你躁在线无码| x8国产精品视频| 欧美成人中文字幕在线看| 最新无码国产在线视频2020| 精品久久久久中文字幕加勒比东京热| 午夜性伦鲁啊鲁免费视频|