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

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

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

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

敏矽微電子Cortex-M0學(xué)習(xí)筆記05——端口外部中斷實(shí)例

jf_pJlTbmA9 ? 來源:敏矽MCU ? 作者:敏矽MCU ? 2023-09-26 17:10 ? 次閱讀

1、目的

本篇學(xué)習(xí)筆記我們主要來了解ME32F030的中斷系統(tǒng),首先通過對ME32F030終端系統(tǒng)和中斷控制存器進(jìn)行學(xué)習(xí),最后通過實(shí)際的GPIO端口中斷實(shí)例掌握中斷函數(shù)的編程實(shí)現(xiàn)來加深掌握ME32F030中斷系統(tǒng)的編程方法。

2、ME32F030中斷概述

中斷是單片機(jī)系統(tǒng)重要的組成部分,使單片機(jī)能夠快速的對事件請求做出響應(yīng)。ME32F030靠內(nèi)部的嵌套向量中斷控制器(NVIC)來進(jìn)行中斷的調(diào)度,它是 Cortex?-M0 內(nèi)核的一部分。它可以讓 CPU 以最短的時(shí)間對中斷作出反應(yīng)。主要的特征有:

? 較短的中斷響應(yīng)延遲.

? 處理系統(tǒng)異常和外設(shè)中斷.

? 支持 32 個(gè)中斷向量.

? 四種可編程的中斷響應(yīng)優(yōu)先級別.

? 產(chǎn)生軟件中斷.

? 可配置的不可屏蔽中斷源會有詳細(xì)的說明。

3、ME32F030嵌套向量中斷控制器(NVIC)

嵌套向量中斷控制器(NVIC)負(fù)責(zé)著整個(gè)MCU的中斷管理,除了管理我們常用的外設(shè)中斷源,還包括非屏蔽中斷源的管理。具體管理的中斷源及其中斷序號,其實(shí)在CMSDK_CM0.h中定義好了,通過程序定義對具體管理的中斷源一目了然,定義的內(nèi)容如下圖所示。

wKgaomUD0weAYUnTAAB-kbCTLjA223.png

中斷源

ME32F030的中斷系統(tǒng)是由一系列的NVIC寄存器組成的,這些寄存器可用于中斷 IRQ0~IRQ31, 包括中斷使能,等待和優(yōu)先級等操作。如果中斷被允許,并且相應(yīng)中斷掛起被設(shè)置,NVIC 將會根據(jù)中斷優(yōu)先級觸發(fā)中斷。反之,中斷被禁止,中斷源只會改變中斷掛起狀態(tài),而 NVIC 不會對中斷源信號采取任何動作,不論任何中斷優(yōu)先級。具體的NVIC寄存器組如表格所示:

wKgZomUD0wiAFe38AAHO0mJ5HuA243.png

NVIC寄存器列表

2-1 中斷允許寄存器

中斷允許寄存器(ISER)用于使能中斷設(shè)置,同時(shí)可返回當(dāng)前允許中斷設(shè)置。需要注意的是,對該寄存器寫0是無效的,是不能禁止中斷的。要禁止中斷,就需要下面介紹的中斷禁止寄存器。

2-2 中斷禁止寄存器

有使能中斷的設(shè)置,相應(yīng)的就會有禁止中斷設(shè)置,這就是中斷禁止寄存器的作用。對寄存器進(jìn)行寫1操作,就可以禁止中斷設(shè)置。。需要注意的是,對該寄存器寫0是無效的。對寄存器進(jìn)行讀操作,同返回當(dāng)前禁止中斷設(shè)置。

2-3 中斷掛起寄存器

當(dāng)有中斷事件發(fā)生時(shí),中斷掛起寄存器(ISPR)中對應(yīng)的中斷位就會置位 。此時(shí)讀取寄存器就可以判斷具體的中斷源。同時(shí)我們也可以向寄存器的中斷位寫1,來強(qiáng)制中斷進(jìn)入掛起狀態(tài)。

2-4 清除中斷掛起寄存器

當(dāng)MCU響應(yīng)了中斷請求,并且執(zhí)行完對應(yīng)的中斷子程序后,MCU便會返回?cái)帱c(diǎn)處繼續(xù)運(yùn)行。但在返回前需要通過清除中斷掛起寄存器(ICPR),來清除對應(yīng)的中斷掛起,這樣當(dāng)次的中斷流程算是完整結(jié)束。

2-5 中斷優(yōu)先級寄存器

如同我們做事情有輕重緩急之分,單片機(jī)對中斷的處理也有“輕重緩急”。具體就是靠8組中斷優(yōu)先級寄存器IPR0~7來實(shí)現(xiàn)。每組寄存器對應(yīng)4個(gè)中斷源的優(yōu)先級。這樣剛好決定了中斷0~中斷31的優(yōu)先級。

每一組的中斷優(yōu)先級寄存器IPRn的每個(gè)字節(jié)最高兩位決定優(yōu)先級,因此有0~3共4個(gè)優(yōu)先級可以選擇,越低的值表示優(yōu)先級越高,當(dāng)優(yōu)先級更高的中斷發(fā)生時(shí),高優(yōu)先級的中斷會打斷低優(yōu)先級中斷。如果是同優(yōu)先級中斷,則并不會打斷當(dāng)前中斷,而是依次響應(yīng)中斷。中斷優(yōu)先級寄存器IPRn如圖所示:

wKgaomUD0wqAf5OvAAD2RL9IKRE108.png

這里介紹個(gè)快速的方法來計(jì)算中斷 M 的 IPR 寄存器號:

? 計(jì)算對應(yīng)的 IPR 寄存器號, N, N = M / 4

? 計(jì)算 IPR 寄存器內(nèi)的字節(jié)偏移量 M % 4, 其中:

– 字節(jié)偏移量 0 對應(yīng)寄存器的位 7:0

– 字節(jié)偏移量 1 對應(yīng)寄存器的位 15:8

– 字節(jié)偏移量 2 對應(yīng)寄存器的位 23:16

– 字節(jié)偏移量 3 對應(yīng)寄存器的位 31:24

4、ME32F030端口中斷例程

本篇中我們首先講解了ME32F030的GPIO中斷系統(tǒng),然后又介紹了嵌套向量中斷控制器(NVIC)的原理。

最后,我們還是要通過具體的實(shí)例來把我們學(xué)到的理論知識應(yīng)用到實(shí)際的例子中。我們將兩者結(jié)合起來做個(gè)小實(shí)驗(yàn),測試程序的代碼如下:

unsignedintuiCnt=0;//端口反轉(zhuǎn)次數(shù)

intmain(void)
{
	PA->DIR_b.DIR0=1;//PA_0設(shè)置為輸出口

	PA->IS_b.ISENSE0=0;//PA_0設(shè)置為沿觸發(fā)

	PA->IBE_b.IBE0=1;//PA_0上升沿和下降沿都觸發(fā)中斷

	PA->IC_b.CLR0=1;//PA_0中斷標(biāo)志位清除

	PA->IE_b.MASK0=1;//PA_0中斷使能

	PB->DIR_b.DIR9=1;//PB_9設(shè)置為輸出口

NVIC_EnableIRQ(PA_IRQn);//使能PA_IRQ中斷

lcd_init();//LCD液晶初始化

while(1)
{

	uiCnt++;//端口反轉(zhuǎn)次數(shù)加1

	PA->NOT_b.NOT0=1;//PA_0輸出取反

	SYS_DelaymS(500);

	if(uiCnt==20)//當(dāng)反轉(zhuǎn)20次時(shí)
		{
			PA->IE_b.MASK0=0;//PA_0中斷關(guān)閉
		}
}
}

//PA_IRQ中斷子程序
voidPA_IRQHandler(void)
{
PB->NOT_b.NOT9=1;//PB_9(LED燈)輸出取反

PA->IC_b.CLR0=1;//清除PA_0中斷位

//LCD顯示中斷發(fā)生的次數(shù)
LCD->MEMMAP1=lcd[uiCnt/10]|(lcd[uiCnt%10]<<16);
}

測試程序是通過PA_0端口輸出反轉(zhuǎn),來產(chǎn)生下降沿和上升沿。但同時(shí)它的端口中斷功能是被使能的,因此可以通過輸出電平來“觸發(fā)”自己的中斷。在中斷服務(wù)子程序中,LED小燈端口輸出取反來進(jìn)行點(diǎn)亮和熄滅,同時(shí)加入了LCD段碼液晶來顯示中斷發(fā)生的次數(shù)。在程序全速運(yùn)行的過程中,當(dāng)端口輸出反轉(zhuǎn)20次之后,會關(guān)閉端口的中斷功能。接下來下載仿真例程來進(jìn)行說明。

程序下載并仿真后,先在程序這兩處打上斷點(diǎn)。然后用快捷鍵F5全速運(yùn)行,程序首先會運(yùn)行到第78行處的斷點(diǎn),這時(shí)端口還沒有進(jìn)行輸出反轉(zhuǎn)。接下來用快捷鍵F10單步運(yùn)行觀察。

wKgZomUD0wuAXgyAAACpTIcysHA394.png

仿真1

F10單步運(yùn)行后,發(fā)現(xiàn)程序已經(jīng)跳轉(zhuǎn)到了PA_IRQ中斷服務(wù)子程序中,繼續(xù)F10單步運(yùn)行并觀察執(zhí)行每一步的現(xiàn)象,直到把中斷服務(wù)子程序走完。

wKgaomUD0wyAeKJaAABf_wdrSks474.png

仿真2

中斷服務(wù)子程序內(nèi)的代碼全部運(yùn)行后的效果如圖所示,首先LED小燈的端口輸出取反,把LED小燈給點(diǎn)亮后(下次再進(jìn)中斷會輸出取反熄滅,依次往復(fù))。LCD段碼液晶顯示01,這說明發(fā)生了1次中斷。

wKgaomUD0w6AW5zEABEiltcRNAU943.png

仿真結(jié)果

通過單步仿真我們清楚了中斷發(fā)生后的處理流程,接下來就可以把之前打的兩個(gè)斷點(diǎn)取消掉,然后在83行的位置打上一個(gè)斷點(diǎn),隨后F5全速運(yùn)行程序,等待程序停到斷點(diǎn)處。在等待的過程中,LED小燈保持閃爍,LCD段碼液晶上的數(shù)字一直在自加。當(dāng)程序停到斷點(diǎn)處后,LCD段碼液晶顯示為20。繼續(xù)單步運(yùn)行后,端口PA_0的中斷功能就被關(guān)閉了。

wKgZomUD0w-AE_T9AABST-bUrXU976.png

仿真3

關(guān)閉中斷后,再次全速運(yùn)行程序。我們發(fā)現(xiàn)小燈不再閃爍了,段碼液晶顯示的數(shù)字也不再自加。這是因?yàn)槲覀円呀?jīng)把端口中斷關(guān)閉掉了,雖然uiCnt還在自加。但是已經(jīng)進(jìn)不了中斷子程序去更新顯示。因此依舊停留顯示在20。我們不妨把uiCnt添加到Watch窗口中來看一下,添加方法如圖所示。雙擊ucCnt變量名,選中后右鍵選擇“Add uiCnt to”,“Watch 1”,這樣就添加到Watch1窗口中了。

wKgZomUD0xGAZieIAAB60yNFJms489.png

仿真4

通過Watch1窗口看到端口已經(jīng)反轉(zhuǎn)37次了,但LCD液晶已經(jīng)停留在20。這也說明中斷確實(shí)被關(guān)閉了,因此液晶一直沒能更新顯示。

wKgaomUD0xOALU4wAAAaHLhn2ug389.png

仿真5

wKgZomUD0xWAN1lFABC0DCRuYp0942.png

仿真結(jié)果2

來源:敏矽MCU

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

    關(guān)注

    112

    文章

    16361

    瀏覽量

    178055
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    964

    瀏覽量

    32079
  • Cortex-M0
    +關(guān)注

    關(guān)注

    4

    文章

    124

    瀏覽量

    38693
  • 外部中斷
    +關(guān)注

    關(guān)注

    1

    文章

    131

    瀏覽量

    15825
收藏 人收藏

    評論

    相關(guān)推薦

    cortex-m0學(xué)習(xí)資料

    本帖最后由 jheng 于 2015-4-9 21:54 編輯 cortex-m0學(xué)習(xí)
    發(fā)表于 04-09 21:48

    深入淺出Cortex-M0學(xué)習(xí)資料

    深入淺出Cortex-M0學(xué)習(xí)資料
    發(fā)表于 06-18 10:50 ?0次下載
    深入淺出<b class='flag-5'>Cortex-M0</b><b class='flag-5'>學(xué)習(xí)</b>資料

    Cortex-M0的指令集

    Cortex-M0的指令集,有需要的下來看看。
    發(fā)表于 01-13 17:17 ?29次下載

    cortex-m0加密

    cortex-m0加密
    發(fā)表于 10-13 15:08 ?5次下載
    <b class='flag-5'>cortex-m0</b>加密

    MCU學(xué)習(xí)筆記_ARM Cortex M0_簡介

    MCU學(xué)習(xí)筆記ARM Cortex M01. RM的CPU core 的基本概念2. ARM Cortex
    發(fā)表于 10-28 11:21 ?15次下載
    MCU<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>_ARM <b class='flag-5'>Cortex</b> <b class='flag-5'>M0</b>_簡介

    基于ARM Cortex-M0核的MCU設(shè)計(jì)及應(yīng)用

    知網(wǎng)鏈接:基于ARM Cortex-M0核的MCU設(shè)計(jì)及應(yīng)用
    發(fā)表于 11-05 15:35 ?18次下載
    基于ARM <b class='flag-5'>Cortex-M0</b>核的MCU設(shè)計(jì)及應(yīng)用

    Cortex-M0中斷控制和系統(tǒng)控制(二)

    每一個(gè)外部中斷都有一個(gè)對應(yīng)的優(yōu)先級寄存器,Cortex-M0中NVIC-IPR共有8個(gè)寄存器,而每個(gè)寄存器管理4個(gè)IRQ中斷,所以M0的IR
    發(fā)表于 02-08 15:48 ?3次下載
    <b class='flag-5'>Cortex-M0</b><b class='flag-5'>中斷</b>控制和系統(tǒng)控制(二)

    Cortex-M0中斷控制和系統(tǒng)控制知識點(diǎn)

    每一個(gè)外部中斷都有一個(gè)對應(yīng)的優(yōu)先級寄存器,Cortex-M0中NVIC-IPR共有8個(gè)寄存器,而每個(gè)寄存器管理4個(gè)IRQ中斷,所以M0的IR
    的頭像 發(fā)表于 03-20 09:28 ?3207次閱讀

    微電子Cortex-M0學(xué)習(xí)筆記08——基本定時(shí)器詳解

    微電子Cortex-M0學(xué)習(xí)筆記08——基本定時(shí)器詳解
    的頭像 發(fā)表于 09-26 17:13 ?886次閱讀
    <b class='flag-5'>敏</b><b class='flag-5'>矽</b><b class='flag-5'>微電子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>08——基本定時(shí)器詳解

    微電子Cortex-M0學(xué)習(xí)筆記07——串口通信詳解

    微電子Cortex-M0學(xué)習(xí)筆記07——串口通信詳解
    的頭像 發(fā)表于 09-26 17:11 ?1127次閱讀
    <b class='flag-5'>敏</b><b class='flag-5'>矽</b><b class='flag-5'>微電子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>07——串口通信詳解

    微電子Cortex-M0學(xué)習(xí)筆記06——段式LCD液晶實(shí)例

    微電子Cortex-M0學(xué)習(xí)筆記06——段式LCD液晶實(shí)
    的頭像 發(fā)表于 09-26 17:10 ?732次閱讀
    <b class='flag-5'>敏</b><b class='flag-5'>矽</b><b class='flag-5'>微電子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>06——段式LCD液晶<b class='flag-5'>實(shí)例</b>

    微電子Cortex-M0學(xué)習(xí)筆記04——GPIO詳解及應(yīng)用實(shí)例

    微電子Cortex-M0學(xué)習(xí)筆記04——GPIO詳解及應(yīng)用
    的頭像 發(fā)表于 09-26 17:07 ?1067次閱讀
    <b class='flag-5'>敏</b><b class='flag-5'>矽</b><b class='flag-5'>微電子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>04——GPIO詳解及應(yīng)用<b class='flag-5'>實(shí)例</b>

    微電子Cortex-M0學(xué)習(xí)筆記03——時(shí)鐘系統(tǒng)設(shè)計(jì)例程

    微電子Cortex-M0學(xué)習(xí)筆記03——時(shí)鐘系統(tǒng)設(shè)計(jì)例程
    的頭像 發(fā)表于 09-26 17:06 ?966次閱讀
    <b class='flag-5'>敏</b><b class='flag-5'>矽</b><b class='flag-5'>微電子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>03——時(shí)鐘系統(tǒng)設(shè)計(jì)例程

    微電子Cortex-M0學(xué)習(xí)筆記02——Cortex-M0開發(fā)環(huán)境的建立及調(diào)試

    微電子Cortex-M0學(xué)習(xí)筆記02——Cortex-M
    的頭像 發(fā)表于 09-26 17:05 ?1588次閱讀
    <b class='flag-5'>敏</b><b class='flag-5'>矽</b><b class='flag-5'>微電子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>02——<b class='flag-5'>Cortex-M0</b>開發(fā)環(huán)境的建立及調(diào)試

    微電子Cortex-M0學(xué)習(xí)筆記01——芯片簡介

    微電子Cortex-M0學(xué)習(xí)筆記01——芯片簡介
    的頭像 發(fā)表于 09-26 17:03 ?902次閱讀
    <b class='flag-5'>敏</b><b class='flag-5'>矽</b><b class='flag-5'>微電子</b><b class='flag-5'>Cortex-M0</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>01——芯片簡介
    主站蜘蛛池模板: 免费两性的视频网站| 狠狠狠色丁香婷婷综合久久五月| 1024国产基地永久免费| 爽好舒服快小柔小说| 特别黄的免费视频大片| 四虎永久在线免费观看| 国产婷婷一区二区三区| 男女午夜免费视频| 免费污视频在线| 日本番囗| 午夜在线观看免费| 涩涩色中文综合亚洲| 性感美女毛片| 高清性色生活片欧美在线| 国产理论精品| 亚洲成a人片7777| 日本一区二区三区四区在线观看| ww欧洲ww欧洲视频| 不卡的毛片| 性欧美性free| 成人小视频在线| 中国高清色视频www| 四虎永久网址影院| 91p0rn永久备用地址二| 欧美精品xxxⅹ欧美| 色偷偷亚洲| 天天综合色天天综合色sb| sss欧美华人整片在线观看| 亚洲 欧美 另类 吹潮| 岛国三级在线看| 钻石午夜影院| 色综合九九| 天天爱天天做天天爽天天躁| 免费伦费一区二区三区四区| 久久综合九色综合网站| 精品久久看| 国产黄色a三级三级三级| 日韩在线一区视频| 日日久| 在线天堂中文新版www| 国产3p在线播放|