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

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

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

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

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

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

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

v2-f82cdabfbd5ad2acca9b471c1576a161_1440w.webp

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)原理圖如下:

v2-246b9690c327fd43eceb9ab32ba8112e_1440w.webp


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 寄存器映射

v2-6ec390ea06bce70c5eb77a470b11e36b_1440w.webp


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”。
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頁(yè)面。
v2-9abd959b226557b2f1356618bbba0560_1440w.webp



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


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框圖
v2-1597677f2fb28d533b1967d0c69ae57f_1440w.webp


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 中斷清除掛起寄存器

v2-7c3b896d87c0cb3221cc701f62c15de5_1440w.webp


NVIC ICPR 寄存器映射地址

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

v2-496868b34dde2d246808e690fcd6805d_1440w.webp


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 中斷使能寄存器

v2-3872bd2b3f6f1926407bc434a272cb4f_1440w.webp


NVIC ISER 寄存器映射地址

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

v2-6b52816591b9c9717842e14f16b2015e_1440w.webp


通過(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í)寄存器

v2-7f8926e39cd520fba08769231e1d1c72_1440w.webp


NVIC IPR寄存器映射地址

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

v2-74e966af64f0c6cdf10ca4019d006182_1440w.webp


NVIC IPR 寄存器分配

v2-8b9f42905046ff7f64b705d163605302_1440w.webp


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在線為您答疑解惑!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16900

    瀏覽量

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

    關(guān)注

    60

    文章

    1264

    瀏覽量

    182922
  • NVIC
    +關(guān)注

    關(guān)注

    0

    文章

    35

    瀏覽量

    11667
  • S32k144
    +關(guān)注

    關(guān)注

    1

    文章

    7

    瀏覽量

    1876
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    k8s云原生開發(fā)要求

    Kubernetes(K8s)云原生開發(fā)對(duì)硬件有一定要求。CPU方面,建議至少配備2個(gè)邏輯核心,高性能CPU更佳。內(nèi)存至少4GB,但8GB或更高更推薦。存儲(chǔ)需至少20-30GB可用空間,SSD提升
    的頭像 發(fā)表于 10-24 10:03 ?144次閱讀
    <b class='flag-5'>k8s</b>云原生開發(fā)要求

    智能家居之旅(15):HA傳感器采集主板低功耗設(shè)計(jì)的遭遇

    智能家居之旅(1):了解HomeAssistant 智能家居之旅(2):設(shè)備接入HomeAssistant的方法 智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 實(shí)現(xiàn)點(diǎn)燈
    的頭像 發(fā)表于 09-05 10:27 ?314次閱讀
    智能家居<b class='flag-5'>之旅</b>(15):HA傳感器采集主板低功耗設(shè)計(jì)的遭遇

    STM8S103K3的定時(shí)器1中斷會(huì)連進(jìn)兩次,為什么?

    最近小弟用STM8S103K3又發(fā)現(xiàn)一個(gè)很奇怪的問(wèn)題,求FAE和大神們指教//第一種中斷格式 INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler
    發(fā)表于 05-14 07:40

    STM8S105K4T6使用ADC轉(zhuǎn)換結(jié)果異常的原因?如何解決?

    /*----------------------------------------------------------------------------*/ /* @Name: stm8_interrupt_vector.c*/ /* @Brief :*/ /* @Include: stm8
    發(fā)表于 05-13 08:52

    亮鉆科技推出重磅新品:基于RK3588S平臺(tái)的K-3588S

    近日,基于RK3588S平臺(tái),亮鉆科技推出重磅新品:K-3588S,其性能與RK3588相媲美,擁有高性能、高算力和8K視頻編解碼等優(yōu)勢(shì),且性價(jià)比更高,滿足用戶降本需求。
    的頭像 發(fā)表于 05-09 14:11 ?1899次閱讀
    亮鉆科技推出重磅新品:基于RK3588<b class='flag-5'>S</b>平臺(tái)的<b class='flag-5'>K-3588S</b>

    基于S32K3的ECU參考設(shè)計(jì)集成電池管理方案

    S32K396/376 BMS-EVB板現(xiàn)已供貨,同時(shí)S32K39 / 37 / 36系列芯片將于今年6月正式上市。相關(guān)的集中式電芯監(jiān)控參考設(shè)計(jì)板也已上市。
    發(fā)表于 04-26 10:59 ?465次閱讀

    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)
    的頭像 發(fā)表于 02-20 14:10 ?606次閱讀
    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)<b class='flag-5'>進(jìn)階</b>篇-<b class='flag-5'>進(jìn)階</b>5 自定義實(shí)現(xiàn)insmod命令實(shí)驗(yàn)

    基于 NXP S32K311 評(píng)估板的方案

    該方案是以 NXP S32K311 芯片為主控制器的評(píng)估板方案,S32K311 是基于 ARM Cortex-M7 的嵌入式應(yīng)用微控制器,有 64 KB 的 Dflash、1 MB 的 Pflash
    的頭像 發(fā)表于 02-18 11:22 ?699次閱讀
    基于 NXP <b class='flag-5'>S32K</b>311 評(píng)估板的方案

    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)

    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)進(jìn)階篇-進(jìn)階8 內(nèi)核運(yùn)行ko文件總結(jié)
    的頭像 發(fā)表于 01-31 14:58 ?1076次閱讀
    RK3568驅(qū)動(dòng)指南|驅(qū)動(dòng)基礎(chǔ)<b class='flag-5'>進(jìn)階</b>篇-<b class='flag-5'>進(jìn)階</b>8 內(nèi)核運(yùn)行ko文件總結(jié)

    S32K 進(jìn)階之旅】 NXP S32K3 以太網(wǎng) RMII 接口調(diào)試(1)

    大聯(lián)大世平集團(tuán)推出了一款基于NXP車規(guī)級(jí)MCUS32K344的開發(fā)板——花名“Cavalry”,它使用BGA257封裝的32位ArmCortex-M7S32K344作為主控芯片,在69.6
    的頭像 發(fā)表于 01-18 08:26 ?2086次閱讀
    【<b class='flag-5'>S32K</b> <b class='flag-5'>進(jìn)階</b><b class='flag-5'>之旅</b>】 NXP <b class='flag-5'>S32K</b>3 以太網(wǎng) RMII 接口調(diào)試(1)

    一塊板即輕松搞定!| TH244A001 - 32位Arduino開發(fā)資源進(jìn)階介紹(2)

    一塊板即輕松搞定! TH244A001 - 32位Arduino開發(fā)資源進(jìn)階介紹(2) 在前一篇文章中\(zhòng)"TH244A001 - 32位Arduino開發(fā)資源進(jìn)階介紹(1
    發(fā)表于 01-12 11:54

    芯圣SDK工具 讓開發(fā)更方便——HC89S103K6

    SDK-HC89S103K6是基于HC89S103K6設(shè)計(jì)的快速開發(fā)工具。SDK-HC89S103K6由HC89S103K6微控制器的主控板和HC-LINKV4.0仿真燒錄器兩部分組成
    的頭像 發(fā)表于 01-10 10:33 ?453次閱讀
    芯圣SDK工具 讓開發(fā)更方便——HC89<b class='flag-5'>S103K</b>6

    PS-1220S插拔力試驗(yàn)機(jī):力學(xué)世界的探秘之旅

    PS-1220S插拔力試驗(yàn)機(jī):力學(xué)世界的探秘之旅
    的頭像 發(fā)表于 01-05 09:08 ?461次閱讀
    PS-1220<b class='flag-5'>S</b>插拔力試驗(yàn)機(jī):力學(xué)世界的探秘<b class='flag-5'>之旅</b>

    S32K146的hard fault問(wèn)題解決方案

    最近有個(gè)客戶使用S32K146的產(chǎn)品在量產(chǎn)之后出現(xiàn)了三個(gè)售后件,ABBA測(cè)試之后的結(jié)果表明失效現(xiàn)象跟著S32K146走;同時(shí)客戶反饋說(shuō)試著將其中一個(gè)售后件重新燒錄程序,S32K146又正常工作了。結(jié)合這兩種情況,
    的頭像 發(fā)表于 11-22 11:35 ?2164次閱讀
    <b class='flag-5'>S32K</b>146的hard fault問(wèn)題解決方案

    S32K144搭載S32K1XX_MCAL4_2_RTM_1_0_6以及S32DS編譯軟件使用CAN模塊無(wú)法發(fā)送報(bào)文怎么解決?

    我們團(tuán)隊(duì)在使用MCAL之CAN模塊時(shí)無(wú)法發(fā)送報(bào)文的問(wèn)題,MCAL版本是S32K1XX_MCAL4_2_RTM_1_0_6評(píng)估版,使用EB配置CAN模塊的工程如附件文件夾
    發(fā)表于 11-13 08:29