大大通——大聯(lián)大線上技術(shù)支持平臺(tái)&方案知識(shí)庫(kù)
一、 S32K144 Interrupt介紹
1. Arm Cortex-M4F 中斷結(jié)構(gòu)及中斷過(guò)程
ARM Cortex-M4F 內(nèi)核模塊框圖
S32K144 內(nèi)核ARM Cortex-M4F 把中斷分為內(nèi)核中斷與非內(nèi)核模塊中斷,并對(duì)內(nèi)核中斷和非內(nèi)核中斷進(jìn)行了統(tǒng)一編號(hào)(0~254),非內(nèi)核中斷的中斷請(qǐng)求號(hào)(IRQ)為 0~238,對(duì)應(yīng)于中斷向量號(hào)的 15~254。中斷結(jié)構(gòu)原理圖如下:
ARM Cortex-M4F 中斷結(jié)構(gòu)原理圖
M4F 的中斷由 M4F 內(nèi)核、嵌套向量中斷控制器(Nested Vectored Interrupt Controller,NVIC)及模塊中斷源組成。中斷過(guò)程分為兩步:第一,模塊中斷源向 NVIC 發(fā)出中斷請(qǐng)求信號(hào);第二步,NVIC 對(duì)發(fā)來(lái)的中斷信號(hào)進(jìn)行處理,判斷該模塊中斷源是否被使能,若使能,則通過(guò)專用外設(shè)總線(Private Peripheral Bus,PPB)發(fā)送給 M4F 內(nèi)核,由內(nèi)核進(jìn)行中斷處理。如果同時(shí)有多個(gè)中斷信號(hào)到來(lái),NVIC 則根據(jù)設(shè)定好的中斷優(yōu)先級(jí)進(jìn)行判斷,優(yōu)先級(jí)高的中斷被響應(yīng),優(yōu)先級(jí)低的中斷被掛起,壓入堆棧保存;如果優(yōu)先級(jí)完全相同的多個(gè)中斷源同時(shí)請(qǐng)求,則先響應(yīng) IRQ 號(hào)較小的,其他被掛起。
2. NVIC 寄存器映射
NVIC 寄存器映射地址(Cortex-M4 User Guide)
- 中斷使能寄存器(NVIC_ISER)
- 中斷禁止寄存器(NVIC_ICER)
- 中斷掛起寄存器(NVIC_ISPR)
- 清除掛起寄存器(NVIC_ICPR)
- 中斷活動(dòng)位寄存器(NVIC_IABR)
- 優(yōu)先級(jí)寄存器(NVIC_IPR)
上表列出了 NVIC 的寄存器映射,由于 NVIC 屬于內(nèi)核外設(shè),具體的寄存器用法可以參考手冊(cè)《Cortex?-M4 Devices Generic User Guide》。
二、 S32DS Interrupt例程簡(jiǎn)介與應(yīng)用
下面我們以 S32DS 開發(fā)環(huán)境中自帶的例程 hello_Interrupts_s32k144為例。
1. 例程導(dǎo)入
- 打開S32 Design Studio,點(diǎn)擊:“File”->“New”->“S32DS Project from Example”。
- 在彈出的窗口選取 S32K144 目錄下的 hello_interrupts 例程,點(diǎn)擊“Finish”。
- 點(diǎn)擊左上角“Build”按鈕,編譯例程。
- 點(diǎn)擊“Debug”按鈕。進(jìn)入例程Debug頁(yè)面。
- 點(diǎn)擊運(yùn)行程序 按鈕,D11 LED blue 燈 1s閃爍。
D11 1s閃爍藍(lán)燈
2. 例程簡(jiǎn)介
- Hello Interrupt介紹
此例程通過(guò)配置時(shí)鐘、GPIO、LPIT0和NVIC,將定時(shí)器實(shí)現(xiàn)的LED燈閃爍的程序放在中斷程序中實(shí)現(xiàn)LED燈的藍(lán)燈1s閃爍。
- Hello Interrupt框圖
3. 例程設(shè)計(jì)思路
- 初始化中斷需要在 NVIC中 寫入 3 句代碼來(lái)實(shí)現(xiàn):
- 清除先前未完成的中斷(假如有中斷未完成)
- -在清除掛起寄存器(ICPR)中的對(duì)應(yīng)位寫1
- 啟用所需中斷
- -在中斷使能寄存器(ISER)中的對(duì)應(yīng)位寫1
- 設(shè)置中斷優(yōu)先級(jí)
- -在對(duì)應(yīng)的中斷優(yōu)先級(jí)寄存器(IP)中寫入一個(gè)在0~15之間的優(yōu)先級(jí)
- 程序設(shè)計(jì)思路:
- 初始化端口 D module
- 使能端口 D 時(shí)鐘
- 配置 PTD0 為輸出模式(藍(lán)燈)
- 初始化系統(tǒng)時(shí)鐘(SOSC)為8MHz
- 初始化 SOSC 分頻器
- 配置范圍,高增益,參考系數(shù)
- 確保 SOSC 控制狀態(tài)寄存器是可寫的
- 使能 SOSC 控制狀態(tài)寄存器中的 SOSC
- 等待 SOSC 生效
- 初始化系統(tǒng)鎖相環(huán)(SPLL)為160MHz
- 確保 SPLL 禁止配置
- 初始化 SPLL 分頻器
- 初始化 PLL 分頻和倍頻系數(shù)
- Fpll = Fosc / PLL Ref Clk Divider x Sys PLL Multiplier / 2 = 8 MHz / 1 x 20 / 2= 160 MHz
- 確保 SPLL 控制狀態(tài)寄存器可寫
- 使能 SPLL 控制狀態(tài)寄存器中的 SPLL
- 等待 SPLL 生效
- 初始化 LPIT 0 通道
- 使能時(shí)鐘源為 SPLL_DIV2_CLK
- 使能 LPITO 寄存器時(shí)鐘
- 使能 LPIT0 模塊
- 初始化 0 通道:
- 使能該通道中斷
- 超時(shí)時(shí)間=1s
- 設(shè)置計(jì)數(shù)器模式并使能 0 通道
- 改變 SPLL 工作模式為 Normal RUN Mode
- 初始化 CORE、BUS、FLASH 的分頻系數(shù)
- 切換系統(tǒng)時(shí)鐘為 SPLL(160MHz)
- 禁止看門狗
- 主函數(shù):永遠(yuǎn)等待
- LPIT_0 0 通道中斷處理程序:
- 清除通道溢出位
- 裝載計(jì)數(shù)器
- 翻轉(zhuǎn) PTD0 GPIO 輸出
- 清除通道溢出位
三、 例程代碼解釋以及寄存器介紹
1. void NVIC_init_IRQs (void)
- S32_NVIC->ICPR[1] = 1 << (48 % 32); /* IRQ48-LPIT0 ch0: clr any pending IRQ*/
ICPR: Interrupt Clear-pending Registers 中斷清除掛起寄存器
NVIC ICPR 寄存器映射地址
NVIC_ICPR0-NVIC_ICPR7 寄存器清除推遲狀態(tài)的中斷,并顯示推遲中的中斷。操作方法如下:
S32K144 向量表
查詢 S32K144.h 可得 PORTD 的向量值為 64,對(duì)應(yīng) IRQ 為 48。查詢 S32K144 NVIC 寄存器地址可以看到 256 個(gè)中斷向量被分為 8 個(gè)寄存器,每個(gè)寄存器共 32 位。通過(guò)移位運(yùn)算給 PORTD 對(duì)應(yīng)的 ICPR 寄存器賦值 1,清除 PORTD 中斷。
- S32_NVIC->ISER[1] = 1 << (48 % 32); /* IRQ48-LPIT0 ch0: enable IRQ */
ISER:Interrupt Set-enable Registers 中斷使能寄存器
NVIC ISER 寄存器映射地址
NVIC_ISER0-NVIC_ISER7 寄存器使能中斷,并顯示已經(jīng)使能的中斷。
通過(guò)移位運(yùn)算給 PORTD 對(duì)應(yīng)的的 ISER 寄存器賦值 1,使能 PORTD 中斷。
- S32_NVIC->IP[48] = 0x0A; /* IRQ48-LPIT0 ch0: priority 10 of 0-15*/
IP:Interrupt Priority Registers 中斷優(yōu)先級(jí)寄存器
NVIC IPR寄存器映射地址
NVIC_IPR0-NVIC_IPR59 寄存器為每一個(gè)中斷提供8 bit的優(yōu)先級(jí)域,每個(gè)寄存器(32bit)包含4個(gè)優(yōu)先級(jí)域。這些寄存器都是可以設(shè)置的。
NVIC IPR 寄存器分配
NVIC IPR 寄存器與優(yōu)先級(jí)域?qū)φ?br />
通過(guò)位運(yùn)算直接給 PORTD 對(duì)應(yīng)的IPR寄存器賦值優(yōu)先級(jí),優(yōu)先級(jí)為 8 bit 數(shù)值。
2. void LPIT0_Ch0_IRQHandler (void) {}
中斷函數(shù),在需要中斷的模塊名后添加IRQHandler。
3. 主程序
等待中斷狀態(tài)。
四、 參考文獻(xiàn)
[1] Cortex?-M4 Devices Generic User Guide.pdf,ARM
[2] S32K1xx Series Cookbook.pdf,NXP
[3] S32K144 Reference Manual.pdf,NXP
登陸大大通,了解更多詳情,解鎖1000+系統(tǒng)級(jí)應(yīng)用方案,更有大聯(lián)大700+FAE在線為您答疑解惑!
-
mcu
+關(guān)注
關(guān)注
146文章
16900瀏覽量
349944 -
NXP
+關(guān)注
關(guān)注
60文章
1264瀏覽量
182922 -
NVIC
+關(guān)注
關(guān)注
0文章
35瀏覽量
11667 -
S32k144
+關(guān)注
關(guān)注
1文章
7瀏覽量
1876
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論