精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Cortex-M0中斷控制和系統控制

安芯教育科技 ? 來源:極術社區 ? 作者:極術社區 ? 2022-04-24 11:20 ? 次閱讀

每一個外部中斷都有一個對應的優先級寄存器,Cortex-M0中NVIC-IPR共有8個寄存器,而每個寄存器管理4個IRQ中斷,所以M0的IRQ中斷源最多只支持32個,再加上16個內核中斷,也就是說M0最多48個中斷源。

8dcc7092-c2f1-11ec-bce3-dac502259ad0.png

8de1c0be-c2f1-11ec-bce3-dac502259ad0.png

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

8df7cdaa-c2f1-11ec-bce3-dac502259ad0.png

Cortex-M0內核的中斷優先級寄存器是以最高位(MSB)對齊的,并且只支持字傳輸,每次訪問都會同時涉及4個中斷優先級寄存器。見下圖:

8e104fd8-c2f1-11ec-bce3-dac502259ad0.png

因為Bit0 - Bit5沒有使用,所以如果沒有進行寫操作讀出都為0。

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

中斷優先級寄存器的編程應該在中斷使能之前,其通常是在程序開始時完成的。arm官方資料提示應該避免在中斷使能之后改變中斷優先級,因為這種情況的結果在ARMv6-M系統結構是不可預知的,并且不被Cortex-M0處理器支持。Cortex-M3/M4處理器的情況又有所不同,他們都支持中斷優先級的動態切換。Cortex-M3處理器和Cortex-M0處理器的另外一個區別是,Cortex-M3訪問中斷優先級寄存器時支持字節或半字傳輸,因此可以每次只設置一個寄存器。如果需要改變優先級,程序中需要關閉中斷后再重新設置中斷優先級寄存器。

在 Cortex-M內核中,一個中斷的優先級數值越低,邏輯優先級卻越高。比如,中斷優先級為2的中斷可以搶占中斷優先級為3的中斷,但反過來就不行。換句話說,中斷優先級2比中斷優先級3的優先級更高。

Cortex-M0處理器對中斷嵌套的支持無需任何軟件干預,如果MCU已經在運行一個中斷,而有了新的更高優先級的中斷請求,正在運行的中斷將會被暫停,轉而執行更高優先級的中斷,高優先級中斷執行完成后又回到原來的低優先級中斷。如果出現兩個同一優先級的中斷,則是判斷誰開始發起中斷請求,MCU會先執行同一優先級中首先發起請求的中斷。

MM32F0130系列中斷向量表:


	

typedefenumIRQn{ NonMaskableInt_IRQn=-14,///

設置中斷優先級的流程:先讀一個字,再修改對應字節,最后整個字寫回。

1.1 C代碼

	

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

1.2 匯編代碼

在程序中可以一次設置多個中斷優先級。


	

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

1.3 CMSIS標準設備驅動函數

	

//設置中斷優先級 __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<

這里的參數IRQn為中斷ID號,可以為負,也可以為正。當IRQn為負時,設置系統異常的優先級,當IRQn大于等于0時,設置外設中斷優先級,芯片廠商會提供中斷向量表IRQn\_Type,應用層只需要調用即可;priority是0、1、2、3,函數內部會自動移位到對應的優先級最高2位。


	

方法一: voidNVIC_SetPriority(TIM1_CC_IRQn,3);//設置#14中斷的優先級為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); }

設置好中斷優先級后,用戶還可以讀取當前已經設置的中斷優先級。


審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120006
  • Cortex-M0
    +關注

    關注

    4

    文章

    124

    瀏覽量

    38640

原文標題:技術分享 | Cortex-M0中斷控制和系統控制(二)

文章出處:【微信號:Ithingedu,微信公眾號:安芯教育科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用功率控制器件的汽車防抱死制動系統控制

    電子發燒友網站提供《使用功率控制器件的汽車防抱死制動系統控制.pdf》資料免費下載
    發表于 09-29 09:50 ?0次下載
    使用功率<b class='flag-5'>控制</b>器件的汽車防抱死制動<b class='flag-5'>系統控制</b>

    請問stm32的cortex-m0怎么樣?

    為什么都說STM32專業做M3 ,M4,M0要找芯唐和NXP,難道因為ST的CORTEX-M0芯片不穩定還是有其他問題?
    發表于 05-15 06:31

    微半導體推出CMS32M67電機控制系列微控制

    微半導體(深圳)股份有限公司近日宣布,其最新研發的CMS32M67電機控制系列微控制器已正式推向市場。這款微控制器基于先進的Arm
    的頭像 發表于 05-11 14:58 ?1233次閱讀

    普冉半導體推出一款基于32位ARM Cortex-M0+內核的微控制

    PY32F071單片機是一款基于32 位 ARM? Cortex? - M0+內核的微控制器,由普冉半導體推出。
    的頭像 發表于 04-30 11:24 ?736次閱讀
    普冉半導體推出一款基于32位ARM <b class='flag-5'>Cortex-M0</b>+內核的微<b class='flag-5'>控制</b>器

    求助,關于cortex-M3的壓棧問題求解

    我們都知道cortex-m3中斷時是硬件自動壓棧的,這樣可以減少中斷響應和恢復時間。中斷硬件壓棧的寄存器為xPSR, PC, LR, R12, R0
    發表于 04-28 08:18

    微半導推出基于Arm Cortex-M0的CMS32M67電機控制系列微控制

    微半導體(深圳)股份有限公司(以下簡稱:微半導 股票代碼:688380)近日宣布,正式推出基于Arm Cortex-M0+內核全新升級的CMS32M67電機
    的頭像 發表于 04-08 10:13 ?832次閱讀
    <b class='flag-5'>中</b>微半導推出基于Arm <b class='flag-5'>Cortex-M0</b>的CMS32<b class='flag-5'>M</b>67電機<b class='flag-5'>控制</b>系列微<b class='flag-5'>控制</b>器

    TOM0 channel5中斷異常的原因?

    正常情況下ADC中斷和TOM0 channel5中斷都是正常的,當出現異常時,ADC中斷正常,TOM0 channel5
    發表于 01-25 06:33

    32位 ARM? Cortex?-M0+ 微控制器PY32L020系列數據手冊

    電子發燒友網站提供《32位 ARM? Cortex?-M0+ 微控制器PY32L020系列數據手冊.pdf》資料免費下載
    發表于 01-19 16:58 ?3次下載

    用N76E003做BLDC控制,如果用掩碼把PWM0屏蔽掉,還能產生PWM0中斷嗎?

    如果用掩碼把PWM0屏蔽掉,還能產生PWM0中斷嗎,我用N76E003做BLDC控制
    發表于 01-17 07:25

    N76E003開了一個定時器0中斷和串口0中斷,兩個中斷打開后,串口發送數據無法進入中斷的原因?

    N76E003開了一個定時器0中斷和串口0中斷,兩個中斷打開后,串口發送數據無法進入中斷,單獨使
    發表于 01-17 06:44

    M0516中斷優先級怎么設置?

    新唐M0516中斷優先級的設置,有沒有示例,沒找到相關接口,謝謝!
    發表于 01-16 07:25

    ES32M0502系列電機控制MCU新品發布

    ES32M0502系列MCU產品,采用全新SoC架構及軟硬件協同優化設計,支持Cortex-M0在96MHz主頻運行,配合軟件算法硬件加速器,可以達到國外Cortex-M3電機控制MC
    的頭像 發表于 01-08 10:41 ?514次閱讀
    ES32<b class='flag-5'>M</b>0502系列電機<b class='flag-5'>控制</b>MCU新品發布

    s3c2410中斷控制模塊的中斷源狀態寄存器是?

    S3C2410是一款由三星電子公司設計的具有多種功能的嵌入式處理器。其中的中斷控制模塊用于管理系統中斷請求和中斷服務程序。在S3C2410
    的頭像 發表于 01-05 17:28 ?662次閱讀

    stm32中斷怎么處理的

    STM32是一款非常強大的微控制器系列,具有豐富的外設和功能。中斷是STM32非常重要的部分,能夠幫助我們提高系統的響應速度和效率。本文將詳細介紹STM32
    的頭像 發表于 01-02 17:35 ?2472次閱讀

    Cortex-M0中斷向量重定位的高效方法

    IAP ( In Application Programming )功能為產品軟件升級提供了一個方便快捷的接口。用戶可以通過串口、USB、CAN總線[1]而無需使用編程器即可實現產品的軟件更新,甚至可以通過以太網[2]或者無線網絡[3]實現產品軟件的遠程升級,大大方便了產品的功能迭代,提升了產品的易用性。
    的頭像 發表于 12-05 11:05 ?3711次閱讀
    <b class='flag-5'>Cortex-M0</b><b class='flag-5'>中斷</b>向量重定位的高效方法