0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

【S32K 進(jìn)階之旅】Interrupt 模塊介紹與應(yīng)用

大大通 ? 2023-05-04 15:29 ? 次閱讀

大大通——大聯(lián)大線上技術(shù)支持平臺&方案知識庫

一、 S32K144 Interrupt介紹
1. Arm Cortex-M4F 中斷結(jié)構(gòu)及中斷過程

v2-f82cdabfbd5ad2acca9b471c1576a161_1440w.webp

ARM Cortex-M4F 內(nèi)核模塊框圖

S32K144 內(nèi)核ARM Cortex-M4F 把中斷分為內(nèi)核中斷與非內(nèi)核模塊中斷,并對內(nèi)核中斷和非內(nèi)核中斷進(jìn)行了統(tǒng)一編號(0~254),非內(nèi)核中斷的中斷請求號(IRQ)為 0~238,對應(yīng)于中斷向量號的 15~254。中斷結(jié)構(gòu)原理圖如下:

v2-246b9690c327fd43eceb9ab32ba8112e_1440w.webp


ARM Cortex-M4F 中斷結(jié)構(gòu)原理圖

M4F 的中斷由 M4F 內(nèi)核、嵌套向量中斷控制器(Nested Vectored Interrupt Controller,NVIC)及模塊中斷源組成。中斷過程分為兩步:第一,模塊中斷源向 NVIC 發(fā)出中斷請求信號;第二步,NVIC 對發(fā)來的中斷信號進(jìn)行處理,判斷該模塊中斷源是否被使能,若使能,則通過專用外設(shè)總線(Private Peripheral Bus,PPB)發(fā)送給 M4F 內(nèi)核,由內(nèi)核進(jìn)行中斷處理。如果同時有多個中斷信號到來,NVIC 則根據(jù)設(shè)定好的中斷優(yōu)先級進(jìn)行判斷,優(yōu)先級高的中斷被響應(yīng),優(yōu)先級低的中斷被掛起,壓入堆棧保存;如果優(yōu)先級完全相同的多個中斷源同時請求,則先響應(yīng) IRQ 號較小的,其他被掛起。
2. NVIC 寄存器映射

v2-6ec390ea06bce70c5eb77a470b11e36b_1440w.webp


NVIC 寄存器映射地址(Cortex-M4 User Guide)

  • 中斷使能寄存器(NVIC_ISER)
  • 中斷禁止寄存器(NVIC_ICER)
  • 中斷掛起寄存器(NVIC_ISPR)
  • 清除掛起寄存器(NVIC_ICPR)
  • 中斷活動位寄存器(NVIC_IABR)
  • 優(yōu)先級寄存器(NVIC_IPR)

上表列出了 NVIC 的寄存器映射,由于 NVIC 屬于內(nèi)核外設(shè),具體的寄存器用法可以參考手冊《Cortex?-M4 Devices Generic User Guide》。


二、 S32DS Interrupt例程簡介與應(yīng)用
下面我們以 S32DS 開發(fā)環(huán)境中自帶的例程 hello_Interrupts_s32k144為例。
1. 例程導(dǎo)入

  • 打開S32 Design Studio,點(diǎn)擊:“File”->“New”->“S32DS Project from Example”。
v2-04601baf7f3acb3987b4c6cb01653065_1440w.webp



  • 在彈出的窗口選取 S32K144 目錄下的 hello_interrupts 例程,點(diǎn)擊“Finish”。
v2-1e55dbe07acda85f56638a20f43a857d_1440w.webp



  • 點(diǎn)擊左上角“Build”按鈕,編譯例程。
v2-01fabafcdcb7900e4ff0017213ae187f_1440w.webp



  • 點(diǎn)擊“Debug”按鈕。進(jìn)入例程Debug頁面。
v2-9abd959b226557b2f1356618bbba0560_1440w.webp



  • 點(diǎn)擊運(yùn)行程序 按鈕,D11 LED blue 燈 1s閃爍。
v2-8f2e62d08dd14a333ff47782cf80f3d4_1440w.webp


D11 1s閃爍藍(lán)燈

2. 例程簡介

  • Hello Interrupt介紹

此例程通過配置時鐘、GPIO、LPIT0和NVIC,將定時器實現(xiàn)的LED燈閃爍的程序放在中斷程序中實現(xiàn)LED燈的藍(lán)燈1s閃爍。

  • Hello Interrupt框圖
v2-1597677f2fb28d533b1967d0c69ae57f_1440w.webp


3. 例程設(shè)計思路

  • 初始化中斷需要在 NVIC中 寫入 3 句代碼來實現(xiàn):
  • 清除先前未完成的中斷(假如有中斷未完成)
  • -在清除掛起寄存器(ICPR)中的對應(yīng)位寫1
  • 啟用所需中斷
  • -在中斷使能寄存器(ISER)中的對應(yīng)位寫1
  • 設(shè)置中斷優(yōu)先級
  • -在對應(yīng)的中斷優(yōu)先級寄存器(IP)中寫入一個在0~15之間的優(yōu)先級

  • 程序設(shè)計思路:
  • 初始化端口 D module
  • 使能端口 D 時鐘
  • 配置 PTD0 為輸出模式(藍(lán)燈)
  • 初始化系統(tǒng)時鐘(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 通道
    • 使能時鐘源為 SPLL_DIV2_CLK
    • 使能 LPITO 寄存器時鐘
    • 使能 LPIT0 模塊
    • 初始化 0 通道:
    • 使能該通道中斷
      • 超時時間=1s
      • 設(shè)置計數(shù)器模式并使能 0 通道

  • 改變 SPLL 工作模式為 Normal RUN Mode
    • 初始化 CORE、BUS、FLASH 的分頻系數(shù)
    • 切換系統(tǒng)時鐘為 SPLL(160MHz)

  • 禁止看門狗
  • 主函數(shù):永遠(yuǎn)等待
  • LPIT_0 0 通道中斷處理程序:
    • 清除通道溢出位
      • 裝載計數(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 中斷清除掛起寄存器

v2-7c3b896d87c0cb3221cc701f62c15de5_1440w.webp


NVIC ICPR 寄存器映射地址

NVIC_ICPR0-NVIC_ICPR7 寄存器清除推遲狀態(tài)的中斷,并顯示推遲中的中斷。操作方法如下:

v2-496868b34dde2d246808e690fcd6805d_1440w.webp


S32K144 向量表

查詢 S32K144.h 可得 PORTD 的向量值為 64,對應(yīng) IRQ 為 48。查詢 S32K144 NVIC 寄存器地址可以看到 256 個中斷向量被分為 8 個寄存器,每個寄存器共 32 位。通過移位運(yùn)算給 PORTD 對應(yīng)的 ICPR 寄存器賦值 1,清除 PORTD 中斷。

  • S32_NVIC->ISER[1] = 1 << (48 % 32); /* IRQ48-LPIT0 ch0: enable IRQ */

ISER:Interrupt Set-enable Registers 中斷使能寄存器

v2-3872bd2b3f6f1926407bc434a272cb4f_1440w.webp


NVIC ISER 寄存器映射地址

NVIC_ISER0-NVIC_ISER7 寄存器使能中斷,并顯示已經(jīng)使能的中斷。

v2-6b52816591b9c9717842e14f16b2015e_1440w.webp


通過移位運(yùn)算給 PORTD 對應(yīng)的的 ISER 寄存器賦值 1,使能 PORTD 中斷。

  • S32_NVIC->IP[48] = 0x0A; /* IRQ48-LPIT0 ch0: priority 10 of 0-15*/

IP:Interrupt Priority Registers 中斷優(yōu)先級寄存器

v2-7f8926e39cd520fba08769231e1d1c72_1440w.webp


NVIC IPR寄存器映射地址

NVIC_IPR0-NVIC_IPR59 寄存器為每一個中斷提供8 bit的優(yōu)先級域,每個寄存器(32bit)包含4個優(yōu)先級域。這些寄存器都是可以設(shè)置的。

v2-74e966af64f0c6cdf10ca4019d006182_1440w.webp


NVIC IPR 寄存器分配

v2-8b9f42905046ff7f64b705d163605302_1440w.webp


NVIC IPR 寄存器與優(yōu)先級域?qū)φ?br />
通過位運(yùn)算直接給 PORTD 對應(yīng)的IPR寄存器賦值優(yōu)先級,優(yōu)先級為 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)級應(yīng)用方案,更有大聯(lián)大700+FAE在線為您答疑解惑!

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

    關(guān)注

    146

    文章

    17854

    瀏覽量

    360779
  • NXP
    NXP
    +關(guān)注

    關(guān)注

    61

    文章

    1334

    瀏覽量

    187555
  • NVIC
    +關(guān)注

    關(guān)注

    0

    文章

    36

    瀏覽量

    11953
  • S32k144
    +關(guān)注

    關(guān)注

    1

    文章

    9

    瀏覽量

    2032
收藏 0人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)進(jìn)階篇-進(jìn)階7 向系統(tǒng)中添加一個系統(tǒng)調(diào)用

    RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)進(jìn)階篇-進(jìn)階7 向系統(tǒng)中添加一個系統(tǒng)調(diào)用
    的頭像 發(fā)表于 05-21 14:15 ?216次閱讀
    RK3568驅(qū)動指南|驅(qū)動基礎(chǔ)<b class='flag-5'>進(jìn)階</b>篇-<b class='flag-5'>進(jìn)階</b>7 向系統(tǒng)中添加一個系統(tǒng)調(diào)用

    Altium Designer PCB設(shè)計高級進(jìn)階

    對PCB設(shè)計的高級進(jìn)階的內(nèi)容進(jìn)行相關(guān)的介紹 純分享貼,有需要可以直接下載附件獲取完整資料! (如果內(nèi)容有幫助可以關(guān)注、點(diǎn)贊、評論支持一下哦~)
    發(fā)表于 04-27 16:40

    簡述K3SK8S的區(qū)別

    K3s 是CNCF 認(rèn)證的 Kubernetes 發(fā)行版和Sandbox項目,專為低資源環(huán)境而設(shè)計。由 Rancher Labs 維護(hù)著 K3s。
    的頭像 發(fā)表于 04-18 10:27 ?289次閱讀

    使用RTD5.0.0的s32k312,C40_Ip擦除pflash存在一些問題求解決

    /t5/s32k/s32k344-c40-ip-hardware-fault-problem/td-p/1697432 但在 RTD 5.0.0 C40_ip.h 中,“Fls_MemMap.h” 不存在 那么,如何將C40_Ip API 放入 RAM 中呢?可以給
    發(fā)表于 04-11 06:53

    求助,關(guān)于S32K342 IAR啟動代碼問題求解

    與鏈接類似的問題S32K344 IAR 啟動代碼問題 (SW32K3_S32M27x_RTD_R21-11_5.0.0_D2410) export the project from SDK
    發(fā)表于 04-10 07:12

    求助,使用EB配置S32K310 MCAL CAN模塊時遇到的疑問求解

    我在使用EB配置S32K310的MCAL的CAN模塊時產(chǎn)生一些疑問: 1.我在手冊中看到S32K310的MessageBuffer大小是64,那么HwObjectCount的最大配置數(shù)是否
    發(fā)表于 04-02 06:10

    T-300S+DDC1230+LCR模塊介紹

    電子發(fā)燒友網(wǎng)站提供《T-300S+DDC1230+LCR模塊介紹.pptx》資料免費(fèi)下載
    發(fā)表于 03-31 17:34 ?0次下載

    S32k系列微型機(jī),特別是S32K388具有并行處理功能嗎?

    S32k系列微型機(jī),特別是S32K388具有并行處理功能嗎?
    發(fā)表于 03-26 08:27

    WD50-110S24K1 WD50-110S24K1

    電子發(fā)燒友網(wǎng)為你提供AIPULNION(AIPULNION)WD50-110S24K1相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有WD50-110S24K1的引腳圖、接線圖、封裝手冊、中文資料、英文資料,WD50-110S24K1真值表,WD5
    發(fā)表于 03-20 18:59
    WD50-110<b class='flag-5'>S24K</b>1 WD50-110<b class='flag-5'>S24K</b>1

    鴻蒙原生繪圖API:從基礎(chǔ)到高階的繪制之旅進(jìn)階版)

    theme: hydrogen 家人們,還記得上次一起探索的鴻蒙繪圖API基礎(chǔ)用法嗎?上手是不是特別容易!今天,咱們就接著深入,開啟進(jìn)階版的學(xué)習(xí),解鎖更多復(fù)雜又炫酷的繪圖技能,讓你的鴻蒙應(yīng)用界面直接
    的頭像 發(fā)表于 03-16 15:57 ?438次閱讀

    S32K 進(jìn)階之旅】如何使用 S32K3 PIT 定時器實現(xiàn)精準(zhǔn)延時?

    周期中斷定時器(PeriodicInterruptTimer,PIT)模塊顧名思義,就是通過計時行為引發(fā)周期性中斷事件的觸發(fā)器。本文基于S32K312開發(fā)板實現(xiàn)延時功能,在此之前先簡單介紹下PIT
    的頭像 發(fā)表于 03-10 16:33 ?567次閱讀
    【<b class='flag-5'>S32K</b> <b class='flag-5'>進(jìn)階</b><b class='flag-5'>之旅</b>】如何使用 <b class='flag-5'>S32K</b>3 PIT 定時器實現(xiàn)精準(zhǔn)延時?

    S32K3xx參考手冊

    NXP單片機(jī) S32K3xx系列完整版技術(shù)手冊,手冊PDF文檔包含IO MUX等附件
    發(fā)表于 12-30 16:12 ?11次下載

    S32K3xxICU應(yīng)用筆記

    S32K3xxICU應(yīng)用筆記
    發(fā)表于 12-30 15:38 ?2次下載

    如何如何集成MCAL到S32DS_S32K344

    集成MCAL到S32DS_S32K344
    發(fā)表于 12-30 15:35 ?2次下載

    BOOSTXL-K350QVG-S1 QVGA顯示BoosterPack?插件模塊用戶指南

    電子發(fā)燒友網(wǎng)站提供《BOOSTXL-K350QVG-S1 QVGA顯示BoosterPack?插件模塊用戶指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-05 14:45 ?0次下載
    BOOSTXL-<b class='flag-5'>K350QVG-S</b>1 QVGA顯示BoosterPack?插件<b class='flag-5'>模塊</b>用戶指南

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品