DSP28335学习——中断向量表的初始化

article/2025/9/13 21:42:23

在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;	}


http://chatgpt.dhexx.cn/article/y5X889Sd.shtml

相关文章

IMX6ULL-IRQ中断之添加中断向量表

一. 中断向量表 中断向量表是存放中断向量的表。中断服务程序的入口地址或存放中 断服务程序的首地址成为中断向量&#xff0c;因此中断向量表是一系列中断服务程序入口地址组成的表。 当有中断事件发生时&#xff0c;处理器通过中断向量表进入相关的中断服务程序处理事件。 二…

BIOS 中断向量表

在bochs虚拟器调试中输入info ivt可以查看BIOS中断向量表 具体说明如下&#xff1a; 中断描述INT 00hCPU&#xff1a;除零错&#xff0c;或商不合法时触发INT 01hCPU&#xff1a;单步陷阱&#xff0c;TF标记为打开状态时&#xff0c;每条指令执行后触发INT 02hCPU&#xff1a;…

【裸机开发】认识中断向量表(设置中断向量偏移的原因)

之前的LED驱动不存在中断&#xff0c;也就不包含中断的初始化。如果程序包含了中断&#xff0c;我们应还需要初始化哪些内容&#xff1f;要解决这个问题&#xff0c;我们需要先了解一个中断系统包含了哪些内容。 ① 中断向量表&#xff1a;描述中断对应的中断服务函数&#xf…

linux内核学习10.1:Linux内核ARM7架构异常中断向量表

参考&#xff1a;https://www.cnblogs.com/douzi2/p/5112743.html 当异常中断发生时&#xff0c;系统执行完当前指令后&#xff0c;将跳转到相应的异常中断处理程序处执行。在异常中断处理程序执行完成后&#xff0c;程序返回到发生中断的指令的下一条指令处执行。 说明 Ker…

汇编_修改中断向量表_自定义中断

文章目录 中断向量表介绍索引方式&#xff1a;修改中断向量表 自定义中断思路实现效果&#xff1a;实现代码执行步骤 中断向量表 介绍 在dos系统中&#xff0c;总共设计了256种中断&#xff0c;每个中断都有一个中断号&#xff0c;通过中断号来映射中断程序的地址。为了实现映…

9.2 中断向量表的结构

计算机组成 9 中断和异常 9.2 中断向量表的结构 我现在已经知道了&#xff0c;在运算的时候 一旦遇到了异常情况&#xff0c;就翻到第一页的第一行开始写的这些操作的指示&#xff0c;开始往下执行。开始往下执行&#xff0c;这就能解决问题了。但是问题在于这段操作&#xff0…

中断向量表的重印射

基于HAL库 以STM30F303RBT6为例&#xff1a; 打开system_stm32f3xx.c文件&#xff0c;修改其中的中断向量表位置&#xff0c;修改flash offset即可。 下载的位置也&#xff0c;也需要修改 做远程升级时&#xff0c;需要在单片机启动前运行一个boo程序&#xff0c;在boot程序中…

嵌入式杂谈之中断向量表

虽说接触了好久的单片机或者说嵌入式开发&#xff0c;不过对于有些概念还是比较模糊&#xff0c;因此此系列将会从一些零碎的小知识点出发&#xff0c;慢慢的遍历整张嵌入式开发的地图。 这次先来看一下中断向量表。 至于为什么会提到中断向量表&#xff0c;主要是因为我自己…

中断向量表--

中断向量表如何确定中断的入口地址&#xff1f; 每个中断对应一个中断号&#xff0c;比如一个中断事件的中断号为0x00&#xff0c;那么它对应的中断程序的入口地址就是0x0000-0x0003&#xff0c;另一个中断事件的中断号为0x01&#xff0c;那么它对应的中断程序的入口地址就是0…

一文了解Cortex-M中断向量表对齐原则

关注星标公众号&#xff0c;不错过精彩内容 来源 | 痞子衡嵌入式 一、Cortex-M中断向量表对齐原则 中断向量表就是一个集中保存系统全部中断处理函数&#xff08;xxxIRQHandler&#xff09;地址的常量数组&#xff08;函数地址要占 4 个字节&#xff0c;因此数组中每个元素大小…

STM32中断向量表复制到SRAM中运行

1、生成Map文件 复制中断向量表前需要知道中断向量表的大小&#xff0c;可以通过编译生成的Map文件查看。 2、查看中断向量表大小 中断向量表的大小是固定的&#xff0c;与程序代码量无关&#xff0c;打开Map文件&#xff0c;直接搜索0x08000000&#xff0c;我使用的 MCU 是…

通过GDK8观察ARM框架下的中断向量表

一、中断向量表介绍 中断是指计算机运行过程中&#xff0c;出现某些意外情况需主机干预时&#xff0c;机器能自动停止正在运行的程序并转入处理新情况的程序&#xff0c;处理完毕后又返回原被暂停的程序继续运行。 以上是中断在百度百科中些较为浅显的解释&#xff0c;中断实际…

【STM32】中断向量表

我是通过这个进行学习的&#xff0c;我觉得讲的很好&#xff0c;这里我稍加修改&#xff0c;作为自己的学习笔记: 嵌入式杂谈之中断向量表 前言 STM32根据boot引脚的配置方式有3种启动方式&#xff0c;但是无论哪一种方式&#xff0c;对于STM32来说都是从0x0000 0000启动 ST…

Cortex M4 中断向量表

前言 重新学习Cortex M4的中断向量表内容。中断向量表是Cortex M4自带的功能&#xff0c;厂家可以根据需要自行定义&#xff0c;所以需要学习该内容&#xff0c;直接看Cortex M4内核相关即可。我这查看的是《Cortex M3与M4权威指南.pdf》。 一、中断向量 中断向量是什么&…

中断向量表

关于中断向量的几点注释 1. 系统引导时,中断向量表放在内存何处? 系统刚引导时,内存0x00000到0x0003FF共1KB的空间用于存放中断向量表。每个中断向量占用4个字节,共可存储256个中断向量。 2. 系统引导时,处在实模式下,只可寻址1MB,为什么要用4个字节来寻址中断呢处理程…

TF_REPEATED_DATA ignoring data with redundant timestamp for frame left_wheel at time

使用urdf和xacro编写机器人仿真模型的时候&#xff0c;同时开启gazebo和rviz的时候遇到的问题 ubuntu20.04 ros noetic 开启gazebo并启动rviz时&#xff0c;rviz终端会一直产生一个警告&#xff1a;TF_REPEATED_DATA ignoring data with redundant timestamp for frame left…

ProtoBuf(Google Protocol Buffers)—— repeated 修饰字段注意点(packed修饰)

ProtoBuf—— &#xff08;repeated 修饰 &#xff09; repeated1、定义2、使用事项 参考 repeated 1、定义 repeated类型相当于STL的vector&#xff0c;可以用来存放N个相同类型的内容。proto2 中还有 repeated 可选&#xff0c;在proto3 中则已经被摒弃并且默认格式为pack。…

Responder

在hack the box 最后一个sql注入题时&#xff0c;有这个工具的使用&#xff0c;之前没有接触过&#xff0c;看write up上是需要利用两个IP地址&#xff0c;似乎与内网渗透有关&#xff0c;马上查找相关资料&#xff0c;看到底是个什么东东。 什么是Responder 在攻防领域&…

Reverse

IDA中文不显示解决 参考链接 VScode中文乱码解决参考链接 (1 ~ 10攻防世界)(11~20为Buu&#xff0c;近乎为shift F12查找字符串) 1. xxxorrr 题目链接 题目WP 心得&#xff1a;可能会有其它隐藏函数对所需结果进行操作 2. SignIn RSA算法介绍 c是密文&#xff0c;m是明文…

java中@Repeatable的理解

Repeatable是jdk8中新增的注解&#xff0c;使用如Spring中的ComponentScan注解。在没有Repeatable注解的的注解中&#xff0c;在同一个地方使用相同的注解会报错&#xff0c;有了此元注解注解的注解&#xff0c;就可以在同一个地方使用相同的注解。其官方文档如下 The annotati…