CN106959931A - 实现中断控制器组件的方法及*** - Google Patents
实现中断控制器组件的方法及*** Download PDFInfo
- Publication number
- CN106959931A CN106959931A CN201710149992.8A CN201710149992A CN106959931A CN 106959931 A CN106959931 A CN 106959931A CN 201710149992 A CN201710149992 A CN 201710149992A CN 106959931 A CN106959931 A CN 106959931A
- Authority
- CN
- China
- Prior art keywords
- interrupt
- register
- show
- interruption
- addr
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/20—Handling requests for interconnection or transfer for access to input/output bus
- G06F13/24—Handling requests for interconnection or transfer for access to input/output bus using interrupt
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Bus Control (AREA)
Abstract
本发明提供了一种实现中断控制器组件的方法及***,该方法包括先进中断控制器初始化接口的实现:先进中断控制器初始接口的功能是为AIC设备申请内存空间,用来保存设备的状态信息,并初始化AIC设备的状态信息。本发明的有益效果是:本发明可以广泛应用于航空、航天、武器装备、汽车、机器人、工业控制等嵌入式***开发领域,提升这些行业的劳动生产效率、降低成本、增强产品的竞争能力。
Description
技术领域
本发明涉及虚拟验证***,尤其涉及实现中断控制器组件的方法及***。
背景技术
虚拟验证***是能够对嵌入式硬件***进行完整模拟的软件***。用户可以在该***上模拟运行嵌入式软件,无需相应的硬件即可对嵌入式软件进行测试与调试。通过使用本***,用户不仅可以极大地缩短嵌入式软件研制周期,而且能够避免高昂的辅助测试硬件研制费用、极大地降低***成本。
虚拟验证***的一个核心特点是通用性,即***可以根据测试所需硬件环境的不同,进行通用配置以满足需求,***提供了两个组件库:1)虚拟处理器组件库;2)虚拟设备组件库。用户可以根据硬件需求,自主在组件库中选取虚拟组件,软定制板级硬件仿真环境。如图1所示,各虚拟设备组件组成设备组件库,供用户挑选、配置并最终生成虚拟验证平台实例。在虚拟设备组件库中,为了涵盖所有需仿真设备的特性,虚拟设备组件可分为4个类别:1)同步虚拟设备(如RAM/ROM、TIMER虚拟组件等);2)异步虚拟通信设备组件(如RS422、SJA-1000虚拟组件等);3)中断控制器组件;4)具有数据信号连接关系的虚拟设备组件(如GPIO、AD/DA虚拟组件等)。
上述每种组件均有其特定的虚拟仿真实现方法,每种组件对虚拟验证***相关模块的依赖也不同。
发明内容
本发明提供了一种实现中断控制器组件的方法,包括先进中断控制器初始化接口的实现:先进中断控制器初始接口的功能是为AIC设备申请内存空间,用来保存设备的状态信息,并初始化AIC设备的状态信息。
作为本发明的进一步改进,AIC设备所需要申请的内存空间的大小为568个字节,其中前304个字节用于模拟各个寄存器,后面的字节用来模拟AIC设备的硬件栈。
作为本发明的进一步改进,包括AIC复位接口的实现:AIC设备的复位接口的功能是将AIC设备的所有寄存器信息复位为默认值,并将中断栈的栈顶指向栈底。
作为本发明的进一步改进,中断控制器组件读接口的实现:
获取偏移地址;
若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的进行写操作不会引起中断控制器状态的改变,因此直接将数据总线上的数据写入相应的寄存器即可;
若addr在256到284中,则表明其要访问的寄存器为IRQ向量寄存器,FIQ向量寄存器,中断状态,挂起,屏蔽和内核中断状态寄存器,以及两个保留的地址,由此这些寄存器是只读的,因此不能够对他们进行些操作,因此直接返回0即可,表明写失败;
若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线,否则将中断源向量寄存器1的值写入数据总线;
若addr在274到286中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr在290到300之间,则表明他们是中断使能,中断禁止,中断标志设置,中断标志清除以及中断结束命令寄存器,这些寄存器都是只写寄存器,不能对他们进行读操作,因此只写返回0表明读失败即可;
若addr为304,则表明他是未向量寄存器,对此寄存器进行读操作不会改变中断控制器的状态,因此直接将此寄存器的值写入数据总线即可。
作为本发明的进一步改进,中断控制器组件写接口的实现:
获取偏移地址;
若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的读操作不会引发状态的改变,因此直接返回相应寄存器的内容即可;
若addr为256则表明其要访问的寄存器为IRQ向量寄存器,首先检查中断挂起寄存器是否有中断,若没有则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线并返回,否则检查中断挂起寄存器,找出比当前中断优先级高的且未被屏蔽的中断号,将其优先级压入中断栈,修改中断状态寄存器,并将对应此中断号的中断源向量寄存器的值写入数据总线;
若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线,否则将中断源向量寄存器1的值写入数据总线;
若addr在274到284中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr为288,则表明他是中断使能寄存器,对此寄存器的操作只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行或操作即可,并将结果存入中断屏蔽寄存器;
若addr为292,则表明他是中断禁止寄存器,对此寄存器的操作同样只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行与操作即可,并将结果存入中断屏蔽寄存器;
若addr为296,则表明他是中断标志设置寄存器,对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志设置寄存器的响应位为被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为1;
在将中断挂起寄存器更新后,若中断挂起寄存器的0位为1,则发出FIQ中断,否则遍历中断挂起寄存器,获取优先级最高的中断的中断号,若其优先级比栈顶的当前优先级高,则此优先级压栈,并向cpu发出IRQ中断请求;
若addr为300,则表明他是中断标志清除寄存器,对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志清除寄存器的相应位未被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为0;
若addr为304,则表明他是中断结束命令寄存器,对此寄存器的操作只会影响到中断栈的状态,即将栈顶的优先级弹出,将中断状态恢复到上一个状态;
若addr为308,则表明他是伪向量寄存器,对他的写操作不会更改中断控制器的状态。
本发明还提供了一种实现中断控制器组件的***,包括先进中断控制器初始化接口的实现模块:先进中断控制器初始接口的功能是为AIC设备申请内存空间,用来保存设备的状态信息,并初始化AIC设备的状态信息。
作为本发明的进一步改进,AIC设备所需要申请的内存空间的大小为568个字节,其中前304个字节用于模拟各个寄存器,后面的字节用来模拟AIC设备的硬件栈。
作为本发明的进一步改进,包括AIC复位接口的实现模块:AIC设备的复位接口的功能是将AIC设备的所有寄存器信息复位为默认值,并将中断栈的栈顶指向栈底。
作为本发明的进一步改进,中断控制器组件读接口的实现模块:
获取偏移地址;
若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的进行写操作不会引起中断控制器状态的改变,因此直接将数据总线上的数据写入相应的寄存器即可;
若addr在256到284中,则表明其要访问的寄存器为IRQ向量寄存器,FIQ向量寄存器,中断状态,挂起,屏蔽和内核中断状态寄存器,以及两个保留的地址,由此这些寄存器是只读的,因此不能够对他们进行些操作,因此直接返回0即可,表明写失败;
若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线,否则将中断源向量寄存器1的值写入数据总线;
若addr在274到286中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr在290到300之间,则表明他们是中断使能,中断禁止,中断标志设置,中断标志清除以及中断结束命令寄存器,这些寄存器都是只写寄存器,不能对他们进行读操作,因此只写返回0表明读失败即可;
若addr为304,则表明他是未向量寄存器,对此寄存器进行读操作不会改变中断控制器的状态,因此直接将此寄存器的值写入数据总线即可。
作为本发明的进一步改进,中断控制器组件写接口的实现模块:
获取偏移地址;
若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的读操作不会引发状态的改变,因此直接返回相应寄存器的内容即可;
若addr为256则表明其要访问的寄存器为IRQ向量寄存器,首先检查中断挂起寄存器是否有中断,若没有则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线并返回,否则检查中断挂起寄存器,找出比当前中断优先级高的且未被屏蔽的中断号,将其优先级压入中断栈,修改中断状态寄存器,并将对应此中断号的中断源向量寄存器的值写入数据总线;
若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线,否则将中断源向量寄存器1的值写入数据总线;
若addr在274到284中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr在274到284中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr为292,则表明他是中断禁止寄存器,对此寄存器的操作同样只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行与操作即可,并将结果存入中断屏蔽寄存器;
若addr为296,则表明他是中断标志设置寄存器,对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志设置寄存器的响应位为被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为1;
在将中断挂起寄存器更新后,若中断挂起寄存器的0位为1,则发出FIQ中断,否则遍历中断挂起寄存器,获取优先级最高的中断的中断号,若其优先级比栈顶的当前优先级高,则此优先级压栈,并向cpu发出IRQ中断请求;
若addr为300,则表明他是中断标志清除寄存器,对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志清除寄存器的相应位未被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为0;
若addr为304,则表明他是中断结束命令寄存器,对此寄存器的操作只会影响到中断栈的状态,即将栈顶的优先级弹出,将中断状态恢复到上一个状态;
若addr为308,则表明他是伪向量寄存器,对他的写操作不会更改中断控制器的状态。
本发明的有益效果是:本发明可以广泛应用于航空、航天、武器装备、汽车、机器人、工业控制等嵌入式***开发领域,提升这些行业的劳动生产效率、降低成本、增强产品的竞争能力。
附图说明
图1是各类型组件组成的组件库。
图2是中断设备级联管理图。
图3是中断控制器的设备驱动块链表。
图4是中断控制器设备组件结构图。
具体实施方式
下面对本发明的技术内容进行详细介绍和说明:
一.中断控制器组件的特征与***交互:
中断控制器在真实硬件环境中存在广泛,基本每种需求都需要中断控制器。在虚拟验证***中,虚拟中断控制器设备组件也是十分重要的。它与同步/异步虚拟设备组件不同,虽然都是靠着虚拟处理驱动执行,并接受处理器读写访问,但是中断控制器同时管理着所有其他设备组件的中断信息,一方面与虚拟处理器交互,一方面采集管理所有的设备中断信息,它的自身结构与虚拟验证***是紧耦合关系。因此它不属于哪一类设备,而是具有独立特征的一种设备组件。
在虚拟验证***中,所有的组件设备在向***进行注册的过程汇总,***会为每个带有中断源的设备建立一个设备驱动块,对其进行中断相关的管理,整个***的中断管理则是在***维护的设备驱动块链表与虚拟中断控制器设备组件的配合下完成的。
在***实例配置生成过程中,***会根据每个设备的中断源信息与中断连接信息为其初始化设备驱动块,设备驱动块的连接关系则代表着设备与中断控制器之间的连接关系。一个中断级联的例子如下图2所示。
如图2所示,虚拟设备5的中断信号连接至中断控制器2,中断控制器2作为设备,与虚拟设备3和4一同连接至中断控制器1,中断控制器1与处理器直接相连。
在每个虚拟中断控制器设备的实现中,均需要维护自己的中断向量表,为连接到自身的虚拟设备维护中断源信息,在每次驱动设备执行时,则查询所属设备的中断产生情况,实时的更新中断向量表,并且一级一级的向上汇报中断信息。最后由直接与处理器连接的中断控制器向处理器产生中断信号,虚拟处理器则根据自身的异常向量表来响应中断消息。
这种情况下,对于每一个虚拟中断控制器设备组件,它并不能完成***整体的中断管理,因此需要由***的设备驱动块链表,并对中断信号产生与响应进行控制。***维护的设备驱动块链表如图3所示。
在图3中DriveLSTIntCtrIDev为中断控制器的设备驱动块,DriveISTDev为各中断源设备的设备驱动块,gdbIntSVec为每个中断控制器的中断向量表。通过对这三种数据结构的维护,即可对***全局的中断信息进行管理。并且,在这种机制的支持下,对虚拟处理器组件的实现提供了统一的中断支持,每种体系结构的处理器均可采取这种方式完成对中断的响应。涉及的数据结构定义如下:
二.满足虚拟验证***约束的中断控制器结构
前面介绍了在虚拟验证***中,为什么中断控制器组件不同于其他的设备组件,因为中断控制器组件与***之间通过相关数据结构紧耦合,共同管理着所有的中断源设备组件的中断信息,并担当着采集中断信息、传递中断信息的责任,因此虚拟中断控制器设备组件的实现方法与其他设备组件是不同的。
下面将详细介绍满足虚拟验证***通用结构的中断控制器设备组件结构,此处的中断控制器设备组件可描述为一个具有8优先级,可单独屏蔽的向量中断控制器,也可称为先进中断控制器AIC(Advanced Interrupt Controller)。其接口方框图如图4所示。
AIC中断源:
中断控制器AIC与虚拟处理器核的NFIQ和NIRQ相连。NFIQ为快速中断请求,而NIRQ则可以由片内***及外部中断请求线IRQ0~IRQ2产生。8优先级中断编码器允许用户定义不同NIRQ中断源的优先级。内部中断源可编程为电平敏感中断或边沿触发中断。外部中断则可以编程为上升沿、下降沿触发和高电平、低电平中断敏感。
AIC用户编程接口:
中断控制器AIC的用户编程接口如下表1所示:
表1 AIC用户编程接口
1)AIC_IVR:IRQ向量寄存器,IRQV的内容为当前中断对应的AIC_SVR的值。中断源向量寄存器(1~31)使用读中断向量寄存器时的当前中断序号索引。如果没有中断,则IRQV的值为0。当前中断值的是在读取AIC_IVR时具有最高优先级别的已发生中断。从AIC_IVR读到的值就是当前中断保存于中断源向量寄存器(AIC_SVR)的入口地址。每个中断源都有自己AIC_SVR。为了利用***的硬件中断向量功能,用户在***初始化的时候必须将各个中断处理入口地址保存到对应的AIC_SVR之中。
2)AIC_SVR:中断源向量寄存器,此寄存器用于保存中断程序入口址。
3)AIC_EOICR:中断结束命令寄存器,中断服务程序用此寄存器指示中断处理结束。可以对其写入任何值,只要有写操作就可以。
4)AIC_IECR:中断使能命令寄存器,控制中断是否使能。
5)AIC_IDCR:中断禁止命令寄存器。
其他寄存器不再赘述。
中断优先级控制:
NIRQ由8优先级编码器控制。每个中断源都有一个软件可编程的中断级别,级别7为最高,级别0为最低。如果AIC同时接受多个中断,则具有最高优先级的中断首先得到服务。如果中断级别相同,则中断源编号低的先得到服务。
当中断优先级指的是读取AIC_IVR时的当前中断的优先级。当一个中断存在时,是否有更高优先级的中断发生,取决于处理器是否已经读取了AIC_IVR。***有两种应对方法:
1)如果已经施加了NIRQ,而AIC_IVR还没有被处理器读取,则处理器将读取AIC_IVR中的新的更高优先级中断的处理程序入口地址,并更新当前中断级别;
2)如果处理器已经读取了AIC_IVR,之后才再施加NIRQ,则处理器可以处理中断嵌套,并将再一次读取AIC_IVR,读出新的,更高优先级中断处理程序入口地址,然后处理这个新的,更高优先级的中断。同时当前中断级别压入先入后出栈,更新为更高优先级中断的中断级别。
中断结束后,应写中断结束命令寄存器(AIC_EOICR),当前中断级别被存储于堆栈内前中断级别所更新。因此,当更高优先级中断结束后,AIC回到前的状态,此状态对应被更高优先级中断所中断的低优先级中断。
三.虚拟验证***的中断控制器设备组件实现方法:
AIC共有78个寄存器,每个寄存器占有4个字节。因此AIC设备的内存所指向的地址空间至少要有312个字节大小。另外加上一个中断栈,其大小为256个字节,加上栈顶标识,共257个字节,因此AIC的mm所需的内存空间大小为312+257共569个字节。其映射如表2所示。
表2 AIC设备内存空间映射表
AIC初始化接口的实现:
AIC设备初始接口的功能主要是为AIC设备申请内存空间,用来保存设备的状态信息,并初始化AIC设备的状态信息。由上一节可知,AIC设备所需要申请的内存空间的大小为568个字节,其中前304个字节用于模拟各个寄存器,后面的字节用来模拟AIC设备的硬件栈。
AIC设备的初始化接口内部逻辑如下:
AIC复位接口的实现:
AIC设备的复位接口的功能主要是将AIC设备的所有寄存器信息复位为默认值,并将中断栈的栈顶指向栈底,其内部逻辑如下:
Int AIC_Reset(Bus*Bus_Ctr,unsigned char i)
{
将所有寄存器置为默认值;
将栈顶标志置为0,使其指向栈底;
返回;
}
设备组件读接口的实现:
设备组件读接口定义如下:
Int AIC_Read_Word(Bus*Bus_Ctr,unsigned char i)
内部逻辑如下:
1)获取偏移地址
addr=Bus_Ctr->addr-Bus_Ctr->Device_Table[i].start_addr;
2)若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的进行写操作不会引起中断控制器状态的改变,因此直接将数据总线上的数据写入相应的寄存器即可
Bus_Ctr->data=((unsigned long*)&(Bus_Ctr->Device_Table[i].mm[address]));
3)若addr在256到284中,则表明其要访问的寄存器为IRQ向量寄存器,FIQ向量寄存器,中断状态,挂起,屏蔽和内核中断状态寄存器,以及两个保留的地址,由此这些寄存器是只读的,因此不能够对他们进行些操作,因此直接返回0即可,表明写失败。
4)若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线。否则将中断源向量寄存器1的值写入数据总线。
5)若addr在274到286中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可。
Bus_Ctr->data=((unsigned long*)&(Bus_Ctr->Device_Table[i].mm[address]));
6)若addr在290到300之间,则表明他们是中断使能,中断禁止,中断标志设置,中断标志清除以及中断结束命令寄存器。这些寄存器都是只写寄存器,不能对他们进行读操作,因此只写返回0表明读失败即可。
7)若addr为304,则表明他是未向量寄存器,对此寄存器进行读操作不会改变中断控制器的状态,因此直接将此寄存器的值写入数据总线即可。
Bus_Ctr->data=((unsigned long*)&(Bus_Ctr->Device_Table[i].mm[address]));
8)返回。
设备组件写接口的实现:
设备组件读接口定义如下:
Int AIC_Write_Word(Bus*Bus_Ctr,unsigned char i)
内部逻辑如下:
获取偏移地址
addr=Bus_Ctr->addr-Bus_Ctr->Device_Table[i].start_addr;
2)若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的读操作不会引发状态的改变,因此直接返回相应寄存器的内容即可。
*((uns ignedlong*)&(Bus_Ctr->Device_Table[i].mm[address]))=Bus_Ctr->data;
3)若addr为256则表明其要访问的寄存器为IRQ向量寄存器,首先检查中断挂起寄存器是否有中断,若没有则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线并返回,否则检查中断挂起寄存器,找出比当前中断优先级高的且未被屏蔽的中断号,将其优先级压入中断栈,修改中断状态寄存器,并将对应此中断号的中断源向量寄存器的值写入数据总线。
4)若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线。否则将中断源向量寄存器1的值写入数据总线。
5)若addr在274到284中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可。
*((unsignedlong*)&(Bus_Ctr->Device_Table[i].mm[address]))=Bus_Ctr->data;
6)若addr为288,则表明他是中断使能寄存器,对此寄存器的操作只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行或操作即可,并将结果存入中断屏蔽寄存器。
*(unsigned long*)(&Bus_Ctr->Devic_Table[i].mm[0x110])=*(unsignedlong*)(&Bus_Ctr->Devic_Table[i].mm[0x110])|Bus_Ctr->data。
7)若addr为292,则表明他是中断禁止寄存器,对此寄存器的操作同样只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行与操作即可,并将结果存入中断屏蔽寄存器。
*(unsigned long*)(&Bus_Ctr->Devic_Table[i].mm[0x110])=*(unsignedlong*)(&Bus_Ctr->Devic_Table[i].mm[0x110])&(!Bus_Ctr->data)。
8)若addr为296,则表明他是中断标志设置寄存器。对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志设置寄存器的响应位为被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为1。
9)在将中断挂起寄存器更新后。若中断挂起寄存器的0位为1,则发出FIQ中断,否则遍历中断挂起寄存器,获取优先级最高的中断的中断号,若其优先级比栈顶的当前优先级高,则此优先级压栈,并向cpu发出IRQ中断请求。
10)若addr为300,则表明他是中断标志清除寄存器。对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志清除寄存器的相应位未被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为0
11)若addr为304,则表明他是中断结束命令寄存器,对此寄存器的操作只会影响到中断栈的状态,即将栈顶的优先级弹出,将中断状态恢复到上一个状态。
if(Bus_Ctr->Devic_Table[i].mm[0x13d]!=0)//若栈不空
Bus_Ctr->Devic_Table[i].mm[0x13d]--;//将栈标志减1
12)若addr为308,则表明他是伪向量寄存器,对他的写操作不会更改中断控制器的状态。
*((unsignedlong*)&(Bus_Ctr->Device_Table[i].mm[address]))=Bus_Ctr->data;
13)返回。
本发明可以广泛应用于航空、航天、武器装备、汽车、机器人、工业控制等嵌入式***开发领域,提升这些行业的劳动生产效率、降低成本、增强产品的竞争能力。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (10)
1.一种实现中断控制器组件的方法,其特征在于,包括先进中断控制器初始化接口的实现:先进中断控制器初始接口的功能是为AIC设备申请内存空间,用来保存设备的状态信息,并初始化AIC设备的状态信息。
2.根据权利要求1所述的方法,其特征在于,AIC设备所需要申请的内存空间的大小为568个字节,其中前304个字节用于模拟各个寄存器,后面的字节用来模拟AIC设备的硬件栈。
3.根据权利要求1所述的方法,其特征在于,包括AIC复位接口的实现:AIC设备的复位接口的功能是将AIC设备的所有寄存器信息复位为默认值,并将中断栈的栈顶指向栈底。
4.根据权利要求1所述的方法,其特征在于,中断控制器组件读接口的实现:
获取偏移地址;
若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的进行写操作不会引起中断控制器状态的改变,因此直接将数据总线上的数据写入相应的寄存器即可;
若addr在256到284中,则表明其要访问的寄存器为IRQ向量寄存器,FIQ向量寄存器,中断状态,挂起,屏蔽和内核中断状态寄存器,以及两个保留的地址,由此这些寄存器是只读的,因此不能够对他们进行些操作,因此直接返回0即可,表明写失败;
若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线,否则将中断源向量寄存器1的值写入数据总线;
若addr在274到286中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr在290到300之间,则表明他们是中断使能,中断禁止,中断标志设置,中断标志清除以及中断结束命令寄存器,这些寄存器都是只写寄存器,不能对他们进行读操作,因此只写返回0表明读失败即可;
若addr为304,则表明他是未向量寄存器,对此寄存器进行读操作不会改变中断控制器的状态,因此直接将此寄存器的值写入数据总线即可。
5.根据权利要求1所述的方法,其特征在于,中断控制器组件写接口的实现:
获取偏移地址;
若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的读操作不会引发状态的改变,因此直接返回相应寄存器的内容即可;
若addr为256则表明其要访问的寄存器为IRQ向量寄存器,首先检查中断挂起寄存器是否有中断,若没有则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线并返回,否则检查中断挂起寄存器,找出比当前中断优先级高的且未被屏蔽的中断号,将其优先级压入中断栈,修改中断状态寄存器,并将对应此中断号的中断源向量寄存器的值写入数据总线;
若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线,否则将中断源向量寄存器1的值写入数据总线;
若addr在274到284中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr为288,则表明他是中断使能寄存器,对此寄存器的操作只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行或操作即可,并将结果存入中断屏蔽寄存器;
若addr为292,则表明他是中断禁止寄存器,对此寄存器的操作同样只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行与操作即可,并将结果存入中断屏蔽寄存器;
若addr为296,则表明他是中断标志设置寄存器,对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志设置寄存器的响应位为被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为1;
在将中断挂起寄存器更新后,若中断挂起寄存器的0位为1,则发出FIQ中断,否则遍历中断挂起寄存器,获取优先级最高的中断的中断号,若其优先级比栈顶的当前优先级高,则此优先级压栈,并向cpu发出IRQ中断请求;
若addr为300,则表明他是中断标志清除寄存器,对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志清除寄存器的相应位未被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为0;
若addr为304,则表明他是中断结束命令寄存器,对此寄存器的操作只会影响到中断栈的状态,即将栈顶的优先级弹出,将中断状态恢复到上一个状态;
若addr为308,则表明他是伪向量寄存器,对他的写操作不会更改中断控制器的状态。
6.一种实现中断控制器组件的***,其特征在于,包括先进中断控制器初始化接口的实现模块:先进中断控制器初始接口的功能是为AIC设备申请内存空间,用来保存设备的状态信息,并初始化AIC设备的状态信息。
7.根据权利要求6所述的***,其特征在于,AIC设备所需要申请的内存空间的大小为568个字节,其中前304个字节用于模拟各个寄存器,后面的字节用来模拟AIC设备的硬件栈。
8.根据权利要求6所述的***,其特征在于,包括AIC复位接口的实现模块:AIC设备的复位接口的功能是将AIC设备的所有寄存器信息复位为默认值,并将中断栈的栈顶指向栈底。
9.根据权利要求6所述的***,其特征在于,中断控制器组件读接口的实现模块:
获取偏移地址;
若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的进行写操作不会引起中断控制器状态的改变,因此直接将数据总线上的数据写入相应的寄存器即可;
若addr在256到284中,则表明其要访问的寄存器为IRQ向量寄存器,FIQ向量寄存器,中断状态,挂起,屏蔽和内核中断状态寄存器,以及两个保留的地址,由此这些寄存器是只读的,因此不能够对他们进行些操作,因此直接返回0即可,表明写失败;
若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线,否则将中断源向量寄存器1的值写入数据总线;
若addr在274到286中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr在290到300之间,则表明他们是中断使能,中断禁止,中断标志设置,中断标志清除以及中断结束命令寄存器,这些寄存器都是只写寄存器,不能对他们进行读操作,因此只写返回0表明读失败即可;
若addr为304,则表明他是未向量寄存器,对此寄存器进行读操作不会改变中断控制器的状态,因此直接将此寄存器的值写入数据总线即可。
10.根据权利要求6所述的***,其特征在于,中断控制器组件写接口的实现模块:
获取偏移地址;
若addr在0到252中,表明其是中断源模式寄存器或中断源向量寄存器,对他们的读操作不会引发状态的改变,因此直接返回相应寄存器的内容即可;
若addr为256则表明其要访问的寄存器为IRQ向量寄存器,首先检查中断挂起寄存器是否有中断,若没有则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线并返回,否则检查中断挂起寄存器,找出比当前中断优先级高的且未被屏蔽的中断号,将其优先级压入中断栈,修改中断状态寄存器,并将对应此中断号的中断源向量寄存器的值写入数据总线;
若addr为270则表明其要访问的寄存器为FIQ向量寄存器,则首先判断中断挂起寄存器是否有中断未激活,若无,则表明发生了伪中断,将伪中断向量寄存器的值写入数据总线,否则将中断源向量寄存器1的值写入数据总线;
若addr在274到284中,则表明他们是中断状态,中断挂起,中断屏蔽,内核中断状态寄存器,对他们的读操作不会改变中断控制器的状态,因此直接将这些寄存器的值写入数据总线即可;
若addr为288,则表明他是中断使能寄存器,对此寄存器的操作只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行或操作即可,并将结果存入中断屏蔽寄存器;
若addr为292,则表明他是中断禁止寄存器,对此寄存器的操作同样只会改变中断屏蔽寄存器的状态,只需将中断屏蔽寄存器和总线上的数据进行与操作即可,并将结果存入中断屏蔽寄存器;
若addr为296,则表明他是中断标志设置寄存器,对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志设置寄存器的响应位为被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为1;
在将中断挂起寄存器更新后,若中断挂起寄存器的0位为1,则发出FIQ中断,否则遍历中断挂起寄存器,获取优先级最高的中断的中断号,若其优先级比栈顶的当前优先级高,则此优先级压栈,并向cpu发出IRQ中断请求;
若addr为300,则表明他是中断标志清除寄存器,对此寄存器的操作只会改变中断挂起寄存器的状态,即若中断标志清除寄存器的相应位未被屏蔽时,且其为1,则将中断挂起寄存器的相应位置为0;
若addr为304,则表明他是中断结束命令寄存器,对此寄存器的操作只会影响到中断栈的状态,即将栈顶的优先级弹出,将中断状态恢复到上一个状态;
若addr为308,则表明他是伪向量寄存器,对他的写操作不会更改中断控制器的状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710149992.8A CN106959931A (zh) | 2017-03-14 | 2017-03-14 | 实现中断控制器组件的方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710149992.8A CN106959931A (zh) | 2017-03-14 | 2017-03-14 | 实现中断控制器组件的方法及*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106959931A true CN106959931A (zh) | 2017-07-18 |
Family
ID=59470463
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710149992.8A Pending CN106959931A (zh) | 2017-03-14 | 2017-03-14 | 实现中断控制器组件的方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106959931A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109902452A (zh) * | 2018-11-01 | 2019-06-18 | 北京旷视科技有限公司 | Fpga授权验证方法、装置及处理设备 |
CN112068945A (zh) * | 2020-09-16 | 2020-12-11 | 厦门势拓御能科技有限公司 | 一种优化嵌入式***中优先级反转方法 |
CN114328300A (zh) * | 2021-12-24 | 2022-04-12 | 深圳航天科技创新研究院 | 一种中断控制器组件的虚拟仿真实现***及其方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6016555A (en) * | 1997-11-19 | 2000-01-18 | Texas Instruments Incorporated | Non-intrusive software breakpoints in a processor instruction execution pipeline |
CN103294544A (zh) * | 2012-02-27 | 2013-09-11 | 展讯通信(上海)有限公司 | 嵌入式***及其中断处理方法与装置 |
US20170024342A1 (en) * | 2015-07-26 | 2017-01-26 | Freescale Semiconductor, Inc. | Interrupt management system for deferring low priority interrupts in real-time system |
-
2017
- 2017-03-14 CN CN201710149992.8A patent/CN106959931A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6016555A (en) * | 1997-11-19 | 2000-01-18 | Texas Instruments Incorporated | Non-intrusive software breakpoints in a processor instruction execution pipeline |
CN103294544A (zh) * | 2012-02-27 | 2013-09-11 | 展讯通信(上海)有限公司 | 嵌入式***及其中断处理方法与装置 |
US20170024342A1 (en) * | 2015-07-26 | 2017-01-26 | Freescale Semiconductor, Inc. | Interrupt management system for deferring low priority interrupts in real-time system |
Non-Patent Citations (3)
Title |
---|
ATMEL CORPORATION: "《AT91 ARM Thumb-based Microcontrollers AT91SAM9261 Preliminary》", 1 December 2006 * |
戴荣新: ""实时低功耗的ARM中断控制器IP的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
李坤: ""基于ARM的嵌入式中断***的软件仿真实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109902452A (zh) * | 2018-11-01 | 2019-06-18 | 北京旷视科技有限公司 | Fpga授权验证方法、装置及处理设备 |
CN112068945A (zh) * | 2020-09-16 | 2020-12-11 | 厦门势拓御能科技有限公司 | 一种优化嵌入式***中优先级反转方法 |
CN112068945B (zh) * | 2020-09-16 | 2024-05-31 | 厦门势拓御能科技有限公司 | 一种优化嵌入式***中优先级反转方法 |
CN114328300A (zh) * | 2021-12-24 | 2022-04-12 | 深圳航天科技创新研究院 | 一种中断控制器组件的虚拟仿真实现***及其方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5579509A (en) | Apparatus and method for verifying compatibility of system components | |
US6629157B1 (en) | System and method for virtualizing the configuration space of PCI devices in a processing system | |
US6662242B2 (en) | Method for PCI IO using PCI device memory mapping in a logically partitioned system | |
KR100786895B1 (ko) | 스토리지 가상화 장치 | |
US8650327B2 (en) | Processor with programmable virtual ports | |
CN106959931A (zh) | 实现中断控制器组件的方法及*** | |
CN105993009A (zh) | 通过非透明桥向PCIe集群中的计算资源传送MSI-X中断的方法和装置 | |
CN109739770A (zh) | 小程序的调试方法及装置 | |
CN106095719A (zh) | 具有功能链接能力的网络功能虚拟化平台 | |
CN102819447A (zh) | 一种用于多根共享***的直接i/o 虚拟化方法和装置 | |
WO2017032112A1 (zh) | 一种与无中央处理器单板通讯的方法及通讯设备 | |
CN105320628A (zh) | 使能单根i/o设备多根共享的适配装置、***及方法 | |
CN109086176A (zh) | 一种基于fio的ssd稳态测试方法、装置、设备及存储介质 | |
CN109446000A (zh) | 多硬盘背板下硬盘顺序识别方法、装置、终端及存储介质 | |
CN106991001A (zh) | 无线电导航识别模拟*** | |
CN106156621A (zh) | 一种检测虚拟机逃逸的方法及装置 | |
CN109446130B (zh) | 一种i/o设备状态信息的获取方法及*** | |
CN103559162A (zh) | 一种定位hub组上的usb设备的方法和主机 | |
EP4148568A1 (en) | Method for realizing live migration, chip, board, and storage medium | |
US20190377612A1 (en) | VCPU Thread Scheduling Method and Apparatus | |
CN110516472A (zh) | 仿真方法和装置 | |
CN116501666B (zh) | 一种PCIe Switch仿真器的实现方法 | |
CN105930945A (zh) | 一种业务处理方法及装置 | |
US10860763B1 (en) | Data routing and multiplexing architecture to support serial links and advanced relocation of emulation models | |
CN111385661B (zh) | 语音控制全屏播放的方法、装置、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170718 |
|
RJ01 | Rejection of invention patent application after publication |