关于F28335中断的一些理解
我们知道F28335的中断采用的是3级中断机制分别是外设级中断、PIE级中断和CPU级中断如图1所示图1F28335三级中断流程框图我们知道F28335内部有16个中断线2个不可屏蔽中断和14个可屏蔽中断INT1-IN14。其中12个可屏蔽中断INT1-INT12通过PIE外部中断扩展。PIE将外设中断分成了12组分别对应着CPU的12个可屏蔽中断线INT1-INT12每一组由8个外设级中断组成。8个外设中断分别对应相应外设接口的中断引脚PIE通过一个8选1的多路选择器将8个外设中断组成一组EPWM模块是F28335的一个外设EPWM模块对应的中断所在PIE组为第三组即连接的CPU的中断线为INT3其中对应的8个外设中断只用到了六个INT3.1-INT3.6分别对应的是EPWM1-6模块的外设中断剩余两个外设中断保留。如果外设要能够成功产生中断响应就要首先经外设级中断允许然后经PIE允许然后经过CPU允许最终CPU做出响应。具体的流程就是首先外设级的中断需要打开我们需要在EPWM模块的初始化文件中进行设置比如如果我们需要使用EPwm1模块的外设中断那么就需要将EPwm1模块的中断进行使能并设置什么时候进入中断几个事件进一次中断等EPwm1Regs.ETSEL.bit.INTSELET_CTR_ZERO;//当计数值CTR到0时候ePWM1模块中断触发(更新比较寄存器CMPA和CMPB的值)EPwm1Regs.ETSEL.bit.INTEN1;// ePWM1模块中断产生位使能中断EPwm1Regs.ETPS.bit.INTPRD1;//每次事件发生都触发中断在第一个事件时产生SOC信号即SOCBCNT01产生中断这样我们初始化EPWM模块之后就相当于开启了外设级中断。EPWM模块的中断对应的是PIE中断的第三组EPWM1模块的中断对应INT3.1当EPWM1中断信号即时基计数器CTR为0时外设EPWM1模块的中断信号进入PIE模块PIE模块接收到外设请求的中断之后PIEIFR即PIE模块的中断标志位会自动置1不需要人为设置之后经过PIEIER即PIE模块的中断使能位如果相应的PIEIER中断使能位也置1需要在主程序中设置PIE模块将检查PIEACK。PIEACK共有12个位PIEACK1至PIEACK12分别对应PIE模块的12组向量PIEACK3对应的是PIE中断的第3组即EPWM模块的中断PIE模块将检查PIEACK3确定CPU是否准备中断由图1知道PIEACK3信号是低有效当PIEACK3位清零时通过一个与门与之后是1的话PIE模块就可以将外设级中断送入CPU的中断线比如EPWM的中断对应INT3从而进入CPU级中断此时经过CPU的中断标志位IFR会自动置1不需要人为设置之后同样经过CPU的中断使能位IER如果IER也置1需要在主程序中设置那么之后会经过CPU的总中断INTM当INTM位被置0时外设中断就可以进入CPU被执行。当PIE送入一个中断进入CPU之后PIEACK3对应的位会自动置1CPU读到PIEACK3位为1的时候就会断开CPU的中断标志位IFR防止下一个中断进入CPU中断。当CPU执行当前的中断的程序之后在中断程序结束之后需要将ePWM中断的中断标志位写1清除ePWM的中断标志位并将ePWM对应的组的PIEACK3位置1即是CPU给PIEACK3位写1就是中断程序中将PIEAC3K位置1PIEACK3位写1之后PIE模块对应的3组的所有中断标志位PIEIFR3.1到PIEIFR3.8会自动清零全部断开之后PIEACK3位会自动清零等待下一个中断。以下面的中断为例interruptvoidepwm1_isr(void){k2;EPwm1Regs.ETCLR.bit.INT1;//清除标志位PieCtrlRegs.PIEACK.allPIEACK_GROUP3;//清除应答位,中断结束后准备下一次中断响应。EINT;}这里定义了一个ePWM1模块的中断中断函数的名字为epwm1_isr那么我们需要在主程序的最开始声明这个中断函数interruptvoidepwm1_isr(void);//声明EPWM1中断服务程序并在主函数里面需要将epwm1_isr中断函数的入口地址映射到ePWM1的中断的入口地址PieVectTable.EPWM1_INTepwm1_isr;//映射使用的中断向量由于我们中断使用的ePWM1的中断ePWM1的中断是属于外设级中断所以首先需要在EPWM的初始化程序中开启ePWM1模块的外设中断EPwm1Regs.ETSEL.bit.INTSELET_CTR_ZERO;//当计数值CTR到0时候ePWM1模块中断触发EPwm1Regs.ETSEL.bit.INTEN1;// ePWM1模块中断产生位使能中断EPwm1Regs.ETPS.bit.INTPRD1;//每次事件发生都触发中断在第一个事件时产生SOC信号即SOCBCNT01产生中断根据图1我们知道当外设中断进入PIE模块时PIE模块的中断标志位PIEIFR会自动置1但是PIE的中断使能位PIEIER需要在主程序中设置PieCtrlRegs.PIEIER3.bit.INTx1 1;//允许PIE级中断INT3.1即EPWM1中断由于PIEACK3的位初始状态为0所以ePWM1中断会顺利进入CPU级中断INT3CPU的中断标志位IFR会自动置1但是CPU的中断使能位IER需要在主程序中设置IER | M_INT3;//允许CPU的INT3对应的是EPWM1~6之后还需要在主程序设置CPU级的总中断INTM让INTM置0使能CPU的全局中断EINT; // Enable Global interrupt INTM这样外设ePWM1的中断就能顺利进入CPU进行执行了我们前面分析了PIEACK3位初始状态为0进入中断服务子程序之后PIEACK3会自动置1CPU读取到PIEACK3为1时就会关闭CPU的所有中断线。在中断服务子程序epwm1_isr函数中打一个Breakpoint断点 ● interruptvoidepwm1_isr(void){● k2;// ● 表示断点位置EPwm1Regs.ETCLR.bit.INT1;//清除标志位PieCtrlRegs.PIEACK.allPIEACK_GROUP3;//清除应答位,中断结束后准备下一次中断响应。EINT;}当程序刚载入到目标板的时候在CCS的Expression中观察PIEACK寄存器的所有的值如图2所示图2初始状态PIEACK3的值为0可以发现当程序还没运行的时候PIEACK的所有位初始状态为0之后点击运行程序当程序运行到Breakpoint断点的时候再次查看PIEACK寄存器的所有位的值如图3所示图3运行到中断程序时PIEACK3值为1之后按住F6进行单步运行首先是清除ePWM1模块的中断标志位➤ EPwm1Regs.ETCLR.bit.INT1;//清除标志位PieCtrlRegs.PIEACK.allPIEACK_GROUP3;//清除应答位,中断结束后准备下一次中断响应。再次按F6进行单步运行EPwm1Regs.ETCLR.bit.INT1;//清除标志位➤ PieCtrlRegs.PIEACK.allPIEACK_GROUP3;//清除应答位,中断结束后准备下一次中断响应。运行最后一句之后查看PIEACK寄存器的值的变化当再次按F6运行完最后一条语句之后会发现PIEACK3位会清零如图4所示图4PIEACK写PIEACK_GROUP3之后CPU自动将PIEACK3清零这也就是CPU给PIEACK的所有位写PIEACK_GROUP3之后PIEACK会将PIE模块的所有中断标志位全部清零断开同时PIEACK3寄存器位也被自动清零准备下一次的中断。最后再次观看PIEACK寄存器的英文描述如图5所示图5PIEACK寄存器的使用如果CPU读到PIEACK的某一位为0表明PIE能够将对应组的中断送入CPU中断如果CPU写0到PIEACK没有效果如果CPU读到PIEACK的某一位为1表明已经有某一组的中断进入了CPU中断其他组的中断被阻断。如果CPU写1到PIEACK的某一位表明PIEACK对应位会自动清零允许PIE模块将正在等待进入CPU中断的中断函数送入CPU执行。以上就是对中断执行的全部过程的理解。

相关新闻

原理与实践gRPC

原理与实践gRPC

原理与实践gRPC 参考文档 referrence

2026/10/13 17:55:38 阅读更多 →
SystemInformer 使用教程:把“电脑卡顿元凶“到“蓝屏根因“一次查个底朝天

SystemInformer 使用教程:把“电脑卡顿元凶“到“蓝屏根因“一次查个底朝天

SystemInformer 使用教程:把"电脑卡顿元凶"到"蓝屏根因"一次查个底朝天 【免费下载链接】systeminformer A free, powerful, multi-purpose tool that helps you monitor system resources, debug software and detect malware. Brought to you…

2026/10/13 3:17:15 阅读更多 →
ImageNet-Adversarial-Training 实战拆解:用对抗训练加特征去噪,驯服“看不见的攻击“

ImageNet-Adversarial-Training 实战拆解:用对抗训练加特征去噪,驯服“看不见的攻击“

ImageNet-Adversarial-Training 实战拆解:用对抗训练加特征去噪,驯服"看不见的攻击" 【免费下载链接】ImageNet-Adversarial-Training ImageNet classifier with state-of-the-art adversarial robustness 项目地址: https://gitcode.com/gh…

2026/10/13 17:03:27 阅读更多 →

最新新闻

Service层命名规范:从见名知意到代码可维护性

Service层命名规范:从见名知意到代码可维护性

接手一个业务系统,我最怕看到的不是复杂算法,而是那种一打开就让人头晕的 Service 实现类。2000 行起步,方法名字从 process 到 handle 再到 doSomething,翻遍整个类也猜不出某个方法是干嘛的。命名这种事,看起来不影响…

2026/10/13 17:55:28 阅读更多 →
Windows内核模块枚举与隐藏原理深度解析

Windows内核模块枚举与隐藏原理深度解析

1. 这不是“找模块”,而是在内核内存里做一次精准外科手术“枚举和隐藏内核模块”——这八个字在安全研究、驱动开发或系统调试场景中,绝不是一句轻飘飘的技术术语。它背后是一整套对Windows内核运行时状态的深度观测与主动干预能力。我第一次在某高校实…

2026/10/13 17:55:28 阅读更多 →
Hibernate二级缓存Provider详解:从原理到选型与排坑

Hibernate二级缓存Provider详解:从原理到选型与排坑

被人突然问起“Hibernate的caching provider是什么”,我第一反应是:能问出这个词的人,多半已经看到配置文件里那一堆以hibernate.cache开头的键,但又没搞懂这些键到底在切换什么。这篇文章就把这个词拆开讲清楚,重点解…

2026/10/13 17:55:28 阅读更多 →
电能质量复合扰动识别:混沌集成决策树实战解析

电能质量复合扰动识别:混沌集成决策树实战解析

简介:这是一份面向电能质量复合扰动识别研究的MATLAB完整源程序包,对应知网论文《基于混沌集成决策树的电能质量复合扰动识别》,可作为电气工程、信号处理及机器学习方向的毕业设计或课题研究参考,帮助复现算法并开展对比实验。程…

2026/10/13 17:55:28 阅读更多 →
CentOS局域网DNS搭建:BIND9多域名权威解析实战

CentOS局域网DNS搭建:BIND9多域名权威解析实战

1. 为什么在CentOS上自建局域网DNS不是“多此一举”,而是刚需落地的第一步很多人看到“CentOS搭建局域网DNS”第一反应是:不就是改个/etc/resolv.conf?内网查个主机名用/etc/hosts不就完事了?我试过——在某高校实验室的物联网教学…

2026/10/13 17:55:28 阅读更多 →
ActiveMQ consumerCount精准获取与实战调优指南

ActiveMQ consumerCount精准获取与实战调优指南

1. 项目概述:为什么“获取消费者数量”是 ActiveMQ 运维与调优的黄金指标在某公司消息中间件团队的实际运维中,我接手的第一个紧急故障就和consumerCount直接相关——一个订单履约服务突然延迟飙升,下游库存扣减平均耗时从200ms暴涨到8秒。排…

2026/10/13 17:54:25 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →