大家好,欢迎来到我们的 DSP28335 深度解析系列。在之前的实战中,我们通过 while(1) 循环和延时函数实现了各种控制,这种方式被称为轮询。但轮询就像一个焦急的门卫,需要不停地去检查每个门口是否有人,既浪费精力又效率低下。今天,我们将学习一种更高效、更优雅的机制——中断 (Interrupt),为我们的系统装上“门铃”,让它从被动等待变为主动响应。

掌握中断系统,是从入门到精通的必经之路,是释放 DSP 真正潜能的关键。

一、中断是什么?—— 从“轮询”到“事件驱动”

[图1: 中断示意图]

中断,顾名思义,就是打断当前正在执行的任务。在 CPU 执行程序时,如果发生了某个需要立即处理的紧急或随机事件(例如按键按下、定时器到时、数据接收完成),这个事件就会像一个“请求”,向 CPU 申请关注。CPU 在允许的情况下,会暂时挂起当前正在执行的程序,转而去执行一段专门为处理该事件而写的代码——即中断服务程序 (ISR, Interrupt Service Routine)。当事件处理完毕后,CPU 会自动返回到之前被打断的地方,继续执行原来的程序。

这一过程,就如同你在专心看书(主程序),突然电话铃响(中断请求),你于是放下书,拿起听筒接电话(执行ISR),讲完电话后,你再拿起书从刚才读到的地方继续看下去。

二、F28335 中断的宏观架构

TI 的 C2000 系列 DSP,尤其是 F28335,拥有一个非常强大且灵活的中断系统。

[图2: F28335 中断源与内核关系图]

  • 16 条核心中断线: F28335 的 C28x 内核有 16 个中断入口。这包括 2 个不可屏蔽中断(RESET 和 NMI - Non-Maskable Interrupt,通常用于电源掉电等最高紧急事件),以及 14 个可屏蔽中断(INT1 ~ INT14)。

  • 众多的中断源: 而 DSP 的外设远不止 14 个,ADC、ePWM、SPI、SCI、CAN、定时器等几十个模块都可能产生中断请求。

  • PIE 的诞生: 如何用 14 条中断线,管理几十个中断源?答案就是复用PIE (Peripheral Interrupt Expansion) 模块应运而生,它像一个巨大的中断“集线器”或“管理器”,负责将众多的外设中断请求,分门别类地汇总到 CPU 的 12 条主中断线(INT1 ~ INT12)上。

三、三级中断机制:从申请到批准的层层关卡

F28335 的中断响应过程像一个严格的“三级审批”流程。一个外设的中断请求,必须依次通过外设级PIE 级和 CPU 级三道“门禁”,才能最终得到 CPU 的响应。

[图3 & 图4: 外部中断信号通路图]

第一级:外设级中断使能

  • 关卡描述: 这是中断请求的源头。每个能够产生中断的外设模块(如 ADC、ePWM),其内部都有自己的中断使能位。

  • 放行条件: 必须将对应外设的中断使能位置 1,它才被“允许”发出中断请求。如果这里是关闭的,那它连“喊一声”的机会都没有。

第二级:PIE 级中断使能

  • 关卡描述: 这是中断请求的分组管理中心。PIE 模块将 96 个中断源分成了 12 个大组(PIE Group 1 ~ 12),每个大组包含 8 个中断。

    [图6: PIE 96路中断分组逻辑图]

  • 放行条件: 中断请求到达 PIE 后,需要通过两个“开关”:

    1. PIEIFRx.y (中断标志位): 当中断请求到达,对应的标志位会自动置 1,表示“有人敲门了”。

    2. PIEIERx.y (中断使能位): 必须将这个使能位置 1,表示“允许这扇门打开”。这个 x 代表组号 (1-12),y 代表组内中断号 (1-8)。

  • 核心工作: 只有当 PIEIFR 和 PIEIER 中对应的位都为 1 时,该中断请求才能通过 PIE 这一级,并被提交给 CPU 对应的主中断线(例如,第3组的所有中断请求,最终都会汇集到 CPU 的 INT3 中断线上)。

    [图7: PIE 中断向量表]

第三级:CPU 级中断使能

  • 关卡描述: 这是中断请求的“总开关”和“最后一道防线”,直接与 CPU 内核相连。

    [图5: PIE 与 CPU 中断逻辑细节图]

  • 放行条件: PIE 提交的中断请求到达 CPU 后,同样需要通过两个“开关”:

    1. IFR (中断标志寄存器): 当 INTx (x=1~14) 上有中断请求时,IFR 对应的位会置 1。

    2. IER (中断使能寄存器): 这是 14 个主中断线的使能开关。必须用 IER |= M_INTx 的方式,打开对应中断线的“阀门”。

    3. INTM (全局中断使能位): 这是全局的总开关。只有当 INTM 为 0 时,CPU 才响应中断。我们可以用汇编指令 EINT (Enable INTerrupt) 来清零它,或用 DINT (Disable INTerrupt) 来置位它。

总结:一个中断要想最终被 CPU 响应,必须同时满足:①外设中断使能打开 ②PIE 组中断使能打开 ③CPU 主中断线使能打开 ④CPU 全局中断使能打开。

四、中断响应:找到正确的服务程序 (中断向量表)

当中断请求历经千辛万苦终于获得批准后,CPU 需要知道应该去哪里执行对应的中断服务程序(ISR)。存放这些 ISR 入口地址的表,就叫做中断向量表 (Interrupt Vector Table)

  • 中断向量: 每个 ISR 的入口地址就是一个中断向量。它是一个 22 位的地址。

  • 中断向量表: F28335 中,这个向量表可以被映射到不同的物理存储区域,这由三个关键的控制位来决定。

    1. ENPIE (在 PIECTRL 寄存器中): PIE 模块的总开关。当它为 1 时,PIE 功能开启。复位后为 0。

    2. VMAP (在 ST1 状态寄存器中): 控制向量是映射到内存低地址区还是高地址区(BOOT ROM)。复位后为 1。

    3. M0M1MAP (在 ST1 状态寄存器中): 用于区分 M0 和 M1 RAM。复位后为 1。

  • 实际应用中的选择:

    [图8: PIE 使能时的向量映射表]
    [图9: PIE 禁用时的向量映射表]

    通过查阅这两张表格,我们可以得出在实际应用中最常用的配置:
    我们将 ENPIE 置 1,同时保持 VMAP=1 和 M0M1MAP=1。
    在这种配置下,中断向量表被稳稳地映射到了 F28335 的 PIE RAM 区 (0x000D00 - 0x000DFF)。这样做的好处是,我们可以非常方便地在程序中,将我们自己编写的 ISR 函数的地址,注册到这个 RAM 区域的向量表中,从而将中断源和我们的服务程序动态地“链接”起来。

总结

DSP28335 的中断系统初看复杂,但其设计逻辑清晰、层次分明:

  • 架构上,通过 PIE 模块实现了对海量中断源的分级管理

  • 响应上,通过“外设-PIE-CPU”的三级审批流程,确保了中断响应的严谨性和可控性。

  • 寻址上,通过灵活的向量表映射机制,让用户可以方便地自定义中断服务程序。

虽然理论略显枯燥,但彻底理解这一套机制,是你编写高效、稳定、强大的嵌入式程序的基石。在下一篇章中,我们将进入实战,亲手配置一个定时器中断,让你真正感受到中断带来的编程魅力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95677.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95677.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95677.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录二刷之“字符串”~GO

1.344. 反转字符串 - 力扣&#xff08;LeetCode&#xff09; func reverseString(s []byte) {left : 0right : len(s)-1for left < right{s[left],s[right] s[right],s[left]leftright--}return } 感悟&#xff1a;还是go语法熟练程度的问题&#xff0c;需要注意的是&am…

(!万字血书!)文本预处理:NLP 版 “给数据洗澡” 指南

好吧&#xff0c;我承认我是个标题党&#xff01;(不这样你会点进来享受这篇 通俗易懂 的好文章吗&#xff1f;) 正经标题&#xff1a;文本预处理全流程:从基础到实践 &#xff08;屏幕前的你&#xff0c;帅气低调有内涵&#xff0c;美丽大方很优雅… 所以&#xff0c;求…

最新chrome浏览器elasticsearch-head无法安装使用问题

chrome浏览器网址栏复制粘贴以下内容输入回车 chrome://flags/#allow-legacy-mv2-extensions 找到Allow legacy extension manifest versions项右侧选择Enabled启用&#xff0c;重启浏览器即可。

CSS aspect-ratio 属性

aspect-ratio 是 CSS 中用于控制元素宽高比的属性&#xff0c;通过一行代码即可实现响应式比例布局&#xff0c;无需复杂计算。它确保元素在不同屏幕尺寸下保持固定比例&#xff0c;提升响应式设计效率。一、基本语法与取值selector {aspect-ratio: <width> / <height…

FreeRTOS多核支持

个人博客&#xff1a;blogs.wurp.top 简介 1. 多核支持概述 在传统的单核系统中&#xff0c;FreeRTOS 通常运行在一个 CPU 核心上&#xff0c;负责任务调度、中断处理和资源管理。然而&#xff0c;在多核系统中&#xff0c;多个核心可以并行执行不同的任务或线程&#xff0c…

CUDA中的基本概念

要学习cuda的同学相信已经对其有一定的了解了&#xff0c;至少直到它是干什么的了。这篇文章主要是对cuda编程中的主要概念进行总结&#xff0c;有了一个大致的轮廓后就好入手了。 异构架构 异构架构即使用CPU和GPU共同进行计算。GPU不能作为一个独立的运行平台&#xff08;程序…

【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器

目录 1. 初识HTTP 2. URL 2.1 基本结构 2.2 URL中的?与urldecode\urlencode 易混淆&#xff1a;URL和HTTP传输请求两者是什么关系&#xff1f; HTTP的宏观结构 3. DEMO CODE loop模块&#xff0c;核心逻辑 HttpServer 初代版本&#xff08;DEMO 0.0&#xff09; DEMO 1.0 DEMO…

Spring Boot 静态函数无法自动注入 Bean?深入解析与解决方案

在 Spring Boot 项目中&#xff0c;开发者常遇到一个典型问题&#xff1a;在静态方法或静态变量中尝试使用 Autowired 注入 Bean 时&#xff0c;始终得到 null 值。本文将深入剖析这一问题的根源&#xff0c;并提供多种可靠解决方案。问题重现&#xff1a;为什么注入失败&#…

存储过程作为系统逻辑核心的架构思考 —— 以 SaaS 系统为例

在企业级系统尤其是 SaaS 架构中&#xff0c;技术选型一旦确定&#xff0c;就意味着底层数据库类型基本不会轻易更换。既然如此&#xff0c;我们可以更大胆地将数据库能力本身纳入系统设计的核心&#xff0c;而不仅仅把它当成一个被动的存储引擎。存储过程&#xff08;Stored P…

Ubuntu20.04下Remmina的VNC密码忘记后重置

你遇到的错误&#xff1a; ** error creating password: /home/ysc/.vnc/passwd storepasswd: No such file or directory说明&#xff1a;x11vnc -storepasswd 无法创建密码文件&#xff0c;因为 .vnc 目录不存在。 虽然你可能以为路径是对的&#xff0c;但系统找不到 /home/y…

从“存得对”到“存得准”:MySQL 数据类型与约束全景指南

目录 一、为什么需要数据类型与约束&#xff1f; 二、MySQL 数据类型全览 1. 数值类型&#xff1a;精确 VS 近似 2. 日期时间类型&#xff1a;别让“0000-00-00”出现 3. 字符串类型&#xff1a;CHAR、VARCHAR、TEXT、BLOB 4. JSON 类型&#xff1a;文档与关系共舞 5. 空…

Effective C++ 条款42:了解 typename 的双重含义

Effective C 条款42&#xff1a;了解typename的双重含义 核心思想&#xff1a;在模板声明中&#xff0c;typename和class可互换使用&#xff0c;但在模板内部&#xff0c;typename必须用于显式指明嵌套从属类型名称&#xff08;nested dependent type name&#xff09;&#xf…

ENCOPIM, S.L. 参展 AUTO TECH China 2025 广州国际汽车技术展览会

ENCOPIM, S.L. 参展 AUTO TECH China 2025 广州国际汽车技术展览会2025年11月21-24日中国进出口商品交易会展馆D区(广州)AUTO TECH China 2025同期&#xff1a;第二十三届广州车展即将盛大开幕展商推荐ENCOPIM, S.L.展位号&#xff1a;3916企业简介&#xff1a;ENCOPIM, S.L.于…

30 HTB Soccer 机器 - 容易

主要知识点 第一阶段&#xff1a;侦查 nmap nmap快速扫描&#xff1a; oxdfhacky$ nmap -p- --min-rate 10000 10.10.11.194 Starting Nmap 7.80 ( https://nmap.org ) at 2023-06-04 13:32 EDT Nmap scan report for 10.10.11.194 Host is up (0.093s latency). Not shown:…

阿里云机器翻译接口SDK-RAM权限配置

用户授权翻译权限在数字化时代&#xff0c;短信作为企业与用户沟通的重要桥梁&#xff0c;其高效、可靠的送达直接影响业务转化与用户体验。SDK&#xff08;软件开发工具包&#xff09;的出现极大简化了短信功能的集成过程&#xff0c;让开发者能够快速在应用中嵌入短信验证、通…

ESXI 6.7服务器时间错乱问题

1. 设置ESXI服务器&#xff1a;在此主机上手动配置日期和时间管理-服务-ntpd-鼠标右键-策略-手动启动和停止&#xff0c;状态已停止管理-系统-时间和日期-编辑设置-检查是否选择了【在此主机上手动配置日期和时间】ntp服务状态已停止ntp服务器已停止2. 停止所有虚拟机自动更新时…

CV 医学影像分类、分割、目标检测,之【皮肤病分类】项目拆解

CV 医学影像分类、分割、目标检测&#xff0c;之【皮肤病分类】项目拆解第1-12行&#xff1a;导入库第14-17行&#xff1a;读取标签文件第19-21行&#xff1a;获取疾病名称第23-26行&#xff1a;获取图片名列表第28-35行&#xff1a;筛选有标签的图片第38-43行&#xff1a;提取…

【JavaEE】多线程 -- 线程状态

目录六大状态举例说明六大状态 New 新建状态&#xff1a;线程还没出创建&#xff0c;只有Thread 实例化的对象&#xff0c;调用start 方法之前的状态。Runnable 运行状态&#xff1a;被系统调度后&#xff0c;CPU 正在执行的&#xff0c;Ready 就绪态&#xff0c;系统调度&…

网络流初步

网络流初步 文章目录网络流初步概念介绍最大流费用流概念介绍 网络流不同之处在于它的本质图论&#xff0c;但是把图论的某些概念换了一个说法而已&#xff0c;初步只要了解网络流的各个概念就可以明白的很快。 下述概念是本人自己定义的&#xff0c;对于网络流的题目做的还不…

[系统架构设计师]系统架构基础知识(一)

[系统架构设计师]系统架构基础知识&#xff08;一&#xff09; 一.计算机系统基础知识 1.计算机系统概述 硬件软件及网络组成的系统 2.计算机硬件基础知识 冯 诺依曼结构&#xff1a;运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备 专用…