分两层,一层是每个core内部的中断控制器,这个叫interrupt controller,简写intc;一层是整个芯片的,属于芯片级的,在每个core的外面,这个叫chip-level
interrupt controller,缩写CIC。

分两层其实两层功能也不同,这个不用细说,intc可以直接处理一些中断,这些是每个核都同样的,但是还有一些中断,如果有需要不能让所有的核都能看到,则这个时候就需要在所有的核外进行统一管理了,这个就是CIC。在C6678上,CIC可以进行中断映射,这个功能就可以将一些中断映射至希望接管的core上,而让其他核感知不到这个中断。对于C6678的CIC可以管控的中断一共最多可以有1024个,管控方式是可以将每个中断通过配置,映射至256个channel中的某一个,一个channel上可以同时映射多个中断,映射至同一个channel的中断,相互之间就是逻辑“或”的关系了,即如果其中任何一个中断产生,该channel均会上报中断;system
events至channel映射完了之后,还不能完成中断的上报,还需要把这256个channel映射至host
interrupt,host interrupt的数量最大也是256个。这个host
interrupt的编号和CICx_OUTn是一一对应的,但是整个对应关系并不是从CIC0开始按序号一边编到最后的CICx,而是CIC分多个,每个CIC的OUT都是从OUT0开始编号。实际上CICx_OUTn到corepac的intc的输入,是定死的,如下图:

比如21行中的CIC0_OUT,对于core0来说,core0的intc的system
event 21接的就是CIC0_OUT(32 + 0 + 11 * 0),即CIC0_OUT32啦,这个CIC0_OUT32是不可能让其他core来接管的;

同样,对于core1来说,core1 intc的system
event 21接的就是CIC0_OUT(32 + 0 + 11 * 1),即CIC0_OUT43,这个CIC0_OUT43同样也只能由core1接管,不可能让其他core来接管CIC0_OUT43。其他类推。

因此对于从CIC的输入,到最后core可以处理的整个流程,有3个环节决定CIC的输入最终由哪个core来处理,这3个环节分别是:

1、  system interrupt到channel的map

2、  channel到host
interrupt的map

3、  host interrupt到corepac
intc的连接

之所以最后一个叫连接,而不叫map,是因为这个level上确实不存在什么map不map,而是直接连死的,如上面图下的分析。而前面的两个map中,真正算的上map的只能有1个,就是第一个,system
interrupt到channel的map,因为这个level是可以配置的,可以随意配置,而第二个map,即channel到host
interrupt的map实际上是硬件固定的,但是有一个map状态寄存器可以查询。第三个也是硬件固定的,貌似跟第二个差不多,但是不叫map,至于原因,是因为这个level上连像第二级的映射查询都没有。

因此,需要将system interrupt配置至要处理的core能正确感知的话,主要是配置level1,即system
interrupt到channel的map,而且需要根据level2和level3的关系来确定level1的配置,比如有一个CIC上连的中断,如果我们希望这个中断由core0来接管的话,那么先确认core0可以相应那些CICx_OUTn,然后确认这个OUTn的host
interrupt编号,此时便可以确认map到该host interrupt的是哪个channel了,再然后,将core0要接管的这个CIC中断map到对应的channel上即可,最后还需要几个使能,包含CIC输入的使能、host
interrupt的使能,以及intc对应的event使能。当然,并非所有的CIC上的中断都可以由core0来接管,因为可以映射到core0的中断实际仅仅局限于CIC0上的,具体限制如下图所示:

【DSP开发】C6678的中断控制器的更多相关文章

  1. 【ARM-Linux开发】【DSP开发】AM5728介绍

    AM5728 Sitara Processors 1.    介绍 1.1 AM572x概述 AM572x是高性能,Sitara器件.以28nm技术集成: 结构设计主要考虑嵌入式应用,包括工业通讯,人 ...

  2. 【DSP开发】DSP通用并行端口uPP

      这是翻译TI官方文档<KeyStone Architecture Universal Parallel Port (uPP)>SPRUHG9有关通用并行端口uPP的内容(除寄存器部分) ...

  3. 【VS开发】【DSP开发】浅谈Linux PCI设备驱动(一)

    要弄清楚Linux PCI设备驱动,首先要明白,所谓的Linux PCI设备驱动实际包括Linux PCI设备驱动和设备本身驱动两部分.不知道读者理不理解这句话,本人觉得这句话很重要,对于PCI.US ...

  4. 【DSP开发】【Linux开发】基于ARM+DSP进行应用开发

    针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算 ...

  5. DSP开发笔记一

    前言 ​ 本笔记首先对DSP的特点及其选型进行了描述,然后重点记录DSP开发环境的搭建及基础工程示例,对为DSP开发新手有一定的指导作用. 1. DSP简介 1.1 主要特点 在一个指令周期内可完成一 ...

  6. x86架构中的外部中断结构-Part 1:中断控制器的演化

    本文主要讲解了x86体系架构从外部设备接受中断的过程,本文是系列文章的第一部分,试图回答以下问题: 什么是PIC以及它的用途是什么? 什么是APIC以及它的用途是什么?LAPIC和I/O APIC的目 ...

  7. ARM9的中断控制器

    简要复习一下ARM9中断控制器的控制过程: 1.首先能识别触发的中断(对应中断源必须打开,然后查询当前中断状态寄存器),硬件会操控PC跳到中断向量入口(IRQ_HANDLE,硬件控制的只要是IRQ中断 ...

  8. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇—多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  9. IOS开发UI篇—导航控制器属性和基本使用

    IOS开发UI篇—导航控制器属性和基本使用 一.导航控制器的一些属性和基本使用 1.把子控制器添加到导航控制器中的四种方法 (1) 1.创建一个导航控制器 UINavigationController ...

随机推荐

  1. web 9个令人震惊的WebGL示例

    20个使用WebGL和Three.js实现的网页场景 https://www.open-open.com/news/view/9d8136 20个使用WebGL和Three.js实现的网页场景 htt ...

  2. Educational Codeforces Round 26 [ D. Round Subset ] [ E. Vasya's Function ] [ F. Prefix Sums ]

    PROBLEM D - Round Subset 题 OvO http://codeforces.com/contest/837/problem/D 837D 解 DP, dp[i][j]代表已经选择 ...

  3. uniapp上传图片转base64码

    uni.chooseImage({ count: 9, success: res => { this.imageList = this.imageList.concat(res.tempFile ...

  4. CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)E

    题面 这个题暴好啊,考了很多东西. 首先设f(x)为离终点还有x步要走的期望步数,我们可以发现 : 1.x>=k时,x可以转移到的点的下标都<x. 2.x<k时,则可能走回到x或者下 ...

  5. 【CUDA 基础】3.2 理解线程束执行的本质(Part I)

    title: [CUDA 基础]3.2 理解线程束执行的本质(Part I) categories: CUDA Freshman tags: 线程束分化 CUDA分支 toc: true date: ...

  6. Python3 日期与时间戳互相转换(函数可调用)

    一.前言 在开发中,我们经常会遇到时间戳转换日期,或者日期转换为时间戳: 日期格式:2019-08-01 00:00:00 时间戳格式:1564588800 关于时间戳 Unix时间戳(Unix ti ...

  7. 精讲JS逻辑运算符&&、||,位运算符|,&

    1.JS中的||符号: 运算方法: 只要“||”前面为false,不管“||”后面是true还是false,都返回“||”后面的值. 只要“||”前面为true,不管“||”后面是true还是fals ...

  8. python:科学计数法转化为浮点型数据

    def as_num(x): y='{:.5f}'.format(x) # 5f表示保留5位小数点的float型 return(y) 实验一下 as_num(1.2e-4) In [3]:as_num ...

  9. Forcepoint

    Forcepoint One Endpoint Diagnostics Tool C:\Program Files\Websense\Websense Endpoint\WEPDiag.exe &qu ...

  10. pandas之to_datetime时区转换

    from datetime import date, datetime, timedelta     import time     import pandas as pd     from pand ...