【DSP开发】C6000非多核非KeyStone系列DSP中断系统
C6000系列DSP的中断系统
上一篇介绍了C6455的GPIO系统,最后把GPIO4配置成了中断/事件模式,本文将介绍C6455的中断系统,介绍完基本概念后,给出把GPIO4映射到INT4的代码。
完成了GPIO和中断的配置,我们就可以开始着手DSP与FPGA之间的通讯了。废话不多说,下面开始介绍C6455的中断系统。
----------------------------------------------------华丽分割------------------------------------------------------
中断模块框图
仔细观察上图,可以看出C6455有一下几种中断:
- 1. Reset
- 2. NMI 不可屏蔽中断
- 3. EXCEP 硬件异常
- 4. 12个普通中断INT[15:4]
- RESET
- Event[3:0]
- Event[127:4]
RESET不看了,硬件重启。
EVENT[127:4]是系统事件,这个事件的编号根据芯片的不同而不同,拿6455来说,部分映射情况如下面两个图片所示:
不难看出,这些编号都是固定的,基本囊括了芯片上所有模块的事件。
最后,比较特别的是Event[3:0],它是组合事件,通过下图的介绍应该就一目了然了。
可见,Event0对应 4-31号事件的组合事件,Event2对应32-63号事件的组合事件,以此类推。
----------------------------------------------------华丽分割------------------------------------------------------
那么,怎么组合呢?
这就不得不从寄存器开始说起了。首先,先看如下3个寄存器组:
(注:每组都是4个32位寄存器,每一组的EVTxxx0[3:0]都不使用,故这里不涉及到组合事件)
系统事件发生时(124个),它们在事件标志寄存器中(EVTFLAGx)的对应位会被置1,此时可以通过向EVTCLR寄存器中对应位写入1来清除中断标志,然后执行中断服务程序。若不清除,那么相同事件再次发生时会产生问题。故,手动清除中断标志是必须的!且只能通过向EVTCLR寄存器中写入1来清除,不能直接向EVTFLAG寄存器写入0,因为EVTFLAG寄存器是Read
Only的。
另外,EVTSET寄存器的存在意义就是我们可以手动产生中断,这一点可以让我们测试中断服务程序的功能。
介绍完上面三个基本的寄存器组,我们可以开始讨论组合事件的机制了。先看下图:
可以明显的看出,124个事件被分成了4组。然后经过两个寄存器的运算,产生组合事件。
下面介绍EVTMASK和MEVT FLAG两个寄存器组。
- EVT MASK寄存器组用于决定每一个组中的哪些事件被屏蔽掉。默认情况下,没有事件被屏蔽(全0)。
- 鉴于最终的组合事件EVTx的发生机制是对Group中所有事件进行或运算,即只要Group中有一个事件发生,就代表组合事件发生。
举个例子:
假如EVTMASK3=0x0FFFFFFF,那么代表只有事件124,125,126,127参与组合。其他事件96-123都被忽略。
- MEVT FLAG寄存器同EVT FLAG寄存器的值相同,表示事件是否发生。这样一旦知道了EVTMASK和MEVT FLAG两个寄存器的值就可以断定组合事件EVTx(0<=x<=3)是否发生了。
----------------------------------------------------华丽分割-----------------------------------------------------
通过上面的介绍,应该已经很清楚C6455的中断机制了,再贴一张图来巩固一下上面所说的内容:
说到这里,我们对上图中红色框以及它之前的东西了解的很清楚了,下面就是Interrupt Selector的机制了。
其实很简单,为12个中断分别配置对应的事件编号即可。只需要3个寄存器就OK啦。
分别是INTMUX1,INTMUX2,INTMUX3。贴一个图就应该很明了了。
举个例子:
假设我要让INT4映射到GPIO4,那么通过查找前面的图,发现GPINT4的事件编号是55,那么只要把INTMUX1的低7位设置成0x37即可。
此外,官方文档里还说了下面一段话:
可见,INT4优先级最高,INT15优先级最低
----------------------------------------------------华丽分割------------------------------------------------------
中断模块CSL库使用
上面介绍了很多,其实就是想说清楚C6455的中断机制。实际使用还是CSL比较方便。
使用CSL配置中断需要如下几个步骤:
- 1. 初始化中断模块
- 2. 使能NMI
- 3. 全局中断使能
- 4. 打开中断模块
- 5. 绑定中断服务程序
- 6. 使能相应事件
完整中断配置例子----把GPIO4事件映射到INT4
- CSL_Status intStat;
- CSL_IntcContext gpiocontext;
- CSL_IntcEventHandlerRecord isr_gpio;
- CSL_IntcEventHandlerRecord record[1];
- CSL_IntcGlobalEnableState state;
- CSL_IntcParam vectId;
- CSL_IntcHandle gpioIntcHandle;
- CSL_IntcObj gpioIntcObj;
- static void HANDLE_INTR4(void *arg)
- {
- //中断服务程序
- }
- /*-----------------------------------------------------------------------------------
- *
- * 初始化外部中断4
- *
- -----------------------------------------------------------------------------------*/
- void InitAndEnableIntc4(void)
- {
- //初始化
- gpiocontext.numEvtEntries = 1;
- gpiocontext.eventhandlerRecord = record;
- intStat = CSL_intcInit(&gpiocontext);
- //使能NMI(不可屏蔽中断)
- intStat = CSL_intcGlobalNmiEnable();
- //全局中断使能
- intStat = CSL_intcGlobalEnable(&state);
- //打开中断模块(把GPIO4中断事件映射到系统中断INT4)
- vectId = CSL_INTC_VECTID_4;
- gpioIntcHandle = CSL_intcOpen(&gpioIntcObj, CSL_INTC_EVENTID_GPINT4, &vectId, &intStat);
- //绑定中断服务程序
- isr_gpio.handler = (CSL_IntcEventHandler)&HANDLE_INTR4;
- CSL_intcPlugEventHandler(gpioIntcHandle, &isr_gpio); //绑定
- //使能该事件(开始监听)
- CSL_intcHwControl(gpioIntcHandle, CSL_INTC_CMD_EVTENABLE, NULL);
- }
通过本文以及上一篇文章,我们应该对DSP6000系列的GPIO和中断系统有了一定的了解。(注,本文只是基本的介绍C6000的中断系统,有不少部分没有涉及,若要了解更多,请参考TI官方文档)
接下来将介绍:
- DSP的EDMA系统与EMIFA接口
- FPGA的乒乓RAM应用
- CCIR656视频标准(PAL)
- FPGA与DSP实现的视频采集与传输实验
- 1.C6000系列的GPIO与中断系统笔记(即两篇文章的PDF版本)
- 2.C6455CSL库文档
- 3.C6455的GPIO与中断系统官方文档
【DSP开发】C6000非多核非KeyStone系列DSP中断系统的更多相关文章
- 【DSP开发】解读TI的KeyStone II云技术应用
最近,德州仪器(TI)公司推出6款最新KeyStone II多核SoC,助力云应用.TI公司多核DSP中国市场开发经理蒋亚坚先生向媒体讲解了这6款KeyStone II新产品的特点与目标应用. ...
- 【DSP开发】TI第二代KeyStone SoC诠释德仪的“云”态度
11月14日,期盼已久的德州仪器基于ARM Cortex-A15的产品终于新鲜出炉.伴随着TIKeyStone II多核 SoC系列产品的发布,结合了ARM Cortex-A15 处理器.C66x D ...
- 【DSP开发】【Linux开发】基于ARM+DSP进行应用开发
针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算 ...
- TMS320C54x系列DSP的CPU与外设——第1章 绪论
第1章 绪论 TMS320C54x DSP是TMS320系列DSP产品中的定点数字信号处理器.C54x DSP满足了实时嵌入式应用的一些要求,例如通信方面的应用. C54x的中央处理单元(CPU)具有 ...
- 【DSP开发】硬件信号量在多核处理器核间通信中的应用
硬件信号量在多核处理器核间通信中的应用 刘德保1,汪安民1,韩道文2 1.同方电子科技有限公司研究所,九江 332009:2.解放军电子工程学院 摘要: 在多核处理器的软件设计中,核间通信机制是关键所 ...
- 【DSP开发】回马枪要你命 德州仪器发布最强ARM芯片Keystone II
之前许多传闻称德州仪器将会彻底放弃OMAP系列ARM处理器,从此离开手持设备的江湖.如果你信以为真,那可就太小看德州仪器这个老狐狸了--要知道德州仪器诞生的比Intel都还早几年.三小时前,德州仪器宣 ...
- React 可视化开发工具 Shadow Widget 非正经入门(之五:指令式界面设计)
本系列博文从 Shadow Widget 作者的视角,解释该框架的设计要点.本篇解释 Shadow Widget 中类 Vue 的控制指令,与指令式界面设计相关. 1. 指令式界面设计 Vue 与 A ...
- React 可视化开发工具 Shadow Widget 非正经入门(之六:markdown)
本系列博文从 Shadow Widget 作者的视角,解释该框架的设计要点.本篇讲解 Markdown 在 Shadow Widget 中的应用. Markdown 在 Shadow Widget 中 ...
- h.264并行解码算法2D-Wave实现(基于多核非共享内存系统)
在<Scalable Parallel Programming Applied to H.264/AVC Decoding>书中,作者基于双芯片18核的Cell BE系统实现了2D-Wav ...
随机推荐
- HTML的多媒体属性
㈠什么是多媒体? 多媒体来自多种不同的格式.它可以是听到或看到的任何内容,文字.图片.音乐.音效.录音.电影.动画等等. Web 上的多媒体指的是音效.音乐.视频和动画. 确定媒体类型的最常用的方法是 ...
- Node.js 安装与开发
Node.js 简介 Node.js是一个Javascript运行环境(runtime),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.Node.js对一些 ...
- log4j 多进程配置要注意的
多进程写日志文件 方法一: 解决log4j公用配置文件,多进程同时写同一个log文件,因存在操作系统pv操作问题, 导致部分日志丢失.解决方案是不同的进程写不同的log文件 测试于:Log4j 1.2 ...
- orale数据库的SQL查询
创建学生表,成绩表,教师表,课程表,分别添加数据信息 create table student( sno ) primary key, sname ), sage ), ssex ) ); cre ...
- beta week 2/2 Scrum立会报告+燃尽图 06
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9959 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名: ...
- SRS之SrsRtmpServer::connect_app详解
1. connect('live') 2. SrsRtmpServer::connect_app 位于 srs_rtmp_stack.cpp.在 SRS 的 RTMP 连接处理线程 conn 中,当与 ...
- System.Runtime.CompilerServices.Unsafe
System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.CompilerServices.Un ...
- ReentrantLock源码探究1:非公平锁的获取和释放
1.AQS简单介绍 Sync是ReentrantLock的一个内部类,它继承了AbstractQueuedSynchronizer,即AQS,在CountDownLatch.FutureTask. ...
- ccf 201712-4 行车路线(70分)
ccf 201712-4 行车路线 解题思路: 首先Dijkstra是基于贪心算法的,即每一次作出的选择都具有贪心选择性.此题由于有“如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2 ...
- Sql语法树示例 select username, ismale from userinfo where age > 20 and level > 5 and 1 = 1
select username, ismale from userinfo where age > 20 and level > 5 and 1 = 1 --END-2019年9月5日17 ...