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

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

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

CW32L083系列MCU中斷系統(tǒng)介紹

武漢芯源半導(dǎo)體有限公司 ? 2022-12-01 11:36 ? 次閱讀

本文針對(duì)CW32L083系列MCU,同系列產(chǎn)品亦可參考。

ARM? Cortex?-M0+ 內(nèi)核的嵌套向量中斷控制器 (NVIC),用于管理中斷和異常。NVIC和處理器內(nèi)核緊密相連,可以實(shí)現(xiàn)低延遲的異常和中斷處理。處理器支持最多32個(gè)中斷請(qǐng)求 (IRQ)輸入,支持多個(gè)內(nèi)部異常。

主要特性

? 16個(gè)內(nèi)部異常

? 32個(gè)可屏蔽外部中斷

? 4個(gè)可編程的優(yōu)先級(jí)

? 低延時(shí)的異常和中斷處理

? 支持中斷嵌套

? 中斷向量表重映射

本文介紹了處理器的 32 個(gè)外部中斷請(qǐng)求(IRQ0 ~ IRQ31),處理器內(nèi)部異常的具體情況請(qǐng)參考“ARM? Cortex?-M0+Technical Reference Manual”與“ARM? v6-M Architecture Reference Manual”。

中斷優(yōu)先級(jí)

外部中斷可設(shè)置 4 級(jí)優(yōu)先級(jí),最高優(yōu)先級(jí)為“0”,最低優(yōu)先級(jí)為“3”,默認(rèn)值為“0”。當(dāng)處理器正在執(zhí)行一個(gè)中斷處理程序時(shí),如果出現(xiàn)一個(gè)更高優(yōu)先級(jí)的中斷,那么這個(gè)中斷就被搶占。如果出現(xiàn)的中斷的優(yōu)先級(jí)和正在處理的中斷的優(yōu)先級(jí)相同或更低,這個(gè)中斷就不會(huì)被搶占,但是新中斷的狀態(tài)就變?yōu)閽炱?。如果多個(gè)掛起的中斷具有相同的優(yōu)先級(jí),中斷編號(hào)越小的掛起中斷優(yōu)先處理。例如,如果IRQ[0]和IRQ[1]均掛起時(shí),并且兩者的優(yōu)先級(jí)相同,那么先處理 IRQ[0]。

中斷向量表

ARM? Cortex?-M0+ 響應(yīng)中斷時(shí),處理器自動(dòng)從存儲(chǔ)器的中斷向量表中取出中斷服務(wù)程序 ( ISR )的起始地址。中斷向量表包括主棧指針(MSP)的初始值,內(nèi)部異常和外部中斷的服務(wù)程序入口地址。每個(gè)中斷向量占用1個(gè)字(4 字節(jié)),中斷向量的存儲(chǔ)地址為向量編號(hào)乘以4,下面的是CW32L083的中斷向量表。

poYBAGOIEV2AK-UNAAQzkx5eI0c521.jpg

poYBAGOIEV2AUzSpAAN5f_QXg4g519.jpg

CW32L083由于部分外設(shè)的中斷復(fù)用一個(gè)IRQ中斷源,在中斷服務(wù)程序中應(yīng)先檢查中斷標(biāo)志位,以確定產(chǎn)生中斷的外設(shè)。NMI在CW32L083中未使用。HSE 、LSE 時(shí)鐘信號(hào)起振失敗和 LSI、LSE、HSIOSC、HSE、PLL 時(shí)鐘信號(hào)穩(wěn)定對(duì)應(yīng) RCC 全局中斷。HSE 或 LSE 時(shí)鐘信號(hào)在運(yùn)行中失效對(duì)應(yīng) FAULT 中斷。

中斷寄存器的相關(guān)配置

1.中斷的使能、掛起、清除掛起

ARM? Cortex-M0+處理器支持最多32個(gè)外部中斷源,分別對(duì)應(yīng)中斷使能設(shè)置寄存器NIVC_ISER的32個(gè)使能位,和中斷使能清除寄存器NVIC_ICER的32個(gè)禁止位。將使能位置1,允許中斷;將禁止位置1,禁止中斷。上文中NVIC中斷使能僅針對(duì)處理器 NVIC而言,外設(shè)的中斷是否使能,還受相應(yīng)外設(shè)的中斷控制寄存器控制。

而在中斷發(fā)生的時(shí)候,如果系統(tǒng)正在處理相同優(yōu)先級(jí)的或者更高優(yōu)先級(jí)的中斷,系統(tǒng)將不會(huì)立馬的處理這個(gè)中斷,而是將這個(gè)中斷的狀態(tài)設(shè)置為掛起,保存在中斷掛起狀態(tài)寄存器中,在處理器未進(jìn)去此中斷處理之前,如果沒(méi)有手動(dòng)清除掛起狀態(tài),這個(gè)狀態(tài)會(huì)一直有效,等處理器進(jìn)入中斷處理的時(shí)候,硬件會(huì)自動(dòng)清除相應(yīng)的中斷掛起狀態(tài)。也可以通過(guò)設(shè)置中斷掛起設(shè)置寄存器NVIC_ISPR的對(duì)應(yīng)位,將此中斷的狀態(tài)設(shè)置為掛起狀態(tài),如果系統(tǒng)沒(méi)有正在處理與之相同優(yōu)先級(jí)或更高優(yōu)先級(jí)的中斷,此中斷將被立即響應(yīng)并處理??梢酝ㄟ^(guò)設(shè)置中斷掛起清除寄存器NVIC_ICPR的對(duì)應(yīng)位,將此中斷的狀態(tài)設(shè)置為掛起清除狀態(tài)。

2.中斷的優(yōu)先級(jí)、中斷屏蔽

中斷優(yōu)先級(jí)控制寄存器NVIC_IPR0 ~ NVIC_IPR7,用于設(shè)置IRQ0~IRQ31 的中斷優(yōu)先級(jí),每個(gè)中斷源使用8位,在CW32L083中僅使用了高兩位,最多可設(shè)置4個(gè)中斷優(yōu)先級(jí)。

在某些特殊場(chǎng)合,需要禁止所有中斷,可以使用中斷屏蔽寄存器PRIMASK實(shí)現(xiàn)。PRIMASK只有最低1位有效,將此位置1,除了NMI和硬件錯(cuò)誤異常之外的所有外部中斷和異常都被禁止;清0后,允許響應(yīng)中斷和異常。該位復(fù)位后默認(rèn)為0。

按鍵中斷檢測(cè)實(shí)驗(yàn)分析

以CW32L083評(píng)估板為例,按鍵連接至CW32L083的PA4、PA5端口,LED連接至PC2、PC3接口。按鍵按下將產(chǎn)生中斷,在中斷服務(wù)程序中進(jìn)行LED翻轉(zhuǎn)。

int32_t main(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA的配置時(shí)鐘 __RCC_GPIOC_CLK_ENABLE(); // 使能GPIOC的配置時(shí)鐘 //按鍵GPIO初始化 GPIO_InitStruct.IT = GPIO_IT_RISING | GPIO_IT_FALLING; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pins =GPIO_PIN_4 | GPIO_PIN_5; GPIO_Init(CW_GPIOA, &GPIO_InitStruct); //LED的GPIO初始化 GPIO_InitStruct.IT = GPIO_IT_NONE; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pins =GPIO_PIN_2 | GPIO_PIN_3; GPIO_Init(CW_GPIOC, &GPIO_InitStruct); //配置中斷濾波 GPIO_ConfigFilter(CW_GPIOA, bv4, GPIO_FLTCLK_RC150K); //清除PA4、PA5中斷標(biāo)志并使能NVIC GPIOA_INTFLAG_CLR(bv4| bv5); NVIC_EnableIRQ(GPIOA_IRQn); __enable_irq(); //---------------------------------------------------------------------- //相關(guān)程序在中斷服務(wù)GPIOA_IRQHandler中進(jìn)行處理 while (1) { } } //GPIOA的中斷服務(wù)函數(shù) void GPIOA_IRQHandlerCallback(void) { if (CW_GPIOA->ISR_f.PIN4) { GPIOA_INTFLAG_CLR(bv4);清除PA04的中斷標(biāo)志位 PC03_TOG(); } if (CW_GPIOA->ISR_f.PIN5) { GPIOA_INTFLAG_CLR(bv5);//清除PA05的中斷標(biāo)志位 PC02_TOG(); } }

由上面代碼可以看到,如果按下KEY1(PA04),LED1(PC03)的狀態(tài)會(huì)翻轉(zhuǎn),如果松開(kāi)按鍵,LED1又會(huì)翻轉(zhuǎn)一次。在每次執(zhí)行中斷函數(shù)的時(shí)候,需要清除中斷標(biāo)志位即GPIOA_INTFLAG_CLR(bv4)。

聲明:本文內(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)注

    48

    文章

    7397

    瀏覽量

    150660
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6026

    文章

    44458

    瀏覽量

    631086
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16812

    瀏覽量

    349422
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    CW32L010安全低功耗MCU,樹(shù)立M0+產(chǎn)品行業(yè)新標(biāo)桿!

    2024年9月26日,武漢芯源半導(dǎo)體CW32L010系列產(chǎn)品正式官方發(fā)布。這款產(chǎn)品以其卓越的產(chǎn)品性能,迅速在業(yè)界引起了廣泛關(guān)注,并成功樹(shù)立M0+產(chǎn)品行業(yè)的新標(biāo)桿。CW32L010系列
    的頭像 發(fā)表于 10-09 10:12 ?322次閱讀
    <b class='flag-5'>CW32L</b>010安全低功耗<b class='flag-5'>MCU</b>,樹(shù)立M0+產(chǎn)品行業(yè)新標(biāo)桿!

    CW32L010安全低功耗MCU,樹(shù)立M0+產(chǎn)品行業(yè)新標(biāo)桿!

    MCU)的眾多特性中,eFlash存儲(chǔ)容量是最主要的關(guān)鍵參數(shù)之一。CW32L010系列產(chǎn)品存儲(chǔ)容量最大 64K 字節(jié) FLASH,數(shù)據(jù)保持 25 年 @-40℃ ~ +85℃,支持擦寫(xiě)保護(hù)、讀保護(hù)
    發(fā)表于 10-09 10:08

    MSPM0 L 系列 MCU硬件開(kāi)發(fā)指南

    電子發(fā)燒友網(wǎng)站提供《MSPM0 L 系列 MCU硬件開(kāi)發(fā)指南.pdf》資料免費(fèi)下載
    發(fā)表于 09-09 10:36 ?0次下載
    MSPM0 <b class='flag-5'>L</b> <b class='flag-5'>系列</b> <b class='flag-5'>MCU</b>硬件開(kāi)發(fā)指南

    CW32L083 IAP跳轉(zhuǎn)后中斷無(wú)響應(yīng)是怎么回事?

    只說(shuō)支持向量偏移,沒(méi)有其它介紹。請(qǐng)問(wèn)哪位大神做過(guò)IAP中斷處理的,指點(diǎn)一下,是不是還需要設(shè)置哪里。我用仿真器測(cè)試,只要是帶中斷的,跳轉(zhuǎn)后,中斷全部無(wú)響應(yīng)。
    發(fā)表于 07-26 07:17

    CKS32F107xx系列MCU中斷和事件

    本章節(jié)首先將以MCU開(kāi)發(fā)人員常接觸到的“中斷”、“事件”和“中斷事件”三個(gè)名詞的概念展開(kāi),然后去闡述彼此的主要區(qū)別,最后借助MCU的GPIO外部中斷
    的頭像 發(fā)表于 07-22 09:29 ?449次閱讀
    CKS32F107xx<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的<b class='flag-5'>中斷</b>和事件

    STM8L外部中斷跟普通MCU的外部中斷不一致,為什么?

    最近公司一個(gè)案子需要用到超低功耗MCU,在TI和ST的片子中糾結(jié)了一段時(shí)間,最后選了ST的STM8L151G2U6。 在使用外部中斷的時(shí)候迷糊了,發(fā)現(xiàn)這個(gè)的外部中斷跟普通
    發(fā)表于 05-15 06:23

    請(qǐng)問(wèn)STM32L083的唯一ID為什么有重復(fù)?。?/a>

    ID的讀取代碼如下: for(i=0; i<3; i++) {//STM32L083 ID CODE STM32L083_ID[i] = *(uint32_t
    發(fā)表于 04-17 06:29

    請(qǐng)問(wèn)如何優(yōu)化CW32L083微控制器的功耗?

    在進(jìn)行低功耗設(shè)計(jì)時(shí),如何優(yōu)化CW32L083系列微控制器的功耗?
    發(fā)表于 01-17 07:16

    CW32L083系列微控制器的ADC和DAC模塊要如何使用?怎么配置?

    如何配置和使用CW32L083系列微控制器的ADC和DAC模塊?
    發(fā)表于 01-17 06:08

    CW32單片機(jī)在智能馬桶的應(yīng)用介紹

    24KBRAM、最多87路GPIO,以及一系列增強(qiáng)型外設(shè)。 CW32L083系列產(chǎn)品優(yōu)勢(shì)介紹 1、系統(tǒng)特性 ● ARM^?^ Cortex
    發(fā)表于 12-20 10:06

    MCU中斷處理過(guò)程,MCU如何處理中斷

    當(dāng)MCU接收到一個(gè)中斷信號(hào)時(shí),它會(huì)暫停當(dāng)前正在執(zhí)行的任務(wù),保存現(xiàn)場(chǎng),然后跳轉(zhuǎn)到預(yù)設(shè)的中斷處理程序(Interrupt Service Routine, ISR)去處理這個(gè)中斷
    的頭像 發(fā)表于 12-13 11:48 ?1415次閱讀

    51單片機(jī)中斷系統(tǒng)介紹

    51單片機(jī)中斷系統(tǒng)介紹與運(yùn)用外部中斷系統(tǒng)觸發(fā)數(shù)碼管顯示數(shù)字的代碼實(shí)驗(yàn)
    發(fā)表于 12-05 09:10 ?1次下載

    武漢芯源半導(dǎo)體CW32系列芯片一文徹底搞定

    武漢芯源半導(dǎo)體在MCU領(lǐng)域目前已推出通用高性能CW32F003/030系列、無(wú)線(xiàn)射頻CW32R031/W031系列以及安全低功耗
    發(fā)表于 11-09 19:03
    武漢芯源半導(dǎo)體<b class='flag-5'>CW</b>32<b class='flag-5'>系列</b>芯片一文徹底搞定

    CW32L083如何實(shí)現(xiàn)AUTOTRIM時(shí)鐘校準(zhǔn)?

    CW32L083如何實(shí)現(xiàn)AUTOTRIM時(shí)鐘校準(zhǔn)?
    的頭像 發(fā)表于 11-07 17:17 ?584次閱讀
    <b class='flag-5'>CW32L083</b>如何實(shí)現(xiàn)AUTOTRIM時(shí)鐘校準(zhǔn)?

    射頻MCU CW32W031提前中斷應(yīng)用功能介紹

    CW32W031 提前中斷功能是在芯片讀取一幀數(shù)據(jù)的過(guò)程中,查看已經(jīng)解出來(lái)的數(shù)據(jù),判斷是不是自己想要的,再?zèng)Q定繼續(xù)讀取還是放棄這幀數(shù)據(jù)。
    的頭像 發(fā)表于 11-02 11:42 ?511次閱讀
    射頻<b class='flag-5'>MCU</b> <b class='flag-5'>CW</b>32W031提前<b class='flag-5'>中斷</b>應(yīng)用功能<b class='flag-5'>介紹</b>