首先定义3个术语:

  • 系统事件(System Event):CPU内部或外部产生的信号,用来通知CPU有些事情已经发生了和/或 需要响应。
  • 中断(Interrupts):由于内部或外部硬件信号(EVENT)的出现,用来提供重定向正常程序流的方法。
  • 异常(Exceptions):也会重定向程序流,但它们通常只对应系统内的一个错误状态。

C64x+CPU提供了2种类型的异步信号服务:中断和异常。中断提供了重定向正常程序流的方法,异常也会重定向程序流,但它们通常与系统的错误状态相关联。
C64x+CPU可以接受12个可屏蔽/可配置的中断,1个可屏蔽的异常和1个不可屏蔽的中断/异常。CPU也可以响应各种内部异常情况(TMS320C64x / C64x + DSP CPU和指令集参考指南(SPRU732)中记录了这些异常)。megamodule包含一个中断控制器,该控制器最多可将124个系统事件路由到CPU中断/异常输入。 这124个事件可以直接连接到可屏蔽中断,也可以组合成中断或异常。 这些不同的路由选择为事件处理提供了极大的灵活性。当向CPU发出中断信号并且已经有该中断的挂起位时,将产生一个错误事件。 除路由事件外,中断控制器还会检测CPU何时错过中断。 您可以使用此错误事件在CPU错过实时事件时通知CPU。 INTC硬件将错过的中断号保存在寄存器中,以便可以采取纠正措施。

1 结构框图和特性


上图为C64x+Megamodule模块的功能框图。共有128个系统事件(system event)作为中断控制器的输入,既包括内部生成的事件(在megamodule内部)也包括芯片级事件(chip-level)。除了这128个事件,INTC寄存器还接收非屏蔽(NMEVENT)和复位事件(RESET),并且直接路由到CPU。中断控制器输出给CPU的信号为以下四种:

中断控制器输出信号类型 说明
EXCEP 1个可屏蔽的硬件异常
INT4~INT15 12个可屏蔽的硬件中断
NMI 1个不可屏蔽的信号(non-maskable),用户可以用作中断或异常
RESET 一个复位信号

注:更多的中断和异常信号可以参考文档: TMS320C64x/C64x+ DSP CPU and Instruction Set Reference Guide (SPRU732)
中断控制器通过下列模块来解决事件到终端和异常的路由问题。

模块名 说明
Interrupt Selector 将任意系统事件路由到12个可屏蔽中断
Event Combiner 将大量的系统事件组合为4个,减少事件数量
Exception Combiner 将系统事件归结为1个硬件异常输入

2 中断控制器架构

C64x+中断控制器用来提供灵活的系统事件管理。这是通过寄存器来实现的,如下表。

Register Description Type
EVTFLAG [3:0] Event Flag Registers Status
EVTCLR [3:0] Event Clear Registers Command
EVTSET [3:0] Event Set Registers Command
EVTMASK [3:0] Event Mask Registers Control
MEVTFLAG [3:0] Masked Event Flag Registers Status
EXPMASK [3:0] Exception Mask Registers Control
MEXPFLAG [3:0] Masked Exception Flag Registers Status
INTMUX [3:1] Interrupt Mux Registers Control
AEGMUX [1:0] Advanced Event Generator Mux Registers Control
INTXSTAT Interrupt Exception Status Register Status
INTXCLR Interrupt Exception Clear Register Command
INTDMASK Dropped Interrupt Mask Register Control

2.1 Event Registers

中断控制器通过以下3个寄存器组来管理系统事件状态。

  • Event flag registers (EVTFLAGx)
  • Clear flag registers (EVTCLRx)
  • Set flag registers (EVTSETx)
    Event flag registers捕捉中断控制器收到的所有系统事件。有4个32位的寄存器来负责这124个系统事件,每个系统事件映射到Event flag registers中的一个标志位(flag bit EFXX)。剩下的4个位EVTFLAG0 (EF03:EF00) 与系统事件无关,这4个位为保留位,且总为0。相反,事件00~03对应的系统事件是中断控制器内部通过Event Combiner生成的,并路由到Interrupt Selector(见图7-1)。

Event flags(EFxx)是锁存寄存器位,收到事件后就会变为1。EVTFLAGx寄存器是只读的,且必须通过 Event Clear registers EVTCLR[3:0]清0。
Event Clear registers是只写的,通过往对应的为写1就能清0。

Event Set registers是只写的,通过往对应的为写1就能置1。使用Event Set registers可以手动设置Event flag registers中的任何位。这在测试中断服务程序时,使用Event Set registers生成中断会有所帮助。

中断控制器使用Event Clear registers和Event Set registers组,而不是直接写入Event flag registers,这样可以防止潜在的竞争情况(potential race conditions)。 如果没有这些额外的寄存器,CPU在对这些标志位进行读-修改-写的操作过程过程中,可能会意外清零事件标志设置。
如果在同一周期期间接收到新事件,该事件位会被EVTCLRx寄存器清0,该事件输入会优先作为丢失事件。

2.2 Event Combiner


事件组合器(event combiner)允许多个系统事件组合成一个单个事件。组合事件路由到中断选择器(interrupt selector)。这种设计使得CPU即使只有12个能用的中断也能服务所有的系统事件。
事件组合器的基本概念是对system event flags的子集执行“或(OR)”运算。 OR操作的结果变成了新的“组合”事件。
事件组合器将124个系统事件分为四个组。 第一组包括事件4到31,第二组包括事件32到63,第三组包括事件64到95,第四组包括事件96到127。您可以组合每个组中的事件作为新的“组合” ”事件。 这些新事件称为EVT0,EVT1,EVT2和EVT3。 这些事件与原始的124个系统事件一起路由到中断选择器,总共有128个事件。
每个组都有1个事件屏蔽寄存器(event mask register),其通用结构如下。

事件屏蔽寄存器(event mask register)中的事件屏蔽位用于使能/屏蔽应组合的系统事件。 默认情况下,该寄存器为零,因此所有系统事件都是未屏蔽的,组合形成对应的EVTx。 要屏蔽事件源,必须将相应的屏蔽位设置为1。请注意,事件0到3的事件屏蔽位是保留的,并且始终被屏蔽。
例如:

Assume an application requires the events 124-127 to be conbined.
In order to accomplish this, EVTMASK3 will need to be programmed as follows:
EVTMASK3 = 00001111111111111111111111111111

事件组合器还提供了事件标志寄存器( event flag registers)的屏蔽视图,如下。

屏蔽后事件标志寄存器( masked event flag)的事件,其实就是事件标志寄存器( event flag registers)的内容经过屏蔽后的事件。 通过读取屏蔽后事件标志寄存器( masked event flag),CPU仅看到组合事件的事件标志(EVT [3:0]),这在处理组合事件的中断程序中很有用。
例子:

Assuming the following configuration:
EVTFLAG3 = 01101010010011001110001110010101
EVTMASK3 = 00001111111111111111111111111111
The Masked Event Flag register 3 will be:
MEVTFLAG3 = 01100000000000000000000000000000

当处理一个组合事件时,你必须:
1.读取与组合事件EVTx对应的MEVTFLAGx寄存器;
2.检查第一个挂起(即flagged)事件;
3.将此MEVTFLAGx值写入EVTCLRx寄存器;
4.处理步骤2中指示的事件(如,进入对应的中断服务程序);
5.重复步骤1至 4直到MEVTFLAGx寄存器= 0;
此过程仅评估和清除在EVTx上组合的那些事件。 此外,即使在EVTFLAGx寄存器中置位了,在EVTMASKx寄存器中屏蔽的任何事件都不会清0(也无需清0)(这使您可以使用它们生成异常)。
注意:CPU应该迭代步骤1到4,直到在中断服务程序内返回之前没有找到挂起位为止。 这样可以确保在中断服务程序执行中接收到的所有事件都被捕获到(还要记住,如果在EVTCLRy [x]寄存器中清除了事件EVTx的标志的同时接收到了事件EVTx,则不会将其清除)。

2.3 Interrupt Selector

2.3.1 中断选择器操作


CPU有12个可屏蔽中断(CPUINT4~CPUINT15),中断选择器运行128个系统事件的任意一个路由到12个的CPU中断输入。这128个事件要么是事件要么是组合事件。
除了中断选择器之外,事件组合器还允许使用灵活的中断路由方案。 INTC模块的这种灵活性允许在mega模块中处理大量系统中断。 它还允许在CPU内同时处理大量中断,从而提高了中断效率。

中断选择器包含中断多路复用寄存器INTMUX [3:1](如下图),可通过事件号对12个可用CPU中断中的中断源进行编程。 CPU中断的顺序(CPUINT4至CPUINT15)确定中断的优先级。 由于任何中断服务程序都可以是原子的(不可嵌套),因此CPU中断优先级仅适用于挂起的中断。

2.3.2 Interrupt Error Event(中断错误事件)

每当CPU检测到中断已被丢弃时,C64x + CPU连同中断控制器都可以生成系统事件(EVT96)。 当接收到CPU中断且相关的CPU的中断标志位置1时,将生成此事件。 此错误事件可能表明程序员可能在代码中遇到问题,例如是否长时间禁用了中断或不可中断代码段是否太长。
由于中断丢弃检测逻辑在CPU内部,因此只能检测到来自单个系统事件的中断。 基于组合事件的中断丢弃仅表明该组中的一个或多个中断引起了错误。
当CPU检测到丢失错误情况时,它将信息传递回中断控制器的中断异常状态寄存器(INTXSTAT),该寄存器记录丢失的中断号并声明系统事件。 该寄存器描述如图7-38。

由回到系统事件EVT96,由于INTXERR只能保存一个droped CPU ID,因此INTERR(EVT96)仅报告检测到的第一个丢弃的中断。 中断异常状态通过异常清除寄存器(INTXCLR)清除(见图7-39),该寄存器仅由一个清除位组成。 将1写入INTXCLR寄存器的CLEAR字段会将INTXSTAT寄存器(见图7-38)复位为0。只有在硬件清除状态后,才能检测到新的IDROPx事件。
为丢弃中断错误事件提供服务时,服务程序应:
1.读取INTXSTAT寄存器。
2.检查错误情况。
3.通过INTXCLR寄存器清除错误。
为防止一个或多个CPU中断产生丢失的中断错误,可通过对丢弃中断屏蔽寄存器(INTDMASK)进行编程来忽略它们。

2.4 Exception Combiner(异常组合器)

C64x + CPU可以单事件输入,用于系统级可屏蔽的异常。 此输入由EXCEP表示。 异常组合器允许将多个系统事件组合到图7-12中的单个异常事件中。 即使只有一个CPU异常输入可用,这也允许CPU处理所有可用的系统事件
异常组合器允许系统设计人员选择 system event flags的子集执行“或(OR)”运算以确定EXCEP值。

注意:复位和NMI也显示在此图中。 实际上,当在C64x + CPU中使能了异常时,NMI信号将用作不可屏蔽的异常输入。 这两个信号与其他各种CPU异常一起在CPU内组合在一起。
为了仅允许系统事件的一个子集生成CPU异常,异常组合器提供了一组四个屏蔽寄存器EXPMASK [3:0],用于禁用不需要的事件。 由于只有一个异常输入到CPU,因此所有屏蔽寄存器可以协同工作将多达128个事件组合为一个EXCEP输出。 这使CPU可以处理所有可用的系统异常。
EXPMASKx寄存器的默认值为全1。 这意味着所有事件都被屏蔽; 因此,除非对该寄存器进行编程,否则任何系统事件都不会产生异常。
与事件组合器类似,异常组合器提供一组屏蔽后异常标志寄存器(MEXPFLAGx)。通过读取屏蔽后异常标志寄存器,CPU可以看到与CPU的EXCEP输入有关的事件标志。

CPU应该运行异常服务程序以确定异常原因,并在收到异常后响应事件。 在提供异常服务时,服务程序必须首先确定该异常是通过不可屏蔽异常还是由EXCEP信号在CPU内部生成的。
如果EXCEP是导致异常的原因,则程序应读取屏蔽的异常标志寄存器(MEXPFLAG [3:0]),以确定哪些未屏蔽的事件触发了异常。
服务组合异常时,必须:
1.读取MEXPFLAG [3:0]寄存器。
2.检查挂起事件。
3.将MEXPFLAG [3:0]的值写入EVTCLR [3:0]寄存器。

  • CPU从第1步到第3步进行迭代,直到从异常服务例程返回之前没有找到挂起事件为止。 这样可以确保捕获异常服务例程中接收到的所有事件。
    将MEXPFLAGx值与EVTCLRx寄存器一起使用,只会清除那些合并生成EXCEP的事件。 即使在EVTFLAGx寄存器中进行了设置,也无需清除EXPMASKx中被掩蔽的任何事件。 这使它们可用于生成组合的中断事件。
    注意:如果要求CPU响应任何新的异常,则步骤4至关重要。 有两个事实表明为什么会这样:
  • 当任何未屏蔽的事件标志输入均处于活动状态时,异常组合器的输出即处于活动状态。
  • CPU认为异常请求是从0到1的变化。
    因此,必须清除所有未屏蔽的事件标志,然后CPU才能识别EXCEP上新的从0到1的变化。

3 C64x+ Megamodule Events

C64x + megamodule的各个组件都会生成许多事件。 这些事件被路由到中断控制器,以便在断言时可以由CPU处理。显示为可用事件(4至8、10和15至95)的事件为芯片级事件。 每个C64x +设备都可以根据需要使用这些事件输入。 有关如何使用这些可用事件的更多信息,请参见特定设备的数据手册。

4 Interrupt Controller - CPU Interaction

4.1 CPU-中断控制器接口


由异常组合器和中断选择器产生的中断控制器的输出提供给C64x + CPU。十二个中断信号反映在CPU的中断标志寄存器(IFR)中,如图7-14所示。
必须使能中断才能让CPU识别它们。CPU需要中断允许寄存器(IER)和中断任务寄存器(ITSR.GIE)中的全局中断允许字段进行使能。
另请注意,异常信号(EXCEP)记录在图7-15中的CPU异常标志寄存器(EFR)中。 您必须先使能异常,然后才能识别所示的异常标志寄存器(EFR)。 重置设备后将禁用异常识别,以简化系统设计并实现向后兼容性。 您可以通过在ITSR寄存器(ITSR)中设置全局异常使能字段(GEE)来打开异常。 在使能任何中断之前,应先使能异常,以确保在更改其模式(异常与中断)时不会收到NMI。
当CPU中未使能系统异常时,不可屏蔽中断(NMI)充当中断,并且在接收到该中断时会将标志发布到IFR寄存器的BIT1字段中。 在CPU中使能系统异常时; 该标志不会设置。 而是在异常标志寄存器(EFR)中标识异常源,以表示该源是NMI,EXCEP,内部异常还是软件异常(SWE / SWENR)。
所有NMI处理都共享NMI中断向量,无论您是将其用作中断还是异常。 在SWENR生成异常而不是SWE指令的情况下,CPU仅将其REP寄存器用作向量,而不是NMI向量。 更多信息参见文档:TMS320C64x/C64x+ DSP CPU and Instruction Set Reference Guide (SPRU732) .

4.2 CPU中断事件服务

对于CPU服务的单事件中断(直接在中断选择器中指定系统事件)的情况,无需读取或清除中断控制器中的事件标志(EVTFLAGx)寄存器。
但是,在服务组合的系统事件时,必须在中断服务程序或异常服务程序中使用事件标志。 这些标志用于确定引发中断或异常的事件。 换句话说,CPU的中断标志寄存器(或异常标志寄存器)告诉CPU发生了组合的事件,然后服务例程必须使用事件标志寄存器来确定确切的原因。
同样重要的是要注意,在服务程序中,必须由软件清除相应的事件标志寄存器位,以便接收后续事件。 如果事件标志未清除,则不会识别新的系统事件。 新的系统事件甚至无法被识别为丢弃的中断。 这是因为CPU的丢弃中断逻辑适用于CPU中断输入(而不是中断控制器事件输入)。 由于事件是在中断控制器中组合的,因此CPU在这里没有可见性。
在许多系统中,可能很想读取服务程序,然后清除整个事件标志寄存器(EVTFLAGx)。 虽然这在某些系统上可以正常工作,但您必须注意,某些事件标志不会被任何系统代码轮询。 如果必须轮询特定事件(系统中的某些代码偶尔读取该事件,而不是让该事件中断CPU),则不加选择地清除所有事件标志位可能会导致意外结果。
欢迎关注我的公众号:槑槑的技术栈。前面两个字念meimei,二声,哈哈。

DSP TMS320C6455 中断解析相关推荐

  1. SylixOS DSP upgrade命令解析

    SylixOS DSP upgrade命令解析 --SylixOS DSP6678平台下升级BSP 一.适用范围 本升级方案,针对TI官方评估板(TMDSEVM6678LE),主要介绍如何将Sylix ...

  2. Linux中断解析(全文)

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow http://ww ...

  3. S3C2440中断解析和基于WINCE操作系统的中断分析(整理于网络,用于按键中断使用)

    在调试CAN总线的时候,遇到了操作系统的中断,为了彻底的弄清楚中断是怎么回事?我先从底层的中断开始研究,在这里我们只讨论外部中断,下面就结合S3C2440TEST测试程序来分析一下中断是怎么执行的:我 ...

  4. zynq7000 中断原理分析及IO中断解析

    Zynq 7000 中断分析 文章目录 Zynq 7000 中断分析 GIC及中断机理 Crotex-A9常用汇编指令 Zynq中断控制 GPIO 中断控制 单IP双通道 单IP多位 双IP中断源 G ...

  5. STM32外部中断解析

    文章目录 前言 一.外部中断是什么 二.STM32F103的外部中断 三.外部中断的中断号 四.HAL库的外部中断初始化流程 总结 前言 本篇文章将带大家了解STM32F103的外部中断. 一.外部中 ...

  6. TI C28x DSP的中断嵌套

    介绍 一个常见的问题是 C28x 中断是否可以嵌套.本文解释了如何通过对中断服务例程 (ISR) 代码进行简单更改来实现中断嵌套. 本文假设读者已经熟悉以下内容: C28x PIE 模块:控制寄存器. ...

  7. 【DSP开发】C6000非多核非KeyStone系列DSP中断系统

    C6000系列DSP的中断系统 上一篇介绍了C6455的GPIO系统,最后把GPIO4配置成了中断/事件模式,本文将介绍C6455的中断系统,介绍完基本概念后,给出把GPIO4映射到INT4的代码. ...

  8. DSP中断介绍及其应用

    本章节的学习来自于TMS320F28377D参考手册和研旭例程. 学习DSP的中断,使用定时器产生中断. 目录 什么是中断: TMS320F2837xD的中断架构: 外设阶段: PIE阶段: CPU阶 ...

  9. S5PV210体系结构与接口07:中断系统编程

    目录 1. 什么是按键 1.1 按键原理与连接 1.2 按键的2种响应方式 1.2.1 轮询方式 1.2.2 中断方式 1.3 轮询方式处理按键解析 1.4 按键消抖 1.4.1 按键抖动 1.4.2 ...

  10. 经典好书:DSP嵌入式常用模块与综合系统设计实例精讲

    书名:DSP嵌入式常用模块与综合系统设计实例精讲 作者:刘向宇 副书名:DSP嵌入式常用模块与综合系统设计实例精讲 出版日期:2009-07-01 出版社:电子工业出版社 页数:406 ISBN:97 ...

最新文章

  1. 算法工程师当前选哪个方向好?
  2. MySQL内部开发人员如何看待MySQL组复制?
  3. UWP 负载包含两个或多个具有相同目标的路径 'xxx'
  4. java pop邮件 源码_[源码和文档分享]基于JavaMail的邮件收发系统
  5. python使用需要钱吗-为什么要花钱学 Python,自学不好吗?
  6. 从零开始的AI·决策树原来这么好理解(附实例代码)
  7. linux服务与进程管理sup,linux下进程管理工具-supervisord
  8. php cksql,金蝶KSQL规范
  9. 【乌拉喵.教程】TestBench仿真给输出脚赋值引起的问题
  10. 【Spring学习03】Spring简单入门实例
  11. 没有mysql sock_找不到mysql.sock,mysql.sock丢失问题解决方法
  12. 初级第五旬07— 初级课程第五旬试题
  13. js练习之--数组方法,数组实现文字内容高亮、替换!
  14. 【UE4 C++】角色拾取、替换武器(上)
  15. 电脑开不了机的原因和解决办法
  16. JS数据交互:动态从数据库中获取数据填充Select
  17. Matlab中读取excel表格数据
  18. C语言程序设计精髓 第2周——数字间的那些事儿,做点计算哈 练兵区——编程题
  19. 微信多开软件苹果版_微信PC版、无限多开、消息防撤回补丁
  20. 电脑中毒了老是自动安装软件怎么办

热门文章

  1. 模拟人生3显示服务器,模拟人生3服务器初始化失败
  2. 【5G】NAS安全密钥衍生算法详解
  3. 迭代局部搜索算法(Iterated local search)
  4. 【技术贴】关于IE主页被篡改、假IE的根治方法。。。
  5. Hive详解之内表、外表和分区
  6. 狂神说java-Mybatis
  7. 手机拍照就能实现的免费文档扫描,告别打印店扫描和付费软件
  8. 学妹跑过来问我为啥Xshell 打不开了,让我帮她处理下【手把手讲解】
  9. 前端答题小游戏_前端知识小游戏
  10. 摄影欣赏:30幅五光十色的精美秋天风景摄影作品