0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【S32K 进阶之旅】Interrupt 模块介绍与应用

大大通 2023-05-04 15:29 次阅读

大大通——大联大线上技术支持平台&方案知识库

一、 S32K144 Interrupt介绍
1. Arm Cortex-M4F 中断结构及中断过程

v2-f82cdabfbd5ad2acca9b471c1576a161_1440w.webp

ARM Cortex-M4F 内核模块框图

S32K144 内核ARM Cortex-M4F 把中断分为内核中断与非内核模块中断,并对内核中断和非内核中断进行了统一编号(0~254),非内核中断的中断请求号(IRQ)为 0~238,对应于中断向量号的 15~254。中断结构原理图如下:

v2-246b9690c327fd43eceb9ab32ba8112e_1440w.webp


ARM Cortex-M4F 中断结构原理图

M4F 的中断由 M4F 内核、嵌套向量中断控制器(Nested Vectored Interrupt Controller,NVIC)及模块中断源组成。中断过程分为两步:第一,模块中断源向 NVIC 发出中断请求信号;第二步,NVIC 对发来的中断信号进行处理,判断该模块中断源是否被使能,若使能,则通过专用外设总线(Private Peripheral Bus,PPB)发送给 M4F 内核,由内核进行中断处理。如果同时有多个中断信号到来,NVIC 则根据设定好的中断优先级进行判断,优先级高的中断被响应,优先级低的中断被挂起,压入堆栈保存;如果优先级完全相同的多个中断源同时请求,则先响应 IRQ 号较小的,其他被挂起。
2. NVIC 寄存器映射

v2-6ec390ea06bce70c5eb77a470b11e36b_1440w.webp


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

  • 中断使能寄存器(NVIC_ISER)
  • 中断禁止寄存器(NVIC_ICER)
  • 中断挂起寄存器(NVIC_ISPR)
  • 清除挂起寄存器(NVIC_ICPR)
  • 中断活动位寄存器(NVIC_IABR)
  • 优先级寄存器(NVIC_IPR)

上表列出了 NVIC 的寄存器映射,由于 NVIC 属于内核外设,具体的寄存器用法可以参考手册《Cortex™-M4 Devices Generic User Guide》。


二、 S32DS Interrupt例程简介与应用
下面我们以 S32DS 开发环境中自带的例程 hello_Interrupts_s32k144为例。
1. 例程导入

  • 打开S32 Design Studio,点击:“File”->“New”->“S32DS Project from Example”。
v2-04601baf7f3acb3987b4c6cb01653065_1440w.webp



  • 在弹出的窗口选取 S32K144 目录下的 hello_interrupts 例程,点击“Finish”。
v2-1e55dbe07acda85f56638a20f43a857d_1440w.webp



  • 点击左上角“Build”按钮,编译例程。
v2-01fabafcdcb7900e4ff0017213ae187f_1440w.webp



  • 点击“Debug”按钮。进入例程Debug页面。
v2-9abd959b226557b2f1356618bbba0560_1440w.webp



  • 点击运行程序 按钮,D11 LED blue 灯 1s闪烁。
v2-8f2e62d08dd14a333ff47782cf80f3d4_1440w.webp


D11 1s闪烁蓝灯

2. 例程简介

  • Hello Interrupt介绍

此例程通过配置时钟、GPIO、LPIT0和NVIC,将定时器实现的LED灯闪烁的程序放在中断程序中实现LED灯的蓝灯1s闪烁。

  • Hello Interrupt框图
v2-1597677f2fb28d533b1967d0c69ae57f_1440w.webp


3. 例程设计思路

  • 初始化中断需要在 NVIC中 写入 3 句代码来实现:
  • 清除先前未完成的中断(假如有中断未完成)
  • -在清除挂起寄存器(ICPR)中的对应位写1
  • 启用所需中断
  • -在中断使能寄存器(ISER)中的对应位写1
  • 设置中断优先级
  • -在对应的中断优先级寄存器(IP)中写入一个在0~15之间的优先级

  • 程序设计思路:
  • 初始化端口 D module
  • 使能端口 D 时钟
  • 配置 PTD0 为输出模式(蓝灯)
  • 初始化系统时钟(SOSC)为8MHz
    • 初始化 SOSC 分频器
    • 配置范围,高增益,参考系数
    • 确保 SOSC 控制状态寄存器是可写的
    • 使能 SOSC 控制状态寄存器中的 SOSC
    • 等待 SOSC 生效

  • 初始化系统锁相环(SPLL)为160MHz
    • 确保 SPLL 禁止配置
    • 初始化 SPLL 分频器
    • 初始化 PLL 分频和倍频系数

  • Fpll = Fosc / PLL Ref Clk Divider x Sys PLL Multiplier / 2 = 8 MHz / 1 x 20 / 2= 160 MHz
    • 确保 SPLL 控制状态寄存器可写
    • 使能 SPLL 控制状态寄存器中的 SPLL
    • 等待 SPLL 生效

  • 初始化 LPIT 0 通道
    • 使能时钟源为 SPLL_DIV2_CLK
    • 使能 LPITO 寄存器时钟
    • 使能 LPIT0 模块
    • 初始化 0 通道:
    • 使能该通道中断
      • 超时时间=1s
      • 设置计数器模式并使能 0 通道

  • 改变 SPLL 工作模式为 Normal RUN Mode
    • 初始化 CORE、BUS、FLASH 的分频系数
    • 切换系统时钟为 SPLL(160MHz)

  • 禁止看门狗
  • 主函数:永远等待
  • LPIT_0 0 通道中断处理程序:
    • 清除通道溢出位
      • 装载计数器
      • 翻转 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 寄存器清除推迟状态的中断,并显示推迟中的中断。操作方法如下:

v2-496868b34dde2d246808e690fcd6805d_1440w.webp


S32K144 向量表

查询 S32K144.h 可得 PORTD 的向量值为 64,对应 IRQ 为 48。查询 S32K144 NVIC 寄存器地址可以看到 256 个中断向量被分为 8 个寄存器,每个寄存器共 32 位。通过移位运算给 PORTD 对应的 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 寄存器使能中断,并显示已经使能的中断。

v2-6b52816591b9c9717842e14f16b2015e_1440w.webp


通过移位运算给 PORTD 对应的的 ISER 寄存器赋值 1,使能 PORTD 中断。

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

IP:Interrupt Priority Registers 中断优先级寄存器

v2-7f8926e39cd520fba08769231e1d1c72_1440w.webp


NVIC IPR寄存器映射地址

NVIC_IPR0-NVIC_IPR59 寄存器为每一个中断提供8 bit的优先级域,每个寄存器(32bit)包含4个优先级域。这些寄存器都是可以设置的。

v2-74e966af64f0c6cdf10ca4019d006182_1440w.webp


NVIC IPR 寄存器分配

v2-8b9f42905046ff7f64b705d163605302_1440w.webp


NVIC IPR 寄存器与优先级域对照

通过位运算直接给 PORTD 对应的IPR寄存器赋值优先级,优先级为 8 bit 数值。

2. void LPIT0_Ch0_IRQHandler (void) {}
中断函数,在需要中断的模块名后添加IRQHandler。

3. 主程序
等待中断状态。

四、 参考文献
[1] Cortex™-M4 Devices Generic User Guide.pdf,ARM
[2] S32K1xx Series Cookbook.pdf,NXP
[3] S32K144 Reference Manual.pdf,NXP

登陆大大通,了解更多详情,解锁1000+系统级应用方案,更有大联大700+FAE在线为您答疑解惑!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16840

    浏览量

    349735
  • NXP
    NXP
    +关注

    关注

    60

    文章

    1259

    浏览量

    182725
  • NVIC
    +关注

    关注

    0

    文章

    35

    浏览量

    11667
  • S32k144
    +关注

    关注

    1

    文章

    7

    浏览量

    1876
收藏 人收藏

    评论

    相关推荐

    k8s云原生开发要求

    Kubernetes(K8s)云原生开发对硬件有一定要求。CPU方面,建议至少配备2个逻辑核心,高性能CPU更佳。内存至少4GB,但8GB或更高更推荐。存储需至少20-30GB可用空间,SSD提升
    的头像 发表于 10-24 10:03 113次阅读
    <b class='flag-5'>k8s</b>云原生开发要求

    智能家居之旅(15):HA传感器采集主板低功耗设计的遭遇

    智能家居之旅(1):了解HomeAssistant 智能家居之旅(2):设备接入HomeAssistant的方法 智能家居之旅(3):Ai-M61/M62 接入HomeAssistant 实现点灯
    的头像 发表于 09-05 10:27 295次阅读
    智能家居<b class='flag-5'>之旅</b>(15):HA传感器采集主板低功耗设计的遭遇

    STM8S103K3的定时器1中断会连进两次,为什么?

    最近小弟用STM8S103K3又发现一个很奇怪的问题,求FAE和大神们指教//第一种中断格式 INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler
    发表于 05-14 07:40

    STM8S105K4T6使用ADC转换结果异常的原因?如何解决?

    /*----------------------------------------------------------------------------*/ /* @Name: stm8_interrupt_vector.c*/ /* @Brief :*/ /* @Include: stm8
    发表于 05-13 08:52

    亮钻科技推出重磅新品:基于RK3588S平台的K-3588S

    近日,基于RK3588S平台,亮钻科技推出重磅新品:K-3588S,其性能与RK3588相媲美,拥有高性能、高算力和8K视频编解码等优势,且性价比更高,满足用户降本需求。
    的头像 发表于 05-09 14:11 1837次阅读
    亮钻科技推出重磅新品:基于RK3588<b class='flag-5'>S</b>平台的<b class='flag-5'>K-3588S</b>

    基于S32K3的ECU参考设计集成电池管理方案

    S32K396/376 BMS-EVB板现已供货,同时S32K39 / 37 / 36系列芯片将于今年6月正式上市。相关的集中式电芯监控参考设计板也已上市。
    发表于 04-26 10:59 450次阅读

    RK3568驱动指南|驱动基础进阶篇-进阶5 自定义实现insmod命令实验

    RK3568驱动指南|驱动基础进阶篇-进阶5 自定义实现insmod命令实验
    的头像 发表于 02-20 14:10 597次阅读
    RK3568驱动指南|驱动基础<b class='flag-5'>进阶</b>篇-<b class='flag-5'>进阶</b>5 自定义实现insmod命令实验

    基于 NXP S32K311 评估板的方案

    该方案是以 NXP S32K311 芯片为主控制器的评估板方案,S32K311 是基于 ARM Cortex-M7 的嵌入式应用微控制器,有 64 KB 的 Dflash、1 MB 的 Pflash
    的头像 发表于 02-18 11:22 677次阅读
    基于 NXP <b class='flag-5'>S32K</b>311 评估板的方案

    RK3568驱动指南|驱动基础进阶篇-进阶8 内核运行ko文件总结

    RK3568驱动指南|驱动基础进阶篇-进阶8 内核运行ko文件总结
    的头像 发表于 01-31 14:58 1054次阅读
    RK3568驱动指南|驱动基础<b class='flag-5'>进阶</b>篇-<b class='flag-5'>进阶</b>8 内核运行ko文件总结

    S32K 进阶之旅】 NXP S32K3 以太网 RMII 接口调试(1)

    大联大世平集团推出了一款基于NXP车规级MCUS32K344的开发板——花名“Cavalry”,它使用BGA257封装的32位ArmCortex-M7S32K344作为主控芯片,在69.6
    的头像 发表于 01-18 08:26 2001次阅读
    【<b class='flag-5'>S32K</b> <b class='flag-5'>进阶</b><b class='flag-5'>之旅</b>】 NXP <b class='flag-5'>S32K</b>3 以太网 RMII 接口调试(1)

    一块板即轻松搞定!| TH244A001 - 32位Arduino开发资源进阶介绍(2)

    一块板即轻松搞定! TH244A001 - 32位Arduino开发资源进阶介绍(2) 在前一篇文章中\"TH244A001 - 32位Arduino开发资源进阶介绍(1
    发表于 01-12 11:54

    芯圣SDK工具 让开发更方便——HC89S103K6

    SDK-HC89S103K6是基于HC89S103K6设计的快速开发工具。SDK-HC89S103K6由HC89S103K6微控制器的主控板和HC-LINKV4.0仿真烧录器两部分组成
    的头像 发表于 01-10 10:33 440次阅读
    芯圣SDK工具 让开发更方便——HC89<b class='flag-5'>S103K</b>6

    PS-1220S插拔力试验机:力学世界的探秘之旅

    PS-1220S插拔力试验机:力学世界的探秘之旅
    的头像 发表于 01-05 09:08 451次阅读
    PS-1220<b class='flag-5'>S</b>插拔力试验机:力学世界的探秘<b class='flag-5'>之旅</b>

    S32K146的hard fault问题解决方案

    最近有个客户使用S32K146的产品在量产之后出现了三个售后件,ABBA测试之后的结果表明失效现象跟着S32K146走;同时客户反馈说试着将其中一个售后件重新烧录程序,S32K146又正常工作了。结合这两种情况,
    的头像 发表于 11-22 11:35 2043次阅读
    <b class='flag-5'>S32K</b>146的hard fault问题解决方案

    S32K144搭载S32K1XX_MCAL4_2_RTM_1_0_6以及S32DS编译软件使用CAN模块无法发送报文怎么解决?

    我们团队在使用MCAL之CAN模块时无法发送报文的问题,MCAL版本是S32K1XX_MCAL4_2_RTM_1_0_6评估版,使用EB配置CAN模块的工程如附件文件夹
    发表于 11-13 08:29