1、6678的中断系统

1.1、系统事件

在谈SRIO的中断系统之前,先说一说6678DSP中断系统。 
C6678的CPU中断是由C66x CorePac Interrupt Controller配置的。该中断控制器(C66x CorePac Interrupt Controller),下文直接称66x中断控制器。 66x中断控制器允许将最多128个系统事件映射到12个CPU中断上(CPUINT4 - CPUINT15),或映射到CPU异常,或映射到高级仿真逻辑上。。 上面说的CPU异常和高级仿真逻辑都不是今天的重点,我们最重要的,要理解的概念是——系统事件,系统事件包括核上产生的事件以及片级事件(也就是 外设产生的中断事件)。 额外的系统事件被路由到每个C66x CorePac,以提供额外的芯片级事件,因为CPU中断/异常作为仿真事件被路由到中断控制器,所以额外的系统事件也可以走这条路 。此外,错误类事件或不常使用的事件也通过系统事件路由器路由,以减轻C66x CorePac中断选择器的负担。 这是通过芯片级中断控制器(CIC)块完成的,CIC使用的时钟是CPU主频的六分之一。 事件控制器由简单的组合逻辑组成,为每个C66x CorePac提供附加事件,加上EDMA3CC,CIC0和CIC1为每个C66x CorePac提供17个附加事件和8个广播事件,CIC2提供26个和24个附加事件给 EDMA3CC1和EDMA3CC2,CIC3分别为EDMA3CC0和HyperLink提供8个和32个附加事件。 芯片级别上有大量的事件。 芯片级CIC提供了一种灵活的方式来组合和重新映射这些事件。 多个事件可以通过芯片级CIC组合到单个事件中。 但是,组合事件的输出只有一个。 芯片级CIC还允许编程者通过内存写入来触发系统事件。 到C66x CorePacs的广播事件可用于多个核心之间的同步或处理器间的通信目的等。(这对咱们以后研究多核之间的通信有所帮助) 6678的中断系统可用下面Figure7-29来解释:

可以从图中看到,CIC0和CIC1为每个C66x CorePac提供17个附加事件和8个广播事件,其余结论也可以从图中看到,作为开发者,我们需要知道的是:“片级中断控制器CIC能够将片级事件映射(或组合映射)到任意CPU核心,这就为我们的SRIO中断映射提供了方法”

综上所述,我们得到的结论是: 
1、CPU中断只有12个,为CPUINT4 - CPUINT15。而CPU中断是由C66x CorePac Interrupt Controller配置的,也就是很多资料中写的cpIntc。 
2、片级中断控制器CIC能够将系统事件映射到CPU中断。


伴随着该结论的还有两个问题: 
1、SRIO中断和系统事件有什么关系呢?怎样将这两者联系映射起来呢? 
2、cpIntc怎样将系统事件和CPU中断映射起来呢?(下篇博客讲)

6678的中断映射路径大致图1-1所示: 图1-1

看完这张图,我们来解释一下上面的两个问题。

1.2、SRIO中断和系统事件有何关系?怎样将这两者联系映射起来?

SRIO中的中断配置方式非常多,我就不一一列举(其实是我只探索出来一种方式哈哈哈)。我所使用的中断方式是:FPGA以DIO的传输方式传输DOORBELL类型的SRIO 包。

DIO传输doorbell类型的包(使用LSU)的最重要的组成就是doorbell_info域,该域由16bit构成,每个bit代表一个标志位,例如我doorbell_info域写0x3,那我就会向DSP发出bit0和bit2所对应的系统事件。


但是!doorbell_info的每个bit对应的系统事件并不是固定的,而是可以根据你的配置指向不同的系统事件。

在了解具体什么寄存器影响着doorbell_info bit到系统事件的映射之前,我们先了解三种寄存器的名称和其作用。 1、Interrupt Condition Routing Register (ICRR):这种寄存器的作用就是配置doorbell_info bit映射向不同的系统事件(当然也可以相同)。 2、 Interrupt Condition Status Register (ICSR)::这种寄存器的作用就是可以在ICSR寄存器中读到能够触发中断的系统事件是什么。 3、Interrupt Condition Clear Register (ICCR):这种寄存器的作用就是清除系统事件,来确保我们每一次收到的中断不是前一个中断。

这样我们就发现可以通过配置ICRR寄存器,来将特定的doorbell_info映射到特定的系统事件。也可以通过ICSR来观察映射的结果。在每次接收到中断之后,可以在ISR(中断服务程序)中使用ICCR清除之前的中断,以确保收到最新的中断。

1.3、doorbell_info bit到系统事件的映射

我们在图1-1中猜测到:6678的doorbell_info bit与系统事件一一对应,现在看来并不是。 
具体映射配置应该由两部分构成: 
1、中断映射表 
选择中断映射表的寄存器是INTERRUPT_CTL,可以在文末的参考文件SRIO User Guide中找到,我这里就不贴该寄存器的具体内容了,只在这里说明一下,中断映射表有两个: 
当INTERRUPT_CTL寄存器的第0bit为1时,映射表如下:

图中的ICRx代表的就是doorbell_bit_info,如ICR5代表doorbell_bit_info为0101b;INTDST i为系统事件。 当INTERRUPT_CTL寄存器的第0bit为0时,映射表如下:

没有特殊要求的情况下,情况1能够满足我们的要求,所以将INTERRUPT_CTL的第0bit置1,CSL函数为:CSL_SRIO_SetDoorbellRoute(hSrio, 1);//使用INTDST0-15 2、doorbell_info bit到系统事件的映射 
既然选择了中断映射表1,我们就要通过ICRR将doorbell_info的bit与ICRx联系起来。官方文档给了下面的示例:

ICRR和ICRR2是一组寄存器,4bit映射doorbell_bit的一位。我再贴上ICRR和ICRR2的寄存器图更好理解。

注意Figure3-25和Figure3-26的标题都标错了,应该是ICRR而不是ICCR,这是官方文档的错误。 ICSR寄存器表示doorbell_info 的哪一位为1,就产生一个中断。ICSR寄存器图:

通过以上三幅图可以看到: 
FPGA向DSP发送doorbell中断产生系统事件的流程如下:

以上讲了寄存器级别的doorbell_info转系统事件,下面贴上具体代码:

CSL_SRIO_SetDoorbellRoute(hSrio, 1);//使用INTDST0-15 

for (i = 0; i < 16; i++)

{ CSL_SRIO_RouteDoorbellInterrupts(hSrio, 0, i, i);//将doorbit i映射到INTDST0-INTDST15 }

通过这个流程,我们可以产生系统事件,这为产生真正的中断奠定了基础,下一篇博客将说明如何配置系统事件和主机中断,使其建立映射关系。

DSP 6678的中断系统相关推荐

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

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

  2. TMS320F28335项目开发记录9_28335之中断系统

    TMS320F28335项目开发记录9_28335之中断系统 2014年11月08日 12:00:12 阅读数:3104 28335中断系统 1.中断系统 在这里我们要十分清楚DSP的中断系统.C28 ...

  3. DSP28335笔记 ———— 中断系统 之 外部中断

    DSP28335笔记 ---- 中断系统 之 外部中断 我用的开发板是"硬汉DSP28335开发板",文中对于硬件的描述可以说是没有,而且我还没有附上电路图希望在看的朋友不要喷我. ...

  4. Linux中断(interrupt)子系统之一:中断系统基本原理【转】

    转自:http://blog.csdn.net/droidphone/article/details/7445825 这个中断系列文章主要针对移动设备中的Linux进行讨论,文中的例子基本都是基于AR ...

  5. linux中断系统那些事之----中断处理过程【转】

    转自:http://blog.csdn.net/xiaojsj111/article/details/14129661 以外部中断irq为例来说明,当外部硬件产生中断时,linux的处理过程.首先先说 ...

  6. PowerPC中断系统简介(一)

    1. PowerPC中断系统简介 PowerPC处理器的中断系统由两部分组成,一是内核的中断及异常的处理:二是中断控制器.以P2020处理器为例,包括E500内核中断及异常处理系统和OpenPIC中断 ...

  7. 51单片机的中断系统

    文章目录 1 51单片机的中断系统 1.1 中断的固有优先级和抢占优先级 1 51单片机的中断系统 1.1 中断的固有优先级和抢占优先级 中断使能寄存器: 中断查询序列: interrupt 后面中断 ...

  8. 51单片机 | 中断系统概念及结构

    -------------------------------------------- 中断的过程: 对于单片机来讲,中断是指CPU在处理某一时间A时,发生了另一事件B请求CPU立刻去处理(中断发生 ...

  9. 8086中断系统——《x86汇编语言:从实模式到保护模式》读书笔记04

    80X86中断系统 能够处理256个中断 用中断向量号0-255区别 可屏蔽中断还需要借助专用中断控制器Intel 8259A实现优先权管理 1.中断的分类 中断可以分为内部中断和外部中断. (1)内 ...

  10. S3C2410中断系统

    S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的32位微控制器.该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,支 ...

最新文章

  1. redis 主从复制功能 原理
  2. 基本概念,BGP协议的特征和消息类型,状态转换?
  3. #pragma pack(1)的作用
  4. 巴巴腾机器人怎么开机_【巴巴腾智能机器人使用】_摘要频道_什么值得买
  5. android computescroll_Android Scroller与computeScroll方法的调用关系
  6. 各种软路由 - 自制路由器
  7. JVM调优:GC 参数
  8. 【记录】一些平时留意过的
  9. 数据结构,Java实现递归回溯,寻找出迷宫路线,解决迷宫问题
  10. ssm启动不报错_解决idea导入ssm项目启动tomcat报错404的问题
  11. 重磅:达摩院医疗AI团队CVPR'20论文解读 | 凌云时刻
  12. MATLAB Simulink 中的过零检测与代数环
  13. bash 脚本编程 教程
  14. 【开源教程2】疯壳·开源编队无人机-硬件资源简介
  15. React-组件公共逻辑抽离的两种方式
  16. 关于DFU 烧录更新image
  17. 硅烷PEG硅烷,Silane-PEG-Silane
  18. 为有梦青年插上助力的翅膀 魅族开发者大赛取得圆满成功
  19. 评分卡模型(二)基于评分卡模型的用户付费预测
  20. 互联网晚报 | 12月20日 星期一 | 安踏100亿成立“和敏基金会”;阿里公布碳中和目标;京东上线数字藏品交易平台...

热门文章

  1. CGLib动态代理详解
  2. windows虚拟串口服务器,USR-TCP232-T24系列串口服务器建立虚拟串口方法
  3. 运维人员须熟悉的38个运维工具汇总
  4. 字母数字下划线常用正则表达式
  5. Java List retainAll踩坑记录
  6. c语言对英文字母循环加密,RSA加密算法(C语言实现)
  7. unity期末大作业消消乐小游戏(附下载链接)
  8. ptpd 源码解析_IEEE 1588 ptp 代码实现
  9. 13-24.产品经理入门到精通(二)
  10. C语言简单程序编写(一)