大大通——大联大线上技术支持平台&方案知识库
一、 S32K144 Interrupt介绍
1. Arm Cortex-M4F 中断结构及中断过程
ARM Cortex-M4F 内核模块框图
S32K144 内核ARM Cortex-M4F 把中断分为内核中断与非内核模块中断,并对内核中断和非内核中断进行了统一编号(0~254),非内核中断的中断请求号(IRQ)为 0~238,对应于中断向量号的 15~254。中断结构原理图如下:
ARM Cortex-M4F 中断结构原理图
M4F 的中断由 M4F 内核、嵌套向量中断控制器(Nested Vectored Interrupt Controller,NVIC)及模块中断源组成。中断过程分为两步:第一,模块中断源向 NVIC 发出中断请求信号;第二步,NVIC 对发来的中断信号进行处理,判断该模块中断源是否被使能,若使能,则通过专用外设总线(Private Peripheral Bus,PPB)发送给 M4F 内核,由内核进行中断处理。如果同时有多个中断信号到来,NVIC 则根据设定好的中断优先级进行判断,优先级高的中断被响应,优先级低的中断被挂起,压入堆栈保存;如果优先级完全相同的多个中断源同时请求,则先响应 IRQ 号较小的,其他被挂起。
2. NVIC 寄存器映射
NVIC 寄存器映射地址(Cortex-M4 User Guide)
上表列出了 NVIC 的寄存器映射,由于 NVIC 属于内核外设,具体的寄存器用法可以参考手册《Cortex™-M4 Devices Generic User Guide》。
二、 S32DS Interrupt例程简介与应用
下面我们以 S32DS 开发环境中自带的例程 hello_Interrupts_s32k144为例。
1. 例程导入
D11 1s闪烁蓝灯
2. 例程简介
此例程通过配置时钟、GPIO、LPIT0和NVIC,将定时器实现的LED灯闪烁的程序放在中断程序中实现LED灯的蓝灯1s闪烁。
3. 例程设计思路
三、 例程代码解释以及寄存器介绍
1. void NVIC_init_IRQs (void)
ICPR: Interrupt Clear-pending Registers 中断清除挂起寄存器
NVIC ICPR 寄存器映射地址
NVIC_ICPR0-NVIC_ICPR7 寄存器清除推迟状态的中断,并显示推迟中的中断。操作方法如下:
S32K144 向量表
查询 S32K144.h 可得 PORTD 的向量值为 64,对应 IRQ 为 48。查询 S32K144 NVIC 寄存器地址可以看到 256 个中断向量被分为 8 个寄存器,每个寄存器共 32 位。通过移位运算给 PORTD 对应的 ICPR 寄存器赋值 1,清除 PORTD 中断。
ISER:Interrupt Set-enable Registers 中断使能寄存器
NVIC ISER 寄存器映射地址
NVIC_ISER0-NVIC_ISER7 寄存器使能中断,并显示已经使能的中断。
通过移位运算给 PORTD 对应的的 ISER 寄存器赋值 1,使能 PORTD 中断。
IP:Interrupt Priority Registers 中断优先级寄存器
NVIC IPR寄存器映射地址
NVIC_IPR0-NVIC_IPR59 寄存器为每一个中断提供8 bit的优先级域,每个寄存器(32bit)包含4个优先级域。这些寄存器都是可以设置的。
NVIC IPR 寄存器分配
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在线为您答疑解惑!
全部0条评论
快来发表一下你的评论吧 !