当前位置: 首页 > 编程日记 > 正文

【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]
我们使用的最多的也就是普通中断,所以这也是本文的重点。


----------------------------------------------------华丽分割------------------------------------------------------


接下来,沿着INT[15:4]往后退,看到的是Interrupt Selector,它的功能好比一个筛子(shuffle),对所有中断事件进行选择性映射。如下图示:


看了这个图,我们又不难发现,中断选择器是一个128-->12的映射,这也就意味着,有116个系统事件被过滤掉了。

接着往回走,可以看到,中断选择器有三个输入,分别是:

  • 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组。然后经过两个寄存器的运算,产生组合事件。


下面介绍EVTMASKMEVT 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


[cpp] view plaincopy
  1. CSL_Status                  intStat;  
  2. CSL_IntcContext             gpiocontext;  
  3. CSL_IntcEventHandlerRecord  isr_gpio;  
  4. CSL_IntcEventHandlerRecord  record[1];  
  5. CSL_IntcGlobalEnableState   state;  
  6. CSL_IntcParam               vectId;  
  7. CSL_IntcHandle              gpioIntcHandle;  
  8. CSL_IntcObj                 gpioIntcObj;  
  9.   
  10.   
  11. static void HANDLE_INTR4(void *arg)  
  12. {  
  13.     //中断服务程序  
  14. }  
  15. /*----------------------------------------------------------------------------------- 
  16.  *  
  17.  *                  初始化外部中断4     
  18.  *  
  19.  -----------------------------------------------------------------------------------*/  
  20. void InitAndEnableIntc4(void)  
  21. {      
  22.     //初始化  
  23.     gpiocontext.numEvtEntries = 1;  
  24.     gpiocontext.eventhandlerRecord = record;  
  25.     intStat = CSL_intcInit(&gpiocontext);     
  26.       
  27.     //使能NMI(不可屏蔽中断)  
  28.     intStat = CSL_intcGlobalNmiEnable();  
  29.       
  30.     //全局中断使能  
  31.     intStat = CSL_intcGlobalEnable(&state);   
  32.       
  33.     //打开中断模块(把GPIO4中断事件映射到系统中断INT4)  
  34.     vectId = CSL_INTC_VECTID_4;  
  35.     gpioIntcHandle = CSL_intcOpen(&gpioIntcObj, CSL_INTC_EVENTID_GPINT4, &vectId, &intStat);      
  36.         
  37.     //绑定中断服务程序  
  38.     isr_gpio.handler = (CSL_IntcEventHandler)&HANDLE_INTR4;  
  39.     CSL_intcPlugEventHandler(gpioIntcHandle, &isr_gpio); //绑定  
  40.       
  41.     //使能该事件(开始监听)  
  42.     CSL_intcHwControl(gpioIntcHandle, CSL_INTC_CMD_EVTENABLE, NULL);  
  43. }  




通过本文以及上一篇文章,我们应该对DSP6000系列的GPIO和中断系统有了一定的了解。(注,本文只是基本的介绍C6000的中断系统,有不少部分没有涉及,若要了解更多,请参考TI官方文档)


接下来将介绍:

  • DSP的EDMA系统与EMIFA接口
  • FPGA的乒乓RAM应用
  • CCIR656视频标准(PAL)
  • FPGA与DSP实现的视频采集与传输实验

最后,给出一些资源下载:

  • 1.C6000系列的GPIO与中断系统笔记(即两篇文章的PDF版本)
  • 2.C6455CSL库文档
  • 3.C6455的GPIO与中断系统官方文档

点此下载

转载于:https://www.cnblogs.com/huty/p/8518522.html

相关文章:

SVN用法大全,SVN除了update、commit还有什么

svn除了大家都知道的update、commit以外还有什么常用功能呢&#xff1f; 点击TortoiseSVN后&#xff0c;出现了右图的列表&#xff0c;这其中有哪些是常用的功能呢&#xff1f;最近在家办公&#xff0c;有些东西要svn操作&#xff0c;就了解了下。 咱们从上面开始 1、Show log…

递归删除目录下的所有文件

import java.io.File; public class DeleteDirectory { /** * 删除空目录 * param dir 将要删除的目录路径 */ private static void doDeleteEmptyDir(String dir) { boolean success (new File(dir)).delete(); if (success) { System.out.println("Successfully delete…

Web项目使用nginx实现代理端口访问,看这篇就够了

在搭建服务器的时候&#xff0c;项目部署在tomcat上&#xff0c;要访问项目&#xff0c;则需要加上端口号&#xff0c;如何隐藏端口号来访问呢&#xff0c;这就用到了nginx. nginx可以在docker上安装&#xff0c;也可以在linux上安装&#xff0c;这里我建议使用linux&#xff0…

java.lang.Thread使用及总结

1 public class mainThread{2 public static void main(String args[]){3 //第一种方式启动线程4 otherThread otnew otherThread();5 Thread tnew Thread(ot);6 t.start();7 8 //第二种方式启动线程9 itemThread…

linux/docker个人服务器项目中文变问号??,时间差8小时问题解决方法,最新,最有效

前段时间在腾讯云上面买了一台个人服务器&#xff0c;在搭建好web项目的时候&#xff0c;在项目中录入中文&#xff0c;全部变成了问号,时间也错了&#xff0c;百思不得其解&#xff0c;后来我尝试着修改docker编码&#xff0c;修改系统语言&#xff0c;都无法改变。后来我把项…

Android手机指令操作释疑

有人问我一个关于Android手机root与否的问题,她说明明iTools显示已取得root权限,但她就是没法在该手机上运行需要root权限的App如钛备份等等.我告诉她最好的确认方式便是以adb指令进到 /data/data路径之下,再执行 ls –al,若能顺利得到执行结果,而不会提示”Permission denied”…

伍六七带你学算法 入门篇-矩形重叠

力扣解题-----每日一题-836 矩形以列表 [x1, y1, x2, y2] 的形式表示&#xff0c;其中 (x1, y1) 为左下角的坐标&#xff0c;(x2, y2) 是右上角的坐标。 如果相交的面积为正&#xff0c;则称两矩形重叠。需要明确的是&#xff0c;只在角或边接触的两个矩形不构成重叠。 给出…

[摘录]代码优化规则

<<代码优化&#xff1a;有效使用内存>>代码优化建议&#xff1a; 1. 展开读取内存的循环 2. 消除数据相关性 如果请求的RAM单元存在地址数据相关性&#xff08;也就是说&#xff0c;一个单元含有另一个单元的地址&#xff09;&#xff0c;那么CPU不能…

伍六七带你学算法 入门篇-拼写单词

力扣解题&#xff0c;每日一题 1160. 拼写单词 难度- 简单 给你一份『词汇表』&#xff08;字符串数组&#xff09; words 和一张『字母表』&#xff08;字符串&#xff09; chars。 假如你可以用 chars 中的『字母』&#xff08;字符&#xff09;拼写出 words 中的某个『单…

linux内核调优参考

对于新部署的机器&#xff0c;需要做一些基本的调优操作&#xff0c;以更改一些默认配置带来的性能问题 1 修改打开文件数 rootmysql:/data/tools/db# vim /etc/security/limits.conf * soft nofile 65535 * soft nproc 65535…

伍六七带你学算法 入门篇-最长回文串

力扣解题&#xff0c;每日一题&#xff1a;409. 最长回文串 难度- 简单 给定一个包含大写字母和小写字母的字符串&#xff0c;找到通过这些字母构造成的最长的回文串。 在构造过程中&#xff0c;请注意区分大小写。比如 “Aa” 不能当做一个回文字符串。 注意: 假设字符串…

bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节。。 点分治&#xff1a;时空复杂度$O(n\log^2n)$&#xff0c;常数巨大 主要就是3个堆的初始状态 C堆&#xff1a;每个节点一个&#xff0c;为子树中的点到它父亲的距离的堆。 B堆&#xff1a;每个节点一个&#xff0c…

伍六七带你学算法 入门篇-最小的k个数

java面试题-最小的k个数 难度-简单 输入整数数组 arr &#xff0c;找出其中最小的 k 个数。例如&#xff0c;输入4、5、1、6、2、7、3、8这8个数字&#xff0c;则最小的4个数字是1、2、3、4。 示例 1&#xff1a; 输入&#xff1a;arr [3,2,1], k 2 输出&#xff1a;[1,2] …

伍六七带你学算法 进阶篇-三数之和

三数之和 难度-中等 题目&#xff1a;给你一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;请你找出所有满足条件且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三…

伍六七带你学算法 入门篇-链表的中间节点

力扣-876链表的中间节点 难度-简单 给定一个带有头结点 head 的非空单链表&#xff0c;返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;[1,2,3,4,5] 输出&#xff1a;此列表中的结点 3 (序列化形式&#xf…

伍六七带你学算法 入门篇-卡牌分组

力扣-914. 卡牌分组 难度-简单 这是一道非常有趣的题&#xff0c;提交通过率令人深思 &#xff0c;思考它是不是一道简单的题… 开始正题&#xff1a; 给定一副牌&#xff0c;每张牌上都写着一个整数。 此时&#xff0c;你需要选定一个数字 X&#xff0c;使我们可以将整副牌…

伍六七带你学算法 进阶篇-排序算法

给定一个整数数组 nums&#xff0c;将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;[5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;[5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 各排序算法解法如下&#xff1a; (如想要了解算法排序原理…

伍六七带你学算法 进阶篇-生命游戏

有趣的算法题–生命游戏 难度-中等 根据 百度百科 &#xff0c;生命游戏&#xff0c;简称为生命&#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 想要体验生命游戏的小伙伴可以到这里——>生命游戏 进入正题&#xff1a; 给定一个包含 m n 个格子的…

Linux下docker安装配置oracle,oracle创建用户并远程连接,实测可用!

最近在给同学弄毕业设计的数据库&#xff0c;因为oracle在个人电脑上极不稳定&#xff0c;所以他的电脑数据库崩溃了&#xff0c;这时候我就在docker上为他拉了一个oracle&#xff0c;解决了问题。 docker的安装共有以下几步&#xff0c;实测没问题&#xff0c;直接搬去永久可以…

plsql配置多数据源,想换哪个换哪个

现在的公司内部普遍使用plsql对数据库进行管理。而数据库非常多&#xff0c;从测试到线上环境数据库那么多&#xff0c;我们通常使用同一配置管理&#xff0c;便于切换。那么配置数据库连接就成为了很重要的一步。 1、安装plsql &#xff08;这里大家去下载安装一下&#xff0…

常见的几种网络抓包及协议分析工具

网络工程师必备技能-抓取网络数据。在本篇博客中,我们将集中记下几个问题进行探讨:Wireshark 是免费的抓取数据包、分析数据包的工具,兼容 Windows、Linux、Mac等主流平台。使用 wireshark 抓包需要的工具是:安装了 wireshark 的 PC。wireshark 抓包的范围是:抓取安装了 wireshark 的 PC 本机的网卡上流经的数据包。其中,网卡指的是 PC 上网使用的模块,常见的包括:以太网网卡、wifi 无线网卡,PC 分别使用它们用于连接以太网、wifi 无线网络。

一文搞懂网络OSI网络模型

在互联网技术里,有两件事最为重要,一个是TCP/IP协议,它是万物互联的事实标准;另一个是Linux操作系统,它是推动互联网技术走向繁荣的基石。在网络编程中最重要的模型便是OSI七层网络模型和TCP/IP四层网络模型七层模型,也称为OSI(Open System Interconnection)参考模型,是国际标准化(ISO)指定的一个用于计算机或通信系统间互联的标准体系。建立七层模型的主要目的是为解决各种网络互联时遇到的兼容性问题。

简单两步,spring aop上手即用即会

面向切面思想在于它的干净&#xff0c;对逻辑代码没有任何侵入性&#xff0c;只需要在想要切入的方法或者类之上加上自定义的注解即可。 首先&#xff0c;就是自定义一个注解&#xff1a; //这里我们定义一个名为 MyPointer 的注解 Documented Retention(RetentionPolicy.RUNTI…

手动将jar包导入pom依赖,让jar包适配本地maven项目

前言&#xff1a; Oracle对maven很久没有更新依赖&#xff0c;虽然19年更新了一版&#xff0c;但pom引入一直有错误。 我用的是oralce 12的依赖&#xff0c;虽然有jar包&#xff0c;但是依赖和pom没有适配&#xff0c;项目打包的时候还要去中央仓库去下载&#xff0c;而中央仓库…

浏览器兼容video视频播放的多种方法&视频在浏览器播放格式,视频浏览器播放格式演示

对于老版本的IE可以通过HTML5shiv来使不支持HTML5的浏览器支持HTML新标签video和audio标签。主要解决HTML5提出的新的元素不被IE6/IE7/IE8识别,这些新元素不能作为父节点包裹子元素,且不能应用CSS样式。让CSS 样式应用在未知元素只需执行 document.createElement(elementName) 即可实现。html5shiv的工作原理也就是基于此。

Linux通过端口号杀死指定进程

前言&#xff1a; 我们在服务器上升级项目的时候&#xff0c;需要将原来的项目停止&#xff0c;然后启动新的项目。 这时候我们只知道应用所占的端口号&#xff0c;如何将进程杀死呢&#xff1f; linux中杀进程时候&#xff0c;如果你是知道它所占用的端口号的话&#xff0c;可…

Linux/docker下oracle开启监听,开启自动启动

写在前头&#xff1a; 之前呢&#xff0c;使用docker安装了oracle&#xff0c;但它默认是会关闭的。使用了几天以后突然连接异常了&#xff0c;报的问题是oracle监听有问题了&#xff0c;我知道了是oracle服务自动关闭了&#xff0c;监听也跟着关了。所以我找了一些文章&#x…

手把手教你JavaEE的分页查询、分页展示,有了这个,你的项目又多了一个谈资

前言&#xff1a; 我们在写项目的时候&#xff0c;往往有一些项目的信息展示。而展示的数据量往往是很大的&#xff0c;这时候&#xff0c;加入一个分页的功能往往是最理想的选择。 先简单描述一下功能&#xff1a; 根据你的数据量和指定的页面展示数据条数&#xff0c;进行查…

一分钟带你了解什么是“复杂度” 算法上的O(1)、O(n)、O(logn) 这些都是什么❓❓

前言&#xff1a;在最开始学习编程的时候&#xff0c;打开数据结构的书&#xff0c;最显眼的就是排序算法&#xff0c;什么堆排序、希尔排序&#xff0c;然后旁边写着最坏复杂度、最优复杂度、平均复杂度&#xff0c;是一些O(n)、O(logn)、O(n)。这时候我脑子想起一首歌——大朋…

什么是LinkedList?什么时候使用它呢?Java LinkedList结构、用法及源码解析

前言&#xff1a;我们学习java时都知道ArrayList实现List接口&#xff0c;LinkedList也实现List接口&#xff0c;但我们平时用的时候LinkedList却很少被用到。那么&#xff0c;LinkedList什么时候该用到呢&#xff1f;内部又是如何实现的呢&#xff1f;本文对此进行详细说明&am…