当前位置: 首页 > news >正文

DSP中断工作原理

DSP F28335 中断系统详解

中断是由硬件或软件驱动的事件,它会使CPU暂停当前正在执行的主程序,转而去执行一个特定的中断服务子程序;当中断服务子程序执行完毕后,CPU会返回到主程序中原本暂停的位置,恢复现场并继续执行。这一机制使得CPU能够及时响应外部事件或处理内部紧急任务,大大提高了程序的执行效率。

一个通俗的比喻是:一位工程师正在编写代码(相当于CPU执行主程序),此时电话铃声响起(相当于中断请求),他暂停手头的工作,去接听电话(相当于执行中断服务子程序);通话结束后,他回到电脑前,从他刚才停顿的代码行继续编写(相当于返回主程序继续执行)。这个过程形象地模拟了CPU处理中断的完整流程。

F28335 的中断源分类

F28335的中断源丰富,可分为两大类:

  1. 片内外设中断源:由芯片内部集成的外设模块产生,如PWM、CAP(捕获)、QEP(正交编码脉冲)、ADC、SPI、SCI等。当这些外设完成特定操作(如PWM周期匹配、ADC转换完成、接收到串口数据)时,会向CPU发出中断请求。
  2. 片外中断源:由芯片外部信号通过特定的外部中断输入引脚引入,主要是XINT1~XINT7等引脚。这些引脚可以直接连接按键、限位开关等外部数字信号,用于检测上升沿或下降沿事件。

F28335 CPU级中断结构

CPU级别,F28335设计了16个中断线(INT1~INT14,加上RESETNMI),其结构如下图所示:

F28335的中断线可分为两种基本类型:

  • 不可屏蔽中断(NMI
    • 特点:拥有最高的优先级,用于处理系统中最紧急、最严重的故障事件(如系统复位RESET、看门狗超时、严重的硬件故障等)。CPU无法通过任何软件指令(如配置中断使能寄存器)来禁止或忽略这类中断的响应。一旦触发,CPU必须立即暂停当前任务进行处理。
    • 例子:RESET(复位)和NMI(不可屏蔽中断)本身。
  • 可屏蔽中断(INT1~INT14
    • 特点:这类中断的响应与否,可以通过软件进行灵活控制。程序员可以通过设置中断使能寄存器(如IER)来“使能”(允许响应)或“屏蔽”(禁止响应)它们。当系统正在执行关键代码段,不允许被中断打扰时,可以暂时屏蔽这些中断;在条件允许时,再重新使能,让CPU处理外设的请求。
    • 例子:绝大多数片内外设(如定时器、串口)和外部引脚(XINT)引发的中断都属于此类。

PIE(外设中断扩展)模块的核心作用

从图中可以看到,F28335丰富的片内外设中断源(多达96个)远多于CPU14个可屏蔽中断线。为了解决这个矛盾,芯片内置了强大的PIE模块

  • 功能:PIE模块充当了一个高度组织化的“中断调度中心”。它将96个外设中断源分成12个组(PIE Group 1 ~ Group 12),每组管理8个中断。然后,每一组“借用”一个CPU的中断线(例如,PIE Group 1 对应 CPU的INT1,Group 2 对应 INT2,依此类推)。
  • 工作流程
    1. 当一个外设(例如PWM1)产生中断时,请求信号首先发送到PIE模块。
    2. PIE模块识别出该中断属于哪个组(例如PWM1属于Group 2),并检查该组和对应的CPU中断线是否已使能。
    3. 如果条件满足,PIE模块会通过对应的CPU中断线(例如INT2)向CPU发出请求。
    4. CPU响应INT2后,会询问PIE模块:“是Group 2中的哪一个中断?”
    5. PIE模块会给出一个具体的向量号,CPU根据这个向量号,跳转到预先在PIE向量表中设置好的、唯一对应的中断服务函数地址去执行。

通过这种分级管理机制,PIE成功地实现了将海量外设中断源复用、映射到有限的CPU中断线上,使F28335能够高效地管理复杂的中断系统。

F28335 采用外设级中断、PIE 级中断、CPU 级中断的三级中断机制,以高效管理大量外设中断:

  • CPU 级中断:是最核心的中断响应层,CPU 仅能响应自身中断线上传递来的中断请求;但因 F28335 中断源极多、CPU 中断线数量有限,需通过 “中断线复用” 扩展能力。
  • PIE 级中断:作为中间层,负责管理中断线的复用,解决 “中断源数量远多于 CPU 中断线数量” 的矛盾。
  • 外设级中断:是中断的起始层,外设需先获得自身的中断允许,才能进一步向更高层传递中断请求。

中断响应流程:外设要触发中断并被 CPU 响应,需依次经过「外设级中断允许」PIE 级中断允许」CPU 级中断允许」,三级允许都满足后,CPU 才会响应。

外设级中断的核心机制可总结为以下几点:

  1. 标志与使能联动:外设产生中断事件时,自身对应中断标志位(IF)会置 1;只有当该中断的使能位(IE)也被置 1 时,外设才会向 PIE 控制器发送中断请求。
  2. 标志位的保持性:若中断使能位(IE)为 0,即便中断标志位(IF)已置位,外设也不会向 PIE 发请求,但 IF 会持续保持置位状态,直到程序手动清除;若后续 IE 被置 1,外设会立即向 PIE 发起中断请求。
  3. 标志位的清除:进入中断服务程序后,部分硬件外设会自动复位中断标志寄存器,多数外设则需要通过程序手动复位中断标志寄存器。

PIE 级中断是为解决 “CPU 中断线数量不足,无法直接处理所有外设级中断而设计的中间层管理机制,核心要点如下:

  • 分组复用逻辑:F28335 的 PIE 模块将众多外设中断划分为12 个组,每组对应 CPU 的 1 个可屏蔽中断线;每组内部又包含8 个外设级中断,通过 “8 选 1 多路选择器” 实现组内中断的复用与转发管理。
  • 中断规模适配:实际有效外设中断共 58 个(其余为保留),借助 PIE 的分组复用,可适配 CPU 仅 12 个可屏蔽中断线的硬件限制,让大量外设中断能被有序处理。

CPU 级中断作为中断响应的核心执行层,通过 ** 中断标志寄存器(IFR)、中断使能寄存器(IER)、全局中断屏蔽位(INTM)** 协同管理,流程分为四步:

1. 请求接收与标志锁存

当外设中断经 PIE(外设中断扩展模块)传递到 CPU 时,IFR中对应中断的标志位(如外部中断 XINT1 的标志位)会置 1,并被锁存在寄存器中。

2. 响应条件判断

CPU 不会立即响应中断,需同时满足两个条件:

IER 使能:IER中对应中断的使能位已置 1(允许该中断被 CPU 响应);

全局中断允许:全局中断屏蔽位INTM为 0(表示 CPU 允许响应全局可屏蔽中断)。

3. 上下文保护与中断屏蔽

为确保中断返回后能恢复原程序执行,CPU 会执行一系列准备操作:

清除IFR中已响应的对应中断标志位;

清除EALLOW(权限控制位,限制关键寄存器访问);

置位INTM(暂时屏蔽其他可屏蔽中断,避免普通中断嵌套干扰;需注意:**RESET(复位信号)、NMI(不可屏蔽中断)** 优先级最高,即使 INTM 置位,仍会强制触发 CPU 响应);

存储返回地址,并将当前运行的关键数据(如寄存器值)压入堆栈。

4. 执行中断服务子程序

准备完成后,CPU 从PIE 向量表中取出对应的中断服务子程序(ISR)向量,转而执行中断服务程序。

一、DSP28335 内部定时器中断--配置详解

等待补充

二、DSP28335 外部中断配置详解

概述

本案例基于DSP28335微控制器,实现了两个外部中断功能,分别对应GPIO12GPIO13两个按键输入,控制LED13LED12的翻转。下面将详细解析外部中断的初始化配置过程。

硬件连接原理

按键电路

  • 按键采用上拉电阻设计,IO口外部连接3.3V上拉电阻
  • 按键未按下时:IO口保持高电平(3.3V)
  • 按键按下时:IO口被拉低到地(GND)
  • 中断触发方式:下降沿触发(从高电平变为低电平时触发)

LED电路

  • LED采用共阳极接法,阳极连接3.3V电源
  • 阴极通过限流电阻连接到DSP的IO口
  • 当IO口输出低电平时,LED导通发光
  • 当IO口输出高电平时,LED熄灭

外部中断1(XINT1)初始化详解

1. 时钟使能

c

EALLOW;

SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;  // 使能GPIO输入时钟

EDIS;

作用:开启GPIO输入模块的时钟,这是GPIO中断功能正常工作的前提。

2. GPIO端口配置

c

EALLOW;

// KEY1端口配置(GPIO12)

GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0;     // 配置为GPIO功能

GpioCtrlRegs.GPADIR.bit.GPIO12 = 0;      // 配置为输入方向

GpioCtrlRegs.GPAPUD.bit.GPIO12 = 0;      // 使能上拉电阻

GpioCtrlRegs.GPAQSEL1.bit.GPIO12 = 0;    // 与系统时钟同步,无采样周期

// LED控制端口配置(GPIO48)

GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0;     // 配置为GPIO功能

GpioCtrlRegs.GPBDIR.bit.GPIO48 = 1;      // 配置为输出方向

GpioCtrlRegs.GPBPUD.bit.GPIO48 = 0;      // 使能上拉电阻

GpioDataRegs.GPBCLEAR.bit.GPIO48 = 1;    // 初始化为高电平,LED熄灭

EDIS;

3. 外部中断引脚选择

c

EALLOW;

GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 12;  // XINT1映射到GPIO12

EDIS;

作用DSP28335XINT1可以映射到多个GPIO引脚,这里选择GPIO12作为外部中断1的输入源。

4. 中断向量表配置

c

EALLOW;

PieVectTable.XINT1 = &EXINT1_IRQn;  // 注册中断服务函数

EDIS;

作用:将中断服务函数EXINT1_IRQn的地址写入PIE中断向量表,当中断发生时CPU会自动跳转到该函数执行。

5. PIE级中断使能

c

PieCtrlRegs.PIEIER1.bit.INTx4 = 1;  // 使能PIE1的第4个中断(XINT1)

作用:在PIE(外设中断扩展)模块中使能XINT1中断。

6. 外部中断控制器配置

c

XIntruptRegs.XINT1CR.bit.POLARITY = 0;  // 下降沿触发

XIntruptRegs.XINT1CR.bit.ENABLE = 1;    // 使能XINT1中断

参数说明

  • POLARITY = 0:下降沿触发
  • POLARITY = 1:上升沿触发
  • POLARITY = 2:双边沿触发

7. CPU级中断使能

c

IER |= M_INT1;  // 使能CPU中断1(对应PIE1

EINT;           // 开启全局中断

ERTM;           // 开启实时调试中断

外部中断2(XINT2)初始化详解

XINT2的初始化流程与XINT1类似,主要区别在于输入限定器的配置:

输入限定器特殊配置

c

GpioCtrlRegs.GPAQSEL1.bit.GPIO13 = 2;        // 6个采样窗口限定具体工作流程。

// GPAQSEL1寄存器位域定义

GPAQSEL1.bit.GPIO13 = 0;  // 同步模式,无采样限定

GPAQSEL1.bit.GPIO13 = 1;  // 3采样模式

GPAQSEL1.bit.GPIO13 = 2;  // 6采样模式案例中使用

GPAQSEL1.bit.GPIO13 = 3;  // 保留

GpioCtrlRegs.GPACTRL.bit.QUALPRD1 = 0xFF;   // 采样周期为512*SYSCLKOUT

正确公式:采样周期 = (QUALPRD + 1) × 2 × TSYSCLKOUT

案例计算:0xFF → (255+1)×2 = 512SYSCLKOUT周期

输入限定器作用

  • 防止按键抖动导致误触发
  • 采用6个采样窗口,只有当连续6个采样点都满足触发条件时才认为有效中断
  • 采样周期配置为较大值,增强抗干扰能力

其他配置差异

c

GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 13;  // XINT2映射到GPIO13

PieCtrlRegs.PIEIER1.bit.INTx5 = 1;          // 使能PIE1的第5个中断(XINT2)

中断服务函数详解

XINT1中断服务函数

c

interrupt void EXINT1_IRQn(void)

{

    Uint32 i;

    for(i=0;i<10000;i++);    // 延时消抖

    while(!KEY_H1);           // 等待按键释放

    LED13_TOGGLE;            // 翻转LED13状态

    PieCtrlRegs.PIEACK.bit.ACK1 = 1;  // 清除PIE中断标志

}

中断处理流程

  1. 延时消抖:通过循环延时消除按键机械抖动
  2. 等待释放:确保在按键释放后才执行后续操作
  3. 执行功能:翻转LED状态
  4. 清除标志:向PIEACK寄存器写1,清除中断标志,允许新的中断

关键技术要点

1. 中断优先级管理

  • PIE模块将96个外设中断分为12组,每组8个中断
  • XINT1属于PIE组1的INT4,XINT2属于PIE组1的INT5
  • 同一组内的中断有固定的硬件优先级

2. 中断响应流程

  1. 外设产生中断信号
  2. PIE模块接收并判断中断源
  3. CPU响应中断,跳转到对应的中断服务函数
  4. 执行中断处理代码
  5. 清除中断标志,返回主程序

3. EALLOW/EDIS保护机制

  • 某些关键寄存器受EALLOW保护,修改前需要使用EALLOW指令
  • 修改完成后使用EDIS指令恢复保护状态
  • 防止意外修改重要系统配置

总结

本案例完整展示了DSP28335外部中断的配置流程,涵盖了从GPIO配置、中断映射、PIE配置到中断服务函数编写的全过程。通过按键触发外部中断控制LED状态,是学习DSP中断系统的经典案例。特别需要注意的是中断标志的清除和按键消抖处理,这些是确保中断稳定可靠工作的关键。

http://www.dtcms.com/a/605740.html

相关文章:

  • 【LeetCode】109. 有序链表转换二叉搜索树
  • Verilog 利用伪随机,时序,按键消抖等,实现一个(打地鼠)游戏
  • 【音视频】均衡器(Equalizer)技术详解
  • win11安装mysql社区版数据库
  • 菏泽定制网站建设推广花艺企业网站建设规划
  • 哪些网站可以做推广婚庆公司网站源码
  • LVS负载均衡群集(一) -- NAT模式
  • 【ZeroRnge WebRTC】RFC 8445:ICE 协议规范(中文整理与译注)
  • librtp 实现详解:仓颉语言中的 RTP和RTCP 协议库开发实践
  • Android http网络请求的那些事儿
  • 两台 centos 7.9 部署 pbs version 18.1.4 集群
  • 【动手学深度学习】8.1. 序列模型
  • 【AI软件开发】从文献管理到知识编织:构建AI驱动的学术研究工作流
  • 网站上面图片上传尺寸建设部二级结构工程师注销网站
  • PostIn从初级到进阶(3) - 如何对接口快速设计并管理接口文档
  • 按键精灵安卓/ios脚本开发辅助工具:yolo转换教程
  • 人工智能驱动下的OCR API技术演进与实践应用
  • 昆明网站建设介绍湛江专业雷剧全集
  • 网站到期时间营销型网站服务公司
  • 常用设计模式:工厂方法模式
  • 视频矩阵哪个品牌好?2025 视频矩阵品牌标杆出炉
  • MongoDB 分片
  • 网站访客qq获取苏州建网站公司
  • Vue 3与 Vue 2响应式的区别
  • 自主建站平台怎样在百度建网站
  • 开源白板工具(SaaS),一体化白板,包含思维导图、流程图、自由画等
  • 九、InnoDB引擎-MVCC
  • Cesium 性能优化:从常识到深入实践
  • 购物网站的排版番禺品牌型网站建设
  • 想学习网站建设网络公司起名大全最新