在F28335有很多资源,同样也有很多外设,这些外设与相关资源都有可能发布新的任务让内核来判断与处理。F28335的中断源可分为片内外设中断源,如PWM、CAP、QEP、定时器等、片外中断源,外部中断输入引脚XINT1,XINT2引人的外部中断源等。

1、dsp28335三级中断机制

由于外设中断源有58个,而中断线只有12根,这就需要F28335的外设中断扩展模块PIE来进行分配。DSP的外设中断扩展模块结构图如下图所示,F28335的中断采用的3级中断机制,第一级是CPU中断、第二级为PIE级中断、第三级为外设级中断。至于为什么这么设计:由于DSP内部集成了多种外设,每个外设都会产生一个或者多个外设级中断,但是由于CPU中断线有限无法处理所有的外设级中断,因此只能让出12根中断线交给PIE模块进行管理,将所有的外设中断分为了12组,并通过寄存器进行管理。而要实现一次中断响应,通过对下图分析可知,外设级中断要得到CPU的响应需要同时满足两个条件。:1、得到PIE模块的允许(由PIE模块的:PIEIER和PIEIFR寄存器控制分配,由PIEACK控制使能),2、得到CPU的允许(由CPU中断的:IFR和IER寄存器控制分批额,由INTM控制使能)

2、中断向量表的来源

由于每个中断组都有若干个外设中断来源,若这些中断同时到来,则必须要通过软件配置优先级,并且花费较长的CPU处理周期才不会引起冲突,为了解决这个问题,在DSP28335中采用PIE中断向量表来解决复用的问题,通过PIE中断向量表使得可能产生的所有中断都有一个各自独立的32位入口地址,并且提前规定好优先级,CPU的中断优先级是由高到低是INT1~INT12,PIE的中断优先级由高到低是INTx.1~INTx.8。中断向量表如下所示(就不全部放了),大家可以查手把手教学的104页。

3、中断控制寄存器的初始化

在知道了上述的结构后,每次运行程序之前为了保证稳定状态需要对中断的向量表进行初始化。在进行中断向量表初始化之前,需要进行中断控制寄存器的初始化。初始化函数如下所示,从代码中可以看到,对PieCtrlRegs.PIEIER1 ~PieCtrlRegs.PIEIER12的寄存器均进行了置0,从而保证上电后对所有寄存器的稳定状态。

void InitPieCtrl(void)
{// Disable Interrupts at the CPU level:  关闭CPU级中断使能DINT;// Disable the PIE    关闭PIE使能PieCtrlRegs.PIECTRL.bit.ENPIE = 0;// Clear all PIEIER registers: 清除所有PIEIER寄存器值PieCtrlRegs.PIEIER1.all = 0;PieCtrlRegs.PIEIER2.all = 0;PieCtrlRegs.PIEIER3.all = 0;   PieCtrlRegs.PIEIER4.all = 0;PieCtrlRegs.PIEIER5.all = 0;PieCtrlRegs.PIEIER6.all = 0;PieCtrlRegs.PIEIER7.all = 0;PieCtrlRegs.PIEIER8.all = 0;PieCtrlRegs.PIEIER9.all = 0;PieCtrlRegs.PIEIER10.all = 0;PieCtrlRegs.PIEIER11.all = 0;PieCtrlRegs.PIEIER12.all = 0;// Clear all PIEIFR registers:  清除所有PIEIFR寄存器值PieCtrlRegs.PIEIFR1.all = 0;PieCtrlRegs.PIEIFR2.all = 0;PieCtrlRegs.PIEIFR3.all = 0;   PieCtrlRegs.PIEIFR4.all = 0;PieCtrlRegs.PIEIFR5.all = 0;PieCtrlRegs.PIEIFR6.all = 0;PieCtrlRegs.PIEIFR7.all = 0;PieCtrlRegs.PIEIFR8.all = 0;PieCtrlRegs.PIEIFR9.all = 0;PieCtrlRegs.PIEIFR10.all = 0;PieCtrlRegs.PIEIFR11.all = 0;PieCtrlRegs.PIEIFR12.all = 0;}   

4、中断控向量表的初始化

在经过中断若干控制寄存器的初始化后,进行中断向量表的初始化,也即为所有的外设级中断分配地址,具体代码如下所示,代码中指针就是将PieVectTableInit 中的地址指向 PieVectTable中。这里不禁想问了,为什么是128个而不是上面说的8*12 = 96个。这是因为DSP中还存在保留的13位未用中断以及19个非外设中断,总共加起来就是128个。在将地址分配给中断向量表后,就可以方便的通过代码对中断进行设计了,也方便了我们的编程。

void InitPieVectTable(void)
{int16  i;Uint32 *Source = (void *) &PieVectTableInit;Uint32 *Dest = (void *) &PieVectTable;EALLOW;   for(i=0; i < 128; i++)*Dest++ = *Source++;   EDIS;// Enable the PIE Vector Table  使能中断向量表PieCtrlRegs.PIECTRL.bit.ENPIE = 1; }

DSP28335学习——中断向量表的初始化相关推荐

  1. git学习总结01 — 初始化

    git学习总结01 - 初始化 文章目录 git学习总结01 - 初始化 1. 起步 2. 初始化配置 2.1 设置签名 config 2.2 初始化本地库 init 2.3 配置忽略文件 .giti ...

  2. 深度学习的Xavier初始化方法

    在tensorflow中,有一个初始化函数:tf.contrib.layers.variance_scaling_initializer.Tensorflow 官网的介绍为: variance_sca ...

  3. 深度学习之权重初始化

    四种权重初始化方法: 把w初始化为0 对w随机初始化 Xavier initialization He initialization 把w初始化为0: 缺点: 因为如果把w初始化为0,那么每一层的神经 ...

  4. DSP28335学习笔记-产生PWM波 ——从应用角度出发

    文章目录 前言 一.示波器检测PWM波 1.对应引脚说明 2.PWM波形 二.寄存器配置及代码实现 1.时基模块寄存器配置 2.计数比较模块和动作模块 3.死区产生模块 总结 前言 关于DSP2833 ...

  5. 转自IBM学习 浅析 Linux 初始化 init 系统,第 3 部分 Systemd

    Systemd 的简介和特点 原文链接  https://www.ibm.com/developerworks/cn/linux/1407_liuming_init3/index.html?ca=dr ...

  6. DSP28335学习之旅2-最小系统

    目录 1  什么是最小系统 2  JTAG下载电路 3  电源电路 4  boot电路 5  复位电路 6  晶振电路 1  什么是最小系统 最小系统又称最小应用系统,它是能够使DSP正常工作的最低电 ...

  7. 深度学习--权值初始化

    什么是权值初始化 在神经网络的前向传播的过程中,需要设置输入到输出的权重. 为什么要权值初始化 正确的权值初始化可以促进模型的快速收敛,不正确的权值初始化可能使得模型在前向传播是发生发生信息消失,或在 ...

  8. JAVA学习笔记(九)- 初始化块与静态代码块

    初始化块 /** 初始化块* 初始化变量方式:声明时.构造函数.代码块* 使用static关键字修饰的代码块,称为静态代码块* * 执行顺序:静态代码块>代码块>构造方法* * 静态代码块 ...

  9. tf.variance_scaling_initializer() tensorflow学习:参数初始化

    CNN中最重要的就是参数了,包括W,b. 我们训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值.参数的初始化也同样重要,因此微调受到很多人的重视,那么tf提供了哪些初始化参数的方法呢,我 ...

最新文章

  1. JButton 做图片框
  2. 【.NET Core 3.0】 46 ║ 授权认证:自定义返回格式
  3. windows下同时安装python2与python3
  4. Java文件类boolean isDirectory()方法(带示例)
  5. ajax传递复选框的参数,ajax将table复选框的数组值传递到后台
  6. 【知识总结】多项式全家桶(一)(NTT、加减乘除和求逆)
  7. SQL SERVER事务处理
  8. git针对Android Studio的使用
  9. 禁止ViewPager滑动
  10. 如何通过蒲公英批量获取iPhone设备的udid
  11. 2.2.7 虚拟Ethernet以太网卡
  12. 安卓obb文件的使用进阶
  13. PIL中paste粘贴遇到的问题
  14. 机器学习中的数学——常用概率分布(九):经验分布(Empirical分布)
  15. 阿里云中mysql数据库被攻击了,最终数据找回来了
  16. 以电影“斯巴达300勇士”来谈谈团队的建设
  17. nc文件利器,NASA的panoply软件,适于看nc文件内容以及简单的绘图
  18. Java窗体边框颜色_【转】窗口效果,带边框、不带边框、设定窗口边框颜色
  19. java-php-python-ssm微志愿管理平台计算机毕业设计
  20. ChatGPT专业应用:采访大纲自动生成

热门文章

  1. Apache Hadoop Pig 源代码分析(2)
  2. 如何向svn添加新项目
  3. python爬虫抢演唱会_Python爬虫爬了七天七夜终于爬出了博客园粉丝数排行榜
  4. java版gRPC实战之三:服务端流
  5. 液晶屏接口LVDS接口与MIPI DSI接口区别
  6. params 有什么用
  7. 我与 CSDN 这几年,当技术遇到 CSDN,开启人生新篇章
  8. 为什么Facebook账号被封?如何应对Facebook账号被封?
  9. 1016: Roliygu and Yilan
  10. VScdoe将字体修改为宋体