买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】用于ARMv7处理器仿真系统内的中断嵌套的实现系统及方法_杭州电子科技大学_202110642935.X 

申请/专利权人:杭州电子科技大学

申请日:2021-06-09

公开(公告)日:2024-03-26

公开(公告)号:CN113377511B

主分类号:G06F9/48

分类号:G06F9/48;G06F9/455

优先权:

专利状态码:有效-授权

法律状态:2024.03.26#授权;2021.09.28#实质审查的生效;2021.09.10#公开

摘要:本发明属于ARMv7处理器仿真系统领域,公开了一种用于ARMv7处理器仿真系统内的中断嵌套的实现系统及方法,包括中断信号获取解析模块、程序状态寄存器获取分割模块、中断信号判断设置模块、寄存器信息保护模块、处理器模式更新模块、中断服务程序执行模块和中断返回模块。本发明在中断处理过程中多重中断的嵌套,即支持高优先级的中断打断当前低优先级中断的执行,当高优先级中断执行完成之后,能够返回低优先级的中断服务程序继续执行,在中断处理过程中,能够正确地保护中断发生前的中断现场的各个寄存器信息,在中断完成之后,能够正确地恢复中断发生前中断现场的各个寄存器信息,并且继续按指令的顺序执行ARMv7指令的仿真程序。

主权项:1.一种用于ARMv7处理器仿真系统内的中断嵌套的实现系统,包括中断信号获取解析模块、程序状态寄存器获取分割模块、中断信号判断设置模块、寄存器信息保护模块、处理器模式更新模块、中断服务程序执行模块和中断返回模块,其特征在于,所述中断信号获取解析模块是连接前端系统的接口,前端系统可以通过中断信号获取解析模块发送中断控制信号,向ARMv7处理器仿真系统发起外部中断,并且可以对其发送的中断请求信号进行解析,将中断请求信号分别设置为高优先级中断和低优先级中断两种中断的请求标志;所述中断信号获取解析模块包括如下执行步骤:步骤201,激活传输中断信号的传输接口,使其能够进行中断信号的传输;步骤202,从传输接口接收从前端系统发送而来的中断请求的全部有关内容;步骤203,只用一个变量结构保存中断请求的主体内容部分,而不保存其余的请求头部的数据部分;步骤204,将请求主体内容部分的第一字段划分出来作为高优先级中断的请求标志,即fiq中断的请求标志;步骤205,将请求主体内容部分的第二字段划分出来作为低优先级中断的请求标志,级riq中断的请求标志;所述程序状态寄存器获取分割模块可以获取预先设置的寄存器堆结构中的程序状态寄存器的数据,并进行数据的转换及各字段的分割,从而获得irq中断禁止位、fiq中断禁止位和工作模式位三种标志;所述程序状态寄存器获取分割模块包括如下执行步骤:步骤301,获取预先设置的寄存器堆结构中的第五字段,将其作为程序状态寄存器来使用;步骤302,将程序状态寄存器中的数据由十进制数据转换成为二进制数据;步骤303,将转换得到的二进制数据进行位数的补齐,即将不满32位的数据在头部补0,使其补足32位的长度;步骤304,取步骤303中已补足32位长度的二进制数据从头部开始的第24位作为低优先级中断的中断禁止标志,即irq中断的中断禁止标志I;步骤305,取步骤303中已补足32位长度的二进制数据从头部开始的第25位作为高优先级中断的中断禁止标志,即fiq中断的中断禁止标志F;步骤306,取步骤303中已补足32位长度的二进制数据从头部开始的第27位到第31位作为当前的工作模式标志M;所述中断信号判断设置模块对高优先级中断和低优先级中断两种中断的请求标志的有效性进行判断,并进行对应的当前中断请求的中断类型的设置;所述中断信号判断设置模块包括如下执行步骤:步骤401,获取高优先级中断的请求标志,即获取fiq中断的请求标志;步骤402,获取低优先级中断的请求标志,即获取riq中断的请求标志;步骤403,判断当前高优先级中断的请求标志是否有效,若有效,则进入步骤404处理,反之则进入步骤405进行处理;步骤404,将本次中断的中断请求的类型设置为fiq中断请求模式;步骤405,判断当前低优先级中断的请求标志是否有效,若有效,则进入步骤406处理,反之则进入步骤407进行处理;步骤406,将本次中断的中断请求的类型设置为irq中断请求模式;步骤407,高优先级中断和低优先级中断的请求标志都为无效状态,无需进行中断模式的设置;所述寄存器信息保护模块是根据当前中断请求的中断类型,进行不同中断模式下当前中断现场的断点地址的保存以及各个寄存器信息的保存,并将对应中断服务程序的入口地址置入指令计数器;所述寄存器信息保护模块包括如下执行步骤:步骤501,判断当前是否处于fiq中断模式或者irq中断模式两种中断处理模式中的任意一种,若是,则进入步骤502进行处理,反之,则进入步骤512进行处理;步骤502,将预先设置的指令计数器当前状态下的数据保存的预先设置的寄存器堆结构的第四字段,即保存到暂存器F中;步骤503,判断当前是否处理fiq中断模式,若是,则进入步骤504进行处理,反之,则进入步骤508进行处理;步骤504,当前是fiq中断模式,将预先设置的寄存器堆结构的第四字段的数据保存到当前fiq中断模式下的寄存器堆结构中的第七字段,即保存到fiq中断模式的连接寄存器LR中;步骤505,保存预先设置的程序状态寄存器的数值到预先设置的寄存器堆结构的第十字段,即保存到fiq中断模式的程序状态保存寄存器中;步骤506,根据当前的fiq中断模式的状态寄存器更新要求,更新预先设置的程序状态寄存器中数值的尾部的八位二进制数值,其他各位不做改变;步骤507,根据当前的fiq中断模式,将对应的fiq中断模式的中断服务程序的入口地址置入预先设置的指令计数器中;步骤508,当前是irq中断模式,将预先设置的寄存器堆结构的第四字段的数据保存到当前fiq中断模式下的寄存器堆结构中的第二字段,即保存到irq中断模式的连接寄存器LR中;步骤509,保存预先设置的程序状态寄存器的数值到预先设置的寄存器堆结构的第九字段,即保存到irq中断模式的程序状态保存寄存器中;步骤510,根据当前的irq中断模式的状态寄存器更新要求,更新预先设置的程序状态寄存器中数值的尾部的八位二进制数值,其他各位不做改变;步骤511,根据当前的irq中断模式,将对应的irq中断模式的中断服务程序的入口地址置入预先设置的指令计数器中;步骤512,当前不为中断模式,对预先设置的寄存器堆各字段不作处理;所述处理器模式更新模块根据中断未发生前的工作,将堆栈指针保存到对应的不同的寄存器中;并且根据当前的中断类型进行对应的工作模式的更新,并根据更新后的工作模式,将主堆栈指针保存到对应的不同模式下的寄存器中;所述处理器模式更新模块包括如下执行步骤:步骤601,获取原始的处理器的工作模式位M;步骤602,根据工作模式位M判断原始工作模式是否处于用户工作模式,若是,则进入步骤604进行处理,反之,则进入步骤611进行处理;步骤603,根据工作模式位M判断原始工作模式是否处于用户工作模式,若是,则进入步骤604进行处理,反之,则进入步骤603进行处理;步骤604,原始模式是用户模式,保存预先设置的堆栈指针SP的数值到预先设置的寄存器堆结构第八字段,即保存到进程堆栈指针PSP中;步骤605,原始模式是irq中断模式,保存预先设置的堆栈指针SP的数值到预先设置的寄存器堆结构第七字段,即保存到主堆栈指针MSP中;步骤606,根据当前程序状态寄存器的第27位到第31位的数值来更新当前的工作模式标志M;步骤607,获取预先设置的寄存器堆结构的第七字段作为主堆栈指针的值;步骤608,根据更新后的处理器的工作模式为M进行判断,判断当前工作模式是否处于irq中断模式,若是,则进入步骤609进行处理,反之,则进入步骤610进行处理;步骤609,更新后的模式后是irq中断模式,保存主堆栈指针到irq中断模式下的寄存器堆结构的第六字段,即保存到irq中断模式下的堆栈指针中;步骤610,更新后的模式后是fiq中断模式,保存主堆栈指针到fiq中断模式下的寄存器堆结构的第二字段,即保存到fiq中断模式下的堆栈指针中;步骤611,原始模式不为中断模式,对预先设置的寄存器堆各字段不作处理;所述中断服务程序执行模块执行对应的中断的中断服务程序,并且包含中断返回指令,以便结束中断的执行后可以恢复中断;所述中断服务程序执行模块包括如下执行步骤:步骤701,根据当前的中断入口地址分配进入不同的中断服务程序进行执行,若为fiq中断,则进入步骤702进行处理,反之进入步骤706处理;步骤702,当前执行的是fiq中断服务程序,保存预先设置的寄存器堆结构的0号寄存器和1号寄存器进入系统堆栈中;步骤703,将预先设置的寄存器堆结构的0号寄存器的内容置入预先设置的寄存器堆结构的1号寄存器中;步骤704,预先设置的寄存器堆结构的0号寄存器的内容与预先设置的寄存器堆结构的1号寄存器的内容相减,将相减的结果保存到0号寄存器中;步骤705,将系统堆栈中对应的数据重新赋给预先设置的寄存器堆结构的0号寄存器和与预先设置的寄存器堆结构的1号寄存器中,中断服务程序执行完毕,可以进行中断返回;步骤706,当前执行的是fiq中断服务程序,将预先设置的寄存器堆结构的0号寄存器的内容置入预先设置的寄存器堆结构的3号寄存器中;步骤707,将预先设置的指令寄存器中的内容置入寄存器堆结构的连接寄存器中,中断服务程序执行完毕,可以进行中断返回;所述中断返回模块用于中断结束后,根据所发生的中断类型,进行对应的中断现场的恢复,包括中断现场的断点地址的恢复和各个寄存器信息的恢复;所述中断返回模块包括如下执行步骤:步骤801,判断当前的中断返回指令是否为fiq中断返回指令,若是,则进入步骤802进行处理,反之,则进入步骤806进行处理;步骤802,当前中断返回指令为fiq中断返回指令,获取fiq中断模式下的寄存器堆结构的第六字段作为主堆栈指针的值,即将fiq中断模式下的堆栈指针的值作为主堆栈指针的值;步骤803,获取fiq中断模式下的寄存器堆结构的第七字段作为指令计数器的值,即将fiq中断模式下连接寄存器的值作为指令计数器的值;步骤804,获取预先设置的寄存器堆结构的第十字段作为程序状态寄存器的值,即将fiq中断模式下的程序状态保存寄存器的值作为程序状态寄存器的值;步骤805,获取预先设置的寄存器堆结构的第八字段作为原堆栈指针的值,即将进程堆栈指针的值作为原堆栈指针的值;步骤806,当前中断返回指令为irq中断返回指令,获取irq中断模式下的寄存器堆结构的第一字段作为主堆栈指针的值,即将irq中断模式下的堆栈指针的值作为主堆栈指针的值;步骤807,获取irq中断模式下的寄存器堆结构的第二字段作为指令计数器的值,即将irq中断模式下连接寄存器的值作为指令计数器的值;步骤808,获取预先设置的寄存器堆结构的第九字段作为程序状态寄存器的值,即将irq中断模式下的程序状态保存寄存器的值作为程序状态寄存器的值;步骤809,获取预先设置的寄存器堆结构的第八字段作为原堆栈指针的值,即将进程堆栈指针的值作为原堆栈指针的值。

全文数据:

权利要求:

百度查询: 杭州电子科技大学 用于ARMv7处理器仿真系统内的中断嵌套的实现系统及方法

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。