大大通——大联大线上技术支持平台&方案知识库
一、 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_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”。
在弹出的窗口选取 s32k144 目录下的 hello_interrupts 例程,点击“finish”。
点击左上角“build”按钮,编译例程。
点击“debug”按钮。进入例程debug页面。
点击运行程序 按钮,d11 led blue 灯 1s闪烁。
d11 1s闪烁蓝灯
2. 例程简介
hello interrupt介绍此例程通过配置时钟、gpio、lpit0和nvic,将定时器实现的led灯闪烁的程序放在中断程序中实现led灯的蓝灯1s闪烁。
hello interrupt框图
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
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在线为您答疑解惑!
温度的不同对于锂电池包来说会有什么影响
极路由正式开启极链全民公测,200万用户可体验区块链服务
顺丰员工闹情绪迟迟不肯发货, 上市之后走向膨胀
到底什么是建立时间/保持时间?
三星note8最新消息:继续提高屏占比,美的简直逆天
【S32K 进阶之旅】Interrupt 模块介绍与应用
华为鸿蒙系统什么时候可以搭载在笔记本电脑上使用
99个项目入选国家“智能制造试点示范项目”
高频开关电源电路原理分析
LSI封装的发展
如何强化你的服务器安全11张网络安全思维导图
彻底释放你的双手!Picbot实时面部追踪底座可实现360度旋转自拍
ST以全面解决方案推动NFC创新应用场景落地
Qualcomm的创新驱动物联网发展势头横跨数百个领导品牌
怎么计算密度计
润滑剂与径向密封圈材料的成套解决方案
远程医疗行业生物传感应用中的设计新挑战
油气回收系统的实时在线监测系统设计
工业应用中常见数字接口的简化示意图介绍
江苏亨通太赫兹有限公司荣获“创新企业奖”