a片在线观看免费看视频_欧美婬片在线a_同性男男无遮挡无码视频_久久99狠狠色精品一区_《性妲己》电影在线观看_久久久99婷婷久久久久久_亚洲精品久久久久58_激情在线成人福利小电影_色婷婷久久综合五月激情网

0 賣盤(pán)信息
BOM詢價(jià)
您現(xiàn)在的位置: 首頁(yè) > 電子資訊 >技術(shù)信息 > ARM的外部中斷配置

ARM的外部中斷配置

來(lái)源: elecfans
2020-09-02
類別:技術(shù)信息
eye 86
文章創(chuàng)建人 拍明

原標(biāo)題:ARM的外部中斷配置

ARM處理器的外部中斷配置是嵌入式系統(tǒng)開(kāi)發(fā)中的核心任務(wù)之一,涉及中斷控制器(如GIC、NVIC)的編程、中斷優(yōu)先級(jí)設(shè)置、中斷觸發(fā)方式選擇等關(guān)鍵步驟。不同ARM架構(gòu)(如Cortex-M、Cortex-A)的中斷配置流程存在差異,但核心邏輯相似。以下從架構(gòu)概述、配置流程、關(guān)鍵寄存器、優(yōu)先級(jí)管理、示例代碼五個(gè)維度詳細(xì)解析ARM外部中斷的配置方法。


一、ARM中斷架構(gòu)概述

ARM處理器通過(guò)中斷控制器管理外部中斷請(qǐng)求(IRQ)和快速中斷請(qǐng)求(FIQ),不同架構(gòu)的中斷控制器如下:

1. Cortex-M系列(如M3/M4/M7)

  • 中斷控制器NVIC(Nested Vectored Interrupt Controller),集成在內(nèi)核中。

  • 特點(diǎn)

    • 支持256級(jí)中斷優(yōu)先級(jí)(實(shí)際可配置為8/16/32/64/128級(jí),取決于實(shí)現(xiàn))。

    • 自動(dòng)保存/恢復(fù)上下文(寄存器),支持中斷嵌套。

    • 通過(guò)向量表直接跳轉(zhuǎn)到中斷服務(wù)程序(ISR)。

2. Cortex-A系列(如A53/A72)

  • 中斷控制器GIC(Generic Interrupt Controller),分為GICv1/GICv2/GICv3/GICv4。

  • 特點(diǎn)

    • 支持多核中斷分發(fā)(SPI、PPI、SGI三種中斷類型)。

    • 優(yōu)先級(jí)范圍:0(最高)~255(最低),實(shí)際位數(shù)由ICBPR寄存器決定。

    • 需手動(dòng)編寫(xiě)中斷分發(fā)邏輯(如Linux內(nèi)核中的handle_irq_event)。

3. 傳統(tǒng)ARM架構(gòu)(如ARM7/ARM9)

  • 中斷控制器:外部設(shè)備(如GPIO控制器)或VIC(Vector Interrupt Controller)

  • 特點(diǎn)

    • 優(yōu)先級(jí)固定(通常4-8級(jí)),需軟件查詢中斷源。

    • 需手動(dòng)保存/恢復(fù)寄存器,不支持嵌套。

QQ_1751439380900.png


二、外部中斷配置通用流程

Cortex-M(NVIC)Cortex-A(GICv2)為例,外部中斷配置的核心步驟如下:

1. Cortex-M(NVIC)配置流程

ARM處理器的外部中斷配置是嵌入式系統(tǒng)開(kāi)發(fā)中的核心任務(wù)之一,涉及中斷控制器(如GIC、NVIC)的編程、中斷優(yōu)先級(jí)設(shè)置、中斷觸發(fā)方式選擇等關(guān)鍵步驟。不同ARM架構(gòu)(如Cortex-M、Cortex-A)的中斷配置流程存在差異,但核心邏輯相似。以下從架構(gòu)概述、配置流程、關(guān)鍵寄存器、優(yōu)先級(jí)管理、示例代碼五個(gè)維度詳細(xì)解析ARM外部中斷的配置方法。


一、ARM中斷架構(gòu)概述

ARM處理器通過(guò)中斷控制器管理外部中斷請(qǐng)求(IRQ)和快速中斷請(qǐng)求(FIQ),不同架構(gòu)的中斷控制器如下:

1. Cortex-M系列(如M3/M4/M7)

  • 中斷控制器NVIC(Nested Vectored Interrupt Controller),集成在內(nèi)核中。

  • 特點(diǎn)

    • 支持256級(jí)中斷優(yōu)先級(jí)(實(shí)際可配置為8/16/32/64/128級(jí),取決于實(shí)現(xiàn))。

    • 自動(dòng)保存/恢復(fù)上下文(寄存器),支持中斷嵌套。

    • 通過(guò)向量表直接跳轉(zhuǎn)到中斷服務(wù)程序(ISR)。

2. Cortex-A系列(如A53/A72)

  • 中斷控制器GIC(Generic Interrupt Controller),分為GICv1/GICv2/GICv3/GICv4。

  • 特點(diǎn)

    • 支持多核中斷分發(fā)(SPI、PPI、SGI三種中斷類型)。

    • 優(yōu)先級(jí)范圍:0(最高)~255(最低),實(shí)際位數(shù)由ICBPR寄存器決定。

    • 需手動(dòng)編寫(xiě)中斷分發(fā)邏輯(如Linux內(nèi)核中的handle_irq_event)。

3. 傳統(tǒng)ARM架構(gòu)(如ARM7/ARM9)

  • 中斷控制器:外部設(shè)備(如GPIO控制器)或VIC(Vector Interrupt Controller)

  • 特點(diǎn)

    • 優(yōu)先級(jí)固定(通常4-8級(jí)),需軟件查詢中斷源。

    • 需手動(dòng)保存/恢復(fù)寄存器,不支持嵌套。


二、外部中斷配置通用流程

Cortex-M(NVIC)Cortex-A(GICv2)為例,外部中斷配置的核心步驟如下:

1. Cortex-M(NVIC)配置流程

graph TD    A[初始化外設(shè)時(shí)鐘] --> B[配置GPIO為中斷輸入模式]    B --> C[設(shè)置中斷觸發(fā)方式]    C --> D[配置NVIC優(yōu)先級(jí)]    D --> E[使能NVIC中斷]    E --> F[編寫(xiě)中斷服務(wù)程序(ISR)]

2. Cortex-A(GICv2)配置流程

graph TD    A[初始化外設(shè)時(shí)鐘] --> B[配置GPIO為中斷輸入模式]    B --> C[設(shè)置中斷觸發(fā)方式]    C --> D[配置GIC分發(fā)器(Distributor)]    D --> E[配置GIC CPU接口]    E --> F[編寫(xiě)中斷服務(wù)程序(ISR)]

三、關(guān)鍵寄存器與配置方法

1. Cortex-M(NVIC)核心寄存器


寄存器功能配置示例(STM32F4)
ISER[n]中斷使能寄存器(Interrupt Set Enable Register),寫(xiě)1使能中斷。`NVIC->ISER[0]
ICER[n]中斷禁用寄存器(Interrupt Clear Enable Register),寫(xiě)1禁用中斷。NVIC->ICER[0] &= ~(1 << EXTI0_IRQn);
IPR[n]中斷優(yōu)先級(jí)寄存器(Interrupt Priority Register),每8位配置一個(gè)中斷優(yōu)先級(jí)。NVIC->IP[EXTI0_IRQn] = 0x80; // 優(yōu)先級(jí)=2
EXTI->RTSR/FTSR外部中斷觸發(fā)選擇寄存器(Rising/Falling Trigger Selection Register)。`EXTI->RTSR


2. Cortex-A(GICv2)核心寄存器


寄存器功能配置示例(ARMv7)
GICD_ISENABLER[n]分發(fā)器中斷使能寄存器(Interrupt Set Enable Register),寫(xiě)1使能SPI中斷。`GICD->ISENABLER[0]
GICD_ICENABLER[n]分發(fā)器中斷禁用寄存器(Interrupt Clear Enable Register),寫(xiě)1禁用中斷。GICD->ICENABLER[0] &= ~(1 << 32);
GICD_IPRIORITYR[n]優(yōu)先級(jí)寄存器,每4位配置一個(gè)中斷優(yōu)先級(jí)(8級(jí)優(yōu)先級(jí)時(shí),每8位配置一個(gè)中斷)。GICD->IPRIORITYR[8] = 0xA0; // SPI32優(yōu)先級(jí)=2
GICD_ICFGR[n]中斷配置寄存器(Interrupt Configuration Register),配置觸發(fā)方式。`GICD->ICFGR[1]
ICCPMRCPU接口優(yōu)先級(jí)掩碼寄存器(Priority Mask Register),屏蔽低于閾值的中斷。ICCPMR = 0xF0; // 只響應(yīng)優(yōu)先級(jí)≥4的中斷



四、中斷優(yōu)先級(jí)管理

1. 優(yōu)先級(jí)分組(Cortex-M)

  • 原理:通過(guò)SCB->AIRCR寄存器的PRIGROUP字段劃分優(yōu)先級(jí)位數(shù)。

    • 例如:PRIGROUP=4表示4位子優(yōu)先級(jí)(搶占優(yōu)先級(jí)),0位子優(yōu)先級(jí)(實(shí)際實(shí)現(xiàn)可能限制位數(shù))。

  • STM32示例

NVIC_SetPriorityGrouping(3); // 3位搶占優(yōu)先級(jí),1位子優(yōu)先級(jí) NVIC_SetPriority(EXTI0_IRQn, NVIC_EncodePriority(3, 2, 0)); // 搶占優(yōu)先級(jí)=2,子優(yōu)先級(jí)=0

2. 優(yōu)先級(jí)反轉(zhuǎn)與嵌套(Cortex-A)

  • 問(wèn)題:高優(yōu)先級(jí)中斷被低優(yōu)先級(jí)中斷阻塞(如持有鎖)。

  • 解決方案

    • 優(yōu)先級(jí)繼承:臨時(shí)提升低優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí)。

    • GIC優(yōu)先級(jí)掩碼:通過(guò)ICCPMR動(dòng)態(tài)調(diào)整可響應(yīng)的中斷優(yōu)先級(jí)。


五、示例代碼與調(diào)試技巧

1. Cortex-M(STM32 HAL庫(kù))

// 配置EXTI0中斷(按鍵觸發(fā)) void EXTI0_IRQHandler(void) {    if (EXTI->PR & (1 << 0)) { // 檢查中斷標(biāo)志        HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 翻轉(zhuǎn)LED        EXTI->PR |= (1 << 0); // 清除中斷標(biāo)志    } } int main() {    HAL_Init();    __HAL_RCC_GPIOA_CLK_ENABLE();        // 配置PA0為輸入,上升沿觸發(fā)    GPIO_InitTypeDef GPIO_InitStruct = {0};    GPIO_InitStruct.Pin = GPIO_PIN_0;    GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;    GPIO_InitStruct.Pull = GPIO_NOPULL;    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);        // 配置NVIC優(yōu)先級(jí)    HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);    HAL_NVIC_EnableIRQ(EXTI0_IRQn);        while (1); }

2. Cortex-A(Linux內(nèi)核模塊)


// 注冊(cè)GPIO中斷(以EXYNOS4412為例) static irqreturn_t gpio_irq_handler(int irq, void *dev_id) {    printk(KERN_INFO "GPIO interrupt occurred! ");    return IRQ_HANDLED; } static int __init my_module_init(void) {    int irq_num = gpio_to_irq(EXYNOS4_GPK0(0)); // 獲取GPIO對(duì)應(yīng)的IRQ號(hào)    if (request_irq(irq_num, gpio_irq_handler, IRQF_TRIGGER_RISING, "gpio_irq", NULL)) {        printk(KERN_ERR "Failed to request IRQ ");        return -1;    }    // 設(shè)置GIC優(yōu)先級(jí)(需通過(guò)內(nèi)存映射訪問(wèn)GIC寄存器)    void __iomem *gicd_base = ioremap(0x10480000, 0x1000);    writel(0xA0, gicd_base + 0x400 + 8 * 4); // 設(shè)置SPI32優(yōu)先級(jí)=2    return 0; }

3. 調(diào)試技巧

  • 邏輯分析儀:捕獲GPIO中斷信號(hào),驗(yàn)證觸發(fā)時(shí)序。

  • J-Trace/OpenOCD:通過(guò)GDB調(diào)試中斷服務(wù)程序,檢查寄存器狀態(tài)。

  • 內(nèi)核日志:在Linux中通過(guò)dmesg查看中斷觸發(fā)記錄。


六、常見(jiàn)問(wèn)題與解決方案

  1. 中斷不觸發(fā)

    • 檢查GPIO模式是否配置為輸入(GPIO_MODE_INPUT)。

    • 確認(rèn)中斷觸發(fā)方式(上升沿/下降沿/雙邊沿)與硬件信號(hào)匹配。

    • 驗(yàn)證NVIC/GIC是否使能對(duì)應(yīng)中斷。

  2. 中斷嵌套失效

    • Cortex-M:確保PRIGROUP分組正確,且高優(yōu)先級(jí)中斷的搶占優(yōu)先級(jí)低于當(dāng)前優(yōu)先級(jí)。

    • Cortex-A:檢查ICCPMR是否屏蔽了高優(yōu)先級(jí)中斷。

  3. 中斷丟失

    • 降低中斷處理時(shí)間(避免長(zhǎng)時(shí)間占用CPU)。

    • 使用DMA減輕CPU負(fù)載(如高速ADC采樣場(chǎng)景)。


總結(jié)

ARM外部中斷配置的核心在于正確操作中斷控制器寄存器(NVIC/GIC)和合理設(shè)置優(yōu)先級(jí)。對(duì)于實(shí)時(shí)性要求高的場(chǎng)景(如電機(jī)控制),建議使用Cortex-M的NVIC,其自動(dòng)上下文保存和嵌套支持可簡(jiǎn)化開(kāi)發(fā);對(duì)于多核處理器(如服務(wù)器芯片),需深入理解GIC的分發(fā)邏輯和優(yōu)先級(jí)掩碼機(jī)制。實(shí)際開(kāi)發(fā)中,應(yīng)結(jié)合芯片手冊(cè)(如STM32的RM、ARM的TRM)和操作系統(tǒng)(如FreeRTOS、Linux)的抽象層進(jìn)行配置,避免直接操作寄存器導(dǎo)致的兼容性問(wèn)題。


責(zé)任編輯:David

【免責(zé)聲明】

1、本文內(nèi)容、數(shù)據(jù)、圖表等來(lái)源于網(wǎng)絡(luò)引用或其他公開(kāi)資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對(duì)本文的引用持有異議,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。

2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。

3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請(qǐng)讀者明確相關(guān)結(jié)果。

4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。

拍明芯城擁有對(duì)此聲明的最終解釋權(quán)。

標(biāo)簽: FS4412 ARM芯片 ARM

相關(guān)資訊

資訊推薦
云母電容公司_云母電容生產(chǎn)廠商

云母電容公司_云母電容生產(chǎn)廠商

開(kāi)關(guān)三極管13007的規(guī)格參數(shù)、引腳圖、開(kāi)關(guān)電源電路圖?三極管13007可以用什么型號(hào)替代?

開(kāi)關(guān)三極管13007的規(guī)格參數(shù)、引腳圖、開(kāi)關(guān)電源電路圖?三極管13007可以用什么型號(hào)替代?

74ls74中文資料匯總(74ls74引腳圖及功能_內(nèi)部結(jié)構(gòu)及應(yīng)用電路)

74ls74中文資料匯總(74ls74引腳圖及功能_內(nèi)部結(jié)構(gòu)及應(yīng)用電路)

芯片lm2596s開(kāi)關(guān)電壓調(diào)節(jié)器的中文資料_引腳圖及功能_內(nèi)部結(jié)構(gòu)及原理圖_電路圖及封裝

芯片lm2596s開(kāi)關(guān)電壓調(diào)節(jié)器的中文資料_引腳圖及功能_內(nèi)部結(jié)構(gòu)及原理圖_電路圖及封裝

芯片UA741運(yùn)算放大器的資料及參數(shù)_引腳圖及功能_電路原理圖?ua741運(yùn)算放大器的替代型號(hào)有哪些?

芯片UA741運(yùn)算放大器的資料及參數(shù)_引腳圖及功能_電路原理圖?ua741運(yùn)算放大器的替代型號(hào)有哪些?

28nm光刻機(jī)卡住“02專項(xiàng)”——對(duì)于督工部分觀點(diǎn)的批判(睡前消息353期)

28nm光刻機(jī)卡住“02專項(xiàng)”——對(duì)于督工部分觀點(diǎn)的批判(睡前消息353期)

拍明芯城微信圖標(biāo)

各大手機(jī)應(yīng)用商城搜索“拍明芯城”

下載客戶端,隨時(shí)隨地買賣元器件!

拍明芯城公眾號(hào)
拍明芯城抖音
拍明芯城b站
拍明芯城頭條
拍明芯城微博
拍明芯城視頻號(hào)
拍明
廣告
恒捷廣告
廣告
深亞廣告
廣告
原廠直供
廣告