中断控制器的目的

中断控制器提供了一种方法来选择必要事件并将它们对应到相应的 CPU 中断或异常输入。

特征

中断控制器将系统事件与 CPU 中断和异常输入相连接。中断控制器支持 128 个系统事件。它们包括内部生成事件和芯片级事件。除了这 128 个事件外,中断控制器寄存器也接收非屏蔽和复位事件并将它们直接对应到 CPU 。

中断控制器输出信号到 C64x+ CPU 的事件输入有:

• 1 个可屏蔽的硬件异常 (EXCEP)

• 12 个可屏蔽的硬件中断 (INT4 到 INT15)

• 1 个不可屏蔽的可用作中断或异常的信号 (NMI)

• 1 个复位信号 (RESET)

中断控制器包括下面的模块以便将事件对应到中断和异常:

• 中断选择器——将任何系统事件对应到 12 个可屏蔽的中断

• 事件组合器——减少大量的系统事件到 4 个

• 异常组合器——让任何系统事件组合到一起作为硬件异常输入

图 1   C64+ 中断控制器框图

表 1  中断控制器寄存器

事件寄存器

中断控制器包括一组寄存器来管理控制器接收的系统事件的状态。这些寄存器分组如下:

• 事件标记寄存器 (EVTFLAGx)

• 清除标记寄存器 (EVTCLRx)

• 设置标记寄存器 (EVTSETx)

这些事件标记寄存器获取所有中断控制器接收到的系统事件。共 4 个 32 位的寄存器覆盖 124 个系统事件输入。每一个系统事件映射到一个事件标记寄存器中专门的标记位 (EFxx) 。

EVTFLAGx 寄存器是只读的,必须通过只写的事件清除寄存器 EVTCLR[3:0] 来清除。

事件组合器

事件组合器允许多个系统事件组合成一个事件。组合事件对应到终端选择器。这允许 CPU 来响应所有有效的系统事件,虽然 CPU 只有 12 个可用的中断。

图 2  事件组合器

事件组合器将 124 个系统事件分为 4 组。第 1 组包括从事件 4 到 31 ,第 2 组包括事件 32 到 63 ,第 3 组包括事件 64 到 95 ,第 4 组包括事件 96 到 127 。可以组合每组中的事件成为一个新的事件。这些新的事件为 EVT0 、 EVT1 、 EVT2 、和 EVT3 。这些事件对应到中断选择器,加上原始的 124 个系统事件共 128 个事件。

当响应一个组合中断时:

1. 读组合事件 EVTx 对应的 MEVTFLAGx 寄存器

2. 检查首先等待的事件

3. 写 MEVTFLAGx 寄存器的值到 EVTCLRx 寄存器

4. 响应第 2 步中的事件

5. 重复步骤 1 至 4 知道 MEVTFLAGx 寄存器为 0

以上处理只是用来评估和清除在 EVTx 上组合的事件,任何在 EVTMASKx 寄存器中倍屏蔽的事件不需要清除,即使它们在 EVTFLAGx 寄存器中被设置 ( 这将允许使用它们来产生异常 ) 。

CPU 在中断服务程序返回前应循环步骤 1 到 4 直到没有等待事件。这样确保在中断服务程序执行过程中所有接收到的事件都会被捕获 ( 同时需要记住的是事件 EVTx 在 EVTCLRy [x] 标记被清除的同时被接收到,则它没将不被清除 ) 。

中断选择器

CPU 有 12 个可屏蔽的中断可用。中断选择器允许 128 个系统事件对应到 12 个 CPU 中断输入中的任何一个。

图 3  中断选择器框图

图 4  CPU 中断对应表

中断选择器包含中断复用寄存器, INTMUX[3:1] 允许对 12 个可用的 CPU 中断的源进行编程。每一个呈现在中断选择器面前的事件都有一个事件号,并用于编程这些中断复用寄存器。

中断错误事件

C64x+ CPU 通过中断控制器可以生成一个系统事件 (EVT96) ,当 CPU 检测到某一中断被丢弃。当 CPU 中断被接收到的同时相关的 CPU 中断标记位已被设置时这个事件被生成。此错误事件可指示程序员在代码中可能出现的问题,比如是否被禁用中断的时间延长为一期或是否与非中断代码段太长。

因为中断丢弃检测逻辑是在 CPU 中的,仅单个的系统事件作为源的中断才能被检测。组合事件构成的中断的丢弃只能指示有一个或多个在组中的中断产生了错误。

当 CPU 检测到丢弃错误条件,它将传递消息给中断控制器的用于记录丢弃中断号并触发系统事件的中断异常状态寄存器 (INTXSTAT) 。

图 5  中断异常事件框图

一个 INTXERR 只能拥有一个丢弃的 CPU ID ,仅第一个丢弃的中断检测通过 INTERR (EVT96) 被报告。中断异常状态通过异常清除寄存器 (INTXCLR) 被清除。一个新的 IDROPx 事件可以被检测仅当状态通过硬件清除后。

当响应丢弃中断错误事件时:

1. 读取 INTXSTAT 寄存器 .

2. 检查错误条件 .

3. 通过 INTXCLR 寄存器清除错误

为了防止一个或多个来自生成丢弃中断错误的 CPU 中断,可以通过对丢弃中断屏蔽寄存器 (INTDMASK) 编程来忽略它们。

异常组合器

C64x+ CPU 有一个单独的作为系统级的、可屏蔽的和针对异常的事件输入。这个输入由 EXCEP 表示。异常组合器允许复用系统事件来组合成为一个异常事件。这将使 CPU 能够响应所有可能的系统事件,即使当 CPU 仅有一个异常输入可用。

图 6  系统异常对应图

为了允许系统事件中的一部分能够产生异常给 CPU ,异常组合器提供了一组 4 个屏蔽寄存器 EXPMASK[3:0] ,可以被用来禁止那些不期望的事件。因为对于 CPU 只有一个异常输入,所有的屏蔽寄存器协同工作将多达 128 个事件组合成一个作为 EXCEP 输入。这将允许 CPU 响应所有可能的系统异常。

CPU 应该运行一个异常服务程序来检查异常产生的原因并响应相应的事件当相应异常时,服务程序首先应检查异常是否是产生于内部通过非屏蔽的异常或是 EXCEP 信号。

如果 EXCEP 被确定为产生异常的原因,则服务程序应读取屏蔽异常标记寄存器 (MEXPFLAG [3:0]) 来确定哪一个未屏蔽的事件触发了异常。

当响应一个组合中断时:

1. 读取 MEXPFLAG [3:0] 寄存器

2. 检查等待的事件

3. 将 MEXPFLAG [3:0] 值写到 EVTCLR [3:0] 寄存器

在 EVTCLRx 寄存器中使用 MEXPFLAGx 值仅仅清除组合产生 EXCEP 的事件。任何在 EXPMASKx 中被屏蔽的事件不需要清除,即使在 EVTFLAGx 寄存器中设置,这允许使用它们来生成一个组合中断事件。

4. CPU 应重复步骤 1 至 3 直到在返回异常服务程序之前没有等待事件被发现。这样确保了在异常服务程序中任何接收的事件都能被捕获到。

表 2  系统事件映射

图 7  CPU事件对应图

必须使能中断以使 CPU 能够识别。 CPU 要求另外单独的使能通过中断使能寄存器 (IER) 和通过全局在中断任务寄存器中的中断使能域 (ITSR.GIE) 。

同时也需要注意的是异常信号 (EXCEP) 被记录在 CPU 的异常标志寄存器中 (EFR) 。在异常标志寄存器 (EFR) 可以被识别前必须使能异常。在器件复位后异常识别被禁止。可以通过设置在 ITSR 寄存器 (ITSR) 中的全局异常使能域 (GEE) 来开启异常。应该在使能任何中断前使能异常以确保当 NMI 的模式 ( 异常或中断 ) 改变时不会收到 NMI 。

当 CPU 中的系统异常没有被使能,非屏蔽中断 (NMI) 作为一个中断,当其被接收到时将发标记给在 IFR 寄存器中的 BIT1 域。当 CPU 中的系统异常使能,然而,这个标记将不被设置。相反,异常源在异常标记寄存器 (EFR) 中被鉴定以来表示是否源是一个 NMI 、 EXCEP 、一个内部异常或是一个软件异常 (SWE/SWENR) 。

一个 NMI 处理共享 NMI 中断向量,无论它作为一个中断或是异常。当 SWENR 生成一个异常而不是 SWE 指令时 CPU 仅使用 REP 寄存器作为一个向量相对于 NMI 向量。

当 CPU 响应单个事件的中断情况下,不需要读取或清除中断控制器中的事件标记寄存器 (EVTFLAGx) 。

然而,当响应组合系统事件时在一个中断服务程序或一个异常服务程序中必须使用事件标记。这些标记用来确定事件启动了中断或异常。换句话说, CPU 的中断标记寄存器 ( 或异常标记寄存器 ) 告诉 CPU 一个组合事件发生,然后服务程序必须使用事件标记寄存器来确定确切的事件来源。

同样需要注意的是在服务程序中,相应的事件标记寄存器位必须通过软件被清除以能够接收到后来的中断。如果事件标记没有被清除,那么一个新的系统事件将不被识别。新的系统事件甚至不能被识别为已了丢弃的中断。这是因为 CPU 丢弃中断逻辑安排 CPU 中断的输入而不是中断控制器的输入。因为事件在中断控制器中被组合,对于 CPU 是不可见的。

在许多系统中,采用服务程序读取,然后清除整个事件标记寄存器 (EVTFLAGx) 。当这个能够在一些系统中工作正常时,必须注意其中的一些事件标记不能被任何系统代码查询。如果一个典型的事件需要被查询,然后任意地清除所有的事件标记位可能会导致意想不到的结果。

详情请参考《TMS320C64x+ DSP Megamodule Reference Guide》

请勿转载!kevincole 2011-06-09 14:52:56

C64x+中断控制器相关推荐

  1. 初识片选信号和中断控制器

    片选信号 片选存储芯片的片选 小总结: cpu 发出的片选信号,寻找相应的存出控制器,进行数据的存取 存储控制器和外设相连,按照所需要的协议接口进行调用,驱动外设. 1.确定外设和cpu相连的管脚 2 ...

  2. 嵌入式linux 添加中断,《嵌入式linux应用程序开发完全手册》中断控制器操作(外部中断)学习笔记...

    <嵌入式linux应用程序开发完全手册>中断控制器操作(外部中断)学习笔记 一.ARM中断体系 当一个"异常"发生时,或者说当收到一个中断触发信号时,ARM9将会自动完 ...

  3. STM32震动感应控制继电器(使用循环VS使用外部中断EXTI和中断控制器NVIC)

    参考:stm32的外部中断 震动感应 控制 继电器 作者:点灯小哥 发布时间: 2021-03-05 22:37:01 网址:https://blog.csdn.net/weixin_46016743 ...

  4. ARM中断分析之一:中断控制器和CPU、外设的关系

    "中断控制器"也是CPU众多外设中的一个,不同的是,它一方面接收其它外设中断引脚的输入,另一方面,它会发出中断信号给CPU.下图是一张中断控制器外设的框图,s3c2410的框图. ...

  5. 扩展中断控制器8259实验_「正点原子FPGA连载」第十三章双核AMP实验

    1)摘自[正点原子]领航者 ZYNQ 之嵌入式开发指南 2)实验平台:正点原子领航者ZYNQ开发板 3)平台购买地址:https://item.taobao.com/item.htm?&id= ...

  6. 中断触发流程三(中断控制器)

    这一篇主要说说中断控制器,及GPIO中断触发与中断号的识别,为什么GPIO引脚的触发最后调用特定的中断例程,这中间是怎么联系起来的.现在知道的是request_irq只是在特定的中断号 链表中注册了一 ...

  7. 扩展中断控制器8259实验_PCIe的中断机制

    出于向下兼容的需要,PCIe完全继承了PCI的所有的中断特性(包括INTx,MSI/MSIx).但是与PCI不同的是,PCIe使用串行总线尽量减少pin的使用,所以对于INTX类型的中断,它没有使用s ...

  8. GIC通用中断控制器

    1. GIC简介 操作系统中,中断是很重要的组成部分.有了中断系统才可以不用一直轮询(polling)是否有事件发生,系统效率才得以提高.一般在系统中,中断控制分为三个部分:模块.中断控制器和处理器. ...

  9. Linux中断子系统(一)中断控制器GIC架构

    Linux中断子系统(一)中断控制器GIC架构 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux中断子系统(一)中 ...

  10. Linux中断子系统(二)中断控制器GIC驱动分析

    Linux中断子系统(二)中断控制器GIC驱动分析 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux中断子系统(一 ...

最新文章

  1. GMQ稳定币可降低交易成本,构建智能化支付生态体系
  2. TP5 MYSQL按照原来的IN顺序查询
  3. java.sql.sqlexception: 无效的名称模式:_PSQLException:错误:关系&ldquo; TABLE_NAME&rdquo;不存在...
  4. Tesseract OCR——Windows 10 + CMake-GUI + Visual Studio 2019下编译和使用解决方案
  5. GBDT和RF的区别
  6. MVC和WebForm区别
  7. 限制在同一台电脑上只允许有一个用户登录系统
  8. Android NDK--自己编写调用JNI
  9. KVM虚拟化常见问题
  10. SAP License:美资企业、台资企业和国企的区别
  11. 西门子s7 计算机通讯,PLC与计算机通讯连接
  12. 高性能mysql读书笔记三性能查询优化
  13. 嵌入式系统开发笔记88:认识51微控制器系统架构
  14. 保利威视云直播的python API
  15. java中isolate时间_Dart异步编程:Isolate和事件循环
  16. [附源码]java+ssm计算机毕业设计磐基建筑机械租赁有限公司机械租赁系统41c32(源码+程序+数据库+部署)
  17. 微信开发者工具预览二维码无法显示
  18. linux win10双系统启动顺序,Windows 10 和 Ubuntu 20.04 双系统 GRUB2 默认启动项的更改...
  19. 读取本地相册 兼容了小米
  20. 详解在Linux系统中安装JDK

热门文章

  1. Java-前后端分离-单点登录(SSO二级跨域和跨一级域名)
  2. JAVA就业管理系统(JAVA毕业设计)
  3. 如何修复损坏的PDF文件 - PDF修复工具教程
  4. 一周小结(2019/12/23)
  5. Arduino 和 TB6612FNG 驱动直流电机
  6. 网页页面缩小放大的快捷键
  7. 海思Hi3519A开发(5.梳理海思文档与运行sample代码)
  8. 如何实现数据大屏在各种场景下的时间展示?
  9. Ignite问题汇总
  10. 来自ThoughtWorks肖然的推荐