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

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

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

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

安芯教育科技 ? 來源:靈動(dòng)MM32MCU ? 2023-03-20 09:28 ? 次閱讀

上一篇介紹了Cortex-M0中斷控制和系統(tǒng)控制(一),本篇將繼續(xù)介紹Cortex-M0中斷控制知識(shí)。

每一個(gè)外部中斷都有一個(gè)對(duì)應(yīng)的優(yōu)先級(jí)寄存器,Cortex-M0中NVIC-IPR共有8個(gè)寄存器,而每個(gè)寄存器管理4個(gè)IRQ中斷,所以M0的IRQ中斷源最多只支持32個(gè),再加上16個(gè)內(nèi)核中斷,也就是說M0最多48個(gè)中斷源。

a58d7684-c4c8-11ed-bfe3-dac502259ad0.png

a59e6d4a-c4c8-11ed-bfe3-dac502259ad0.png

Cortex-M0采用Armv6-M架構(gòu),優(yōu)先級(jí)寄存器配置位有8位,但是有效位只有最高2位,這個(gè)地方很多人使用了Cortex-M3后一直也認(rèn)為Cortex-M0也是最高3或4位有效位,在arm官方資料中有對(duì)比兩個(gè)版本的差別。因此Cortex-M0可編程優(yōu)先級(jí)有4個(gè),加上3個(gè)固定的優(yōu)先級(jí)(復(fù)位、NMI、HardFault),Cortex-M0總共有7個(gè)中斷優(yōu)先級(jí)。

a5b3668c-c4c8-11ed-bfe3-dac502259ad0.png

Cortex-M0內(nèi)核的中斷優(yōu)先級(jí)寄存器是以最高位(MSB)對(duì)齊的,并且只支持字傳輸,每次訪問都會(huì)同時(shí)涉及4個(gè)中斷優(yōu)先級(jí)寄存器。見下圖:

a60657e8-c4c8-11ed-bfe3-dac502259ad0.png

因?yàn)锽it0 - Bit5沒有使用,所以如果沒有進(jìn)行寫操作讀出都為0。

由于不同的 Cortex-M 系列,其中斷優(yōu)先級(jí)是不一樣的,所以在 CMSIS 庫中的頭文件中可以查看優(yōu)先級(jí)的數(shù)量 \_\_NVIC\_PRIO\_BITS。

中斷優(yōu)先級(jí)寄存器的編程應(yīng)該在中斷使能之前,其通常是在程序開始時(shí)完成的。arm官方資料提示應(yīng)該避免在中斷使能之后改變中斷優(yōu)先級(jí),因?yàn)檫@種情況的結(jié)果在ARMv6-M系統(tǒng)結(jié)構(gòu)是不可預(yù)知的,并且不被Cortex-M0處理器支持。Cortex-M3/M4處理器的情況又有所不同,他們都支持中斷優(yōu)先級(jí)的動(dòng)態(tài)切換。Cortex-M3處理器和Cortex-M0處理器的另外一個(gè)區(qū)別是,Cortex-M3訪問中斷優(yōu)先級(jí)寄存器時(shí)支持字節(jié)或半字傳輸,因此可以每次只設(shè)置一個(gè)寄存器。如果需要改變優(yōu)先級(jí),程序中需要關(guān)閉中斷后再重新設(shè)置中斷優(yōu)先級(jí)寄存器。

在 Cortex-M內(nèi)核中,一個(gè)中斷的優(yōu)先級(jí)數(shù)值越低,邏輯優(yōu)先級(jí)卻越高。比如,中斷優(yōu)先級(jí)為2的中斷可以搶占中斷優(yōu)先級(jí)為3的中斷,但反過來就不行。換句話說,中斷優(yōu)先級(jí)2比中斷優(yōu)先級(jí)3的優(yōu)先級(jí)更高。

Cortex-M0處理器對(duì)中斷嵌套的支持無需任何軟件干預(yù),如果MCU已經(jīng)在運(yùn)行一個(gè)中斷,而有了新的更高優(yōu)先級(jí)的中斷請(qǐng)求,正在運(yùn)行的中斷將會(huì)被暫停,轉(zhuǎn)而執(zhí)行更高優(yōu)先級(jí)的中斷,高優(yōu)先級(jí)中斷執(zhí)行完成后又回到原來的低優(yōu)先級(jí)中斷。如果出現(xiàn)兩個(gè)同一優(yōu)先級(jí)的中斷,則是判斷誰開始發(fā)起中斷請(qǐng)求,MCU會(huì)先執(zhí)行同一優(yōu)先級(jí)中首先發(fā)起請(qǐng)求的中斷。

MM32F0130系列中斷向量表:

typedefenumIRQn{

NonMaskableInt_IRQn=-14,///

設(shè)置中斷優(yōu)先級(jí)的流程:先讀一個(gè)字,再修改對(duì)應(yīng)字節(jié),最后整個(gè)字寫回。

1.1. C代碼

void__NVIC_SetPriority()
{
unsignedlongtemp;//定義一個(gè)臨時(shí)變量
temp=*(volatileunsignedlong)(0xE000E400);//讀取IRP0值
temp&=(0xFF00FFFF|(0xC0<

1.2. 匯編代碼

在程序中可以一次設(shè)置多個(gè)中斷優(yōu)先級(jí)。

void__NVIC_SetPriority()
{
LDRR0,=0xE000E100;//設(shè)置使能中斷寄存器地址
MOVSR1,#0x4;//中斷#2
STRR1,[R0];//使能#2中斷
LDRR0,=0xE000E200;//設(shè)置掛起中斷寄存器地址
MOVSR1,#0x4;//中斷#2
STRR1,[R0];//掛起#2中斷
LDRR0,=0xE000E280;//設(shè)置清除中斷掛起寄存器地址
MOVSR1,#0x4;//中斷#2
STRR1,[R0];//清除#2的掛起狀態(tài)
}

1.3. CMSIS標(biāo)準(zhǔn)設(shè)備驅(qū)動(dòng)函數(shù)

//設(shè)置中斷優(yōu)先級(jí)
__STATIC_INLINEvoid__NVIC_SetPriority(IRQn_TypeIRQn,uint32_tpriority)
{
if((int32_t)(IRQn)>=0){
NVIC->IP[_IP_IDX(IRQn)]=((uint32_t)(NVIC->IP[_IP_IDX(IRQn)]&~(0xFFUL<SHP[_SHP_IDX(IRQn)]=((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)]&~(0xFFUL<

這里的參數(shù)IRQn為中斷ID號(hào),可以為負(fù),也可以為正。當(dāng)IRQn為負(fù)時(shí),設(shè)置系統(tǒng)異常的優(yōu)先級(jí),當(dāng)IRQn大于等于0時(shí),設(shè)置外設(shè)中斷優(yōu)先級(jí),芯片廠商會(huì)提供中斷向量表IRQn\_Type,應(yīng)用層只需要調(diào)用即可;priority是0、1、2、3,函數(shù)內(nèi)部會(huì)自動(dòng)移位到對(duì)應(yīng)的優(yōu)先級(jí)最高2位。

方法一:
voidNVIC_SetPriority(TIM1_CC_IRQn,3);//設(shè)置#14中斷的優(yōu)先級(jí)為0xC0
方法二:
voidNVIC_Config(void)
{NVIC_InitTypeDefNVIC_InitStructure;

NVIC_InitStructure.NVIC_IRQChannel=TIM1_CC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

設(shè)置好中斷優(yōu)先級(jí)后,用戶還可以讀取當(dāng)前已經(jīng)設(shè)置的中斷優(yōu)先級(jí)。

審核編輯:湯梓紅

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

    關(guān)注

    68

    文章

    19100

    瀏覽量

    228814
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5294

    瀏覽量

    119814
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1360

    瀏覽量

    40185
  • 中斷
    +關(guān)注

    關(guān)注

    5

    文章

    895

    瀏覽量

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

    關(guān)注

    4

    文章

    124

    瀏覽量

    38615

原文標(biāo)題:Cortex-M0中斷控制和系統(tǒng)控制(二)

文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    靈動(dòng)微課堂 (第175講) | Cortex-M0中斷控制系統(tǒng)控制(一)

    Controller)集成在Cortex-M0處理器里,它與處理器內(nèi)核緊密相連,并且提供了中斷控制功能以及對(duì)系統(tǒng)異常的支持。處理器的NV
    發(fā)表于 07-29 17:14

    靈動(dòng)微課堂 (第176講) | Cortex-M0中斷控制系統(tǒng)控制(二)

    每一個(gè)外部中斷都有一個(gè)對(duì)應(yīng)的優(yōu)先級(jí)寄存器,Cortex-M0NVIC-IPR共有8個(gè)寄存器,而每個(gè)寄存器管理4個(gè)IRQ中斷,所以M0的IR
    發(fā)表于 07-29 18:49

    靈動(dòng)微課堂 (第177講) | Cortex-M0中斷控制系統(tǒng)控制(三)

    Cortex-M0處理器允許兩種形式的中斷請(qǐng)求:電平觸發(fā)和脈沖輸入。電平觸發(fā)是外設(shè)的中斷請(qǐng)求有持續(xù)的電平信號(hào),若電平信號(hào)在處理器從ISR返回之前沒有被取消,則中斷返回后將再次觸發(fā)已經(jīng)服
    發(fā)表于 07-29 18:51

    靈動(dòng)微課堂 (第178講) | Cortex-M0中斷控制系統(tǒng)控制(四)

    Cortex-M0系統(tǒng)控制塊(SCB)是內(nèi)核外設(shè)的主要模塊之一,提供系統(tǒng)控制以及系統(tǒng)執(zhí)行信息,包括配置,控制,上報(bào)
    發(fā)表于 08-06 14:49

    靈動(dòng)微課堂 (第180講) | Cortex-M0中斷控制系統(tǒng)控制(六)

    MRS, MSR, 1.2存儲(chǔ)器訪問確保訪問的內(nèi)存地址是對(duì)齊的,這一點(diǎn)很重要。在ARMv6-M架構(gòu)(包括Cortex-M0Cortex-M0處理器)上不支持非對(duì)齊傳輸。任何未對(duì)齊內(nèi)存
    發(fā)表于 08-23 11:02

    Cortex-A7中斷系統(tǒng)知識(shí)點(diǎn)匯總,看完你就懂了

    Cortex-A7中斷系統(tǒng)知識(shí)點(diǎn)匯總,看完你就懂了
    發(fā)表于 11-29 08:00

    基于Cortex-M0中斷系統(tǒng)的IP集成與中斷服務(wù)函數(shù)設(shè)計(jì)

    為極術(shù)線上技術(shù)分享干貨匯總(含PPT下載及視頻回放及線下活動(dòng)資料下載,持續(xù)更新,歡迎收藏~整理:極術(shù)社區(qū)集創(chuàng)賽Arm杯彭吉安-(集創(chuàng)賽)基于Cortex-M0中斷系統(tǒng)的IP集成與中斷
    發(fā)表于 12-14 07:15

    恩智浦推出基于Cortex-M0控制LPC1100微控制

    恩智浦推出基于Cortex-M0控制LPC1100微控制器系列 恩智浦半導(dǎo)體(NXP Semiconductors)今天宣布,旗下基于ARM Cortex-M0的LPC1100微
    發(fā)表于 11-18 09:04 ?1495次閱讀

    cortex-m0加密

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

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

    ARMv7-M和ARMv6-M都有的SCB寄存器名稱相同,但是ARMv7-M寄存器數(shù)量和有效控制bit位比ARMv6-M豐富了不少。
    發(fā)表于 02-08 15:41 ?0次下載
    <b class='flag-5'>Cortex-M0</b><b class='flag-5'>中斷</b><b class='flag-5'>控制</b>和<b class='flag-5'>系統(tǒng)控制</b>(四)

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

    每一個(gè)外部中斷都有一個(gè)對(duì)應(yīng)的優(yōu)先級(jí)寄存器,Cortex-M0NVIC-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><b class='flag-5'>控制</b>和<b class='flag-5'>系統(tǒng)控制</b>(二)

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

    Cortex-M0采用Armv6-M架構(gòu),優(yōu)先級(jí)寄存器配置位有8位,但是有效位只有最高2位,這個(gè)地方很多人使用了Cortex-M3后一直也認(rèn)為Cortex-M0也是最高3或4位有效位
    的頭像 發(fā)表于 04-24 11:20 ?2993次閱讀

    介紹Cortex-M0中斷控制知識(shí)

    中斷一般是由硬件(例如外設(shè)、外部引腳)產(chǎn)生,當(dāng)某種內(nèi)部或外部事件發(fā)生時(shí),MCU的中斷系統(tǒng)將迫使 CPU 暫停正在執(zhí)行的程序,轉(zhuǎn)而去進(jìn)行中斷事件的處理
    的頭像 發(fā)表于 03-16 13:39 ?1534次閱讀

    Cortex-M3中斷優(yōu)先級(jí)的相關(guān)知識(shí)

    本文詳細(xì)介紹Cortex-M3中斷優(yōu)先級(jí)相關(guān)知識(shí)。
    的頭像 發(fā)表于 03-23 11:45 ?2525次閱讀
    <b class='flag-5'>Cortex-M</b>3<b class='flag-5'>中斷</b>優(yōu)先級(jí)的相關(guān)<b class='flag-5'>知識(shí)</b>

    Cortex-M0系統(tǒng)控制塊(SCB)介紹

    Cortex-M0系統(tǒng)控制塊(SCB)是內(nèi)核外設(shè)的主要模塊之一,提供系統(tǒng)控制以及系統(tǒng)執(zhí)行信息,包括配置,控制,上報(bào)
    的頭像 發(fā)表于 03-25 15:14 ?5036次閱讀