一种51单片机虚拟中断控制器及实现方法与流程

文档序号:21262631发布日期:2020-06-26 22:31阅读:484来源:国知局
一种51单片机虚拟中断控制器及实现方法与流程

本发明涉及电子技术领域,尤其涉及一种51单片机虚拟中断控制器及实现方法。



背景技术:

51单片机是一款古老而经典的产品,有着广泛应用和重要影响。如今在很多高校中,51单片机仍旧是学习简单mcu的主流课程。虽然51单片机的成本不高,但是人手一块开发板还是比较浪费资源的。而当前,除了集成的ide像收费的keil之类,并无一个可以免费使用的中断调试器。



技术实现要素:

本发明提供了一种51单片机虚拟中断控制器,包括虚拟内核、中断控制器模块,所述虚拟内核由verilog语言代码到systemc的模型转换,实现不具备中断功能的systemc的虚拟内核;所述虚拟内核中添加所述中断控制器模块,实现带中断功能的51单片机虚拟内核。

作为本发明的进一步改进,该51单片机虚拟中断控制器还包括中断控制器模块systemc的接口,所述中断控制器模块systemc的接口是指所述中断控制器模块与虚拟内核的接口,通过所述接口可以获知虚拟内核的状态信息,从而判断中断是否使能、是否可以触发、是否已经执行。

本发明还公开了一种实现51单片机虚拟中断控制器的方法,包括如下步骤:

第一步骤:构建不具备中断功能的systemc的虚拟内核;

第二步骤:在虚拟内核中添加中断控制器模块,实现带中断功能的51单片机虚拟内核。

本发明的有益效果是:本发明实现的51单片机虚拟中断控制器与硬件51单片机开发板上运行的效果一致,达到了预期的效果,可以为51单片机开发者在无实物51开发板的情况下,在本发明实现的51单片机虚拟中断控制器上进行开发与调试。

附图说明

图1是实现步骤示意框图;

图2是51虚拟内核的中断触发方式示意图;

图3是8051中断控制器模块的结构图;

图4是8051虚拟内核与51中断控制器模块的信号连接图;

图5是8051中断控制器的验证方法。

具体实施方式

本发明公开了一种实现51单片机虚拟中断控制器的方法,也可以称为一种verilog2systemc实现51单片机虚拟中断控制器的方法。

本着从网络虚拟化的优势,不受硬件条件的影响,完成了一个verilog2systemc实现51单片机虚拟中断控制器的方法。本方法预期达到的效果,就是同一份带中断的代码既能在实物51单片机上运行验证中断功能,也能在51虚拟验证平台上运行验证中断功能,并且两者的运行结果一致且均正确。

本发明与现有技术的比对,如下表1所示:

表1

实现步骤:1、verilog实现的51cpu;2、verilog实现的51cpu转换成systemc的虚拟内核;3、systemc的虚拟内核中添加中断控制器模块,实现带中断功能的51单片机虚拟内核;4、验证。实现步骤示意框图如图1所示。

本方法实现的平台,优势主要是开源,可无限复用且不消耗任何硬件材料,可以替代实际硬件平台的效果,用在教学平台上是非常合适的。

通过本发明,可以模拟验证硬件51单片机在实际条件下的各个细节和功能。

通过本次开发的验证,可以实现仿真带中断的51单片机虚拟验证平台。

在linux环境下,安装systemc-2.3.2,打开linux终端,make执行编写好的makefile文件,即可生成编译通过,完成verilog转systemc实现51单片机的模拟核,此部分只有51单片机的基本功能,可以验证无中断裸机代码的正确性。中断部分没有实现,需要我们手动在systemc的工程中去添加代码实现51单片机的中断控制器。基于systemc的建模思想,创建一个实现中断控制器的类来实现中断控制器模块。

51单片机中断相关的内容简介:

创建类之前,我们还是需要了解以下51单片机的中断相关内容,如表2所示。

表2

由表2所示,51单片机有5个中断源,2个优先级,可以实现二级中断嵌套。中断向量是指中断跳转的地址,当中断触发时就会跳转到相应的地址去执行中断服务函数,实现中断功能。中断优先级默认顺序是表2中所表示的顺序,但是51有2个优先级,因此可以实现二级中断嵌套,优先级的设置与接下来介绍的中断优先级寄存器有关。接下来我们看一下中断使能寄存器描述,如表3所示。

表3-51单片机中断允许寄存器

中断允许寄存器ie是控制中断使能还是禁止的,1代表使能,0代表禁止,如果要使能某个中断需要把相应的位置一,并且需要把总中断打开,这样才能在中断事件触发时,实现相应的中断功能。一定要记得使能总中断,否则中断是不会触发的。设置此寄存器并不会实现中断嵌套,此时使用的还是中断默认查询顺序,即中断优先级由高到低依次为:外部中断0,定时器0,外部中断1,定时器1,串口中断。如果要设定某个中断的优先级最高,实现中断嵌套,则需要设置接下来介绍的中断优先级寄存器。

中断优先级寄存器如表4所示:

表4-51单片机中断优先级寄存器

中断优先级寄存器ip是控制中断优先级的,设置某一位为可以实现该位对应的中断优先级为最高,实现中断嵌套。要实现中断嵌套控制器,我们需要根据这些位的设置来做出相应的动作来执行对应中断服务程序,这样才能与实际的51单片机中断执行顺序一致。了解51单片机的中断系统后,还要需要知悉现阶段51虚拟内核的中断是何如进行的。

中断控制器模块systemc的接口:

介绍51单片机虚拟内核执行中断的相关信息之前,先介绍下中断控制器模块systemc的接口。中断控制器模块systemc的接口是指中断控制器模块与51模拟核的接口,通过这些接口可以获知51虚拟核的状态信息,从而判断中断是否使能,是否可以触发,是否已经执行等,如表5所示。

表5-中断控制器模块systemc的接口

具体的sc_in的表示51的模拟内核输出到中断控制器模块,sc_out表示中断控制器模块输出到51的模拟内核。

51虚拟内核的中断触发时序介绍:

编写51单片机中断控制器前,需要介绍一下51虚拟内核的中断是如何触发实现的。

图2中的时序说明了,51虚拟内核的中断触发方式。具体描述如下,当51虚拟内核next_flag信号出现一个由低到高的的方波时,说明此时模拟核是适合接收一个中断申请的,那么此时中断控制器模块需要做的就是:在下一个时钟周期,把inter_falg信号置为高,保存当前的pc指针保存到inter_addr中,同时在这个时钟周期把inter_cmd的赋值为0x12,在接下来的两个时钟周期把中断向量入口地址,依次赋值给inter_cmd,最后在接下来的一个时钟周期把inter_flag拉低。以串口为例,在把inter_cmd赋值为0x12后,在接下来的一个时钟周期把0赋值给inter_cmd,然后在接下来的一个时钟周期把0x23赋值给inter_cmd(此三个时钟周期是是不能被打断的),最后在接下来的一个时钟周期把inter_flag拉低,至此就可以触发一个串口中断。通过sc_in和sc_out中断控制器模块,与虚拟内核之间就建立了通讯的通道,双方可以获取对方的数据,从而知道当前的一个状态,这是实现中断控制器的依据。systemc是基于协程的,所有协程的敏感事件都是上面提到的clk,这个就与硬件实物对应起来了,因此可以实现与硬件相同的效果。

但是51单片机有5个中断源和2个中断优先级,因此还需要在代码中实现中断嵌套。接下来我们开始构建中断控制器的类,着手实现51单片机的中断控制器模块的相关接口函数。

中断控制器模块的结构:

中断控制器模块的主要结构包含:中断触发查询、中断嵌套处理、中断申请、中断状态记录和中断标志管理5个部分。中断控制器在每个时钟周期会进行中断触发查询,查看是否存在触发中断的必要的条件。在满足中断触发的条件下,会进行中断嵌套的处理,具体行为是查看当前中断以及是否存在比当前中断优先级更高的中断,如果有则需要进行中断嵌套处理,否则,可以准备向虚拟内核(8051core)发送中断请求。中断嵌套处理之后,就可以真正的向8051core发送中断请求了。发送中断请求后记录中断状态,中断状态可能有不允许申请、待申请、已申请、待执行、已执行等。中断状态记录之后,需要做一个中断标志管理,用以管理各个中断的标志。中断控制器模块的各个部分协同工作,一同实现51单片机的中断控制器。中断控制器模块的主要结构如图3所示。

中断控制器模块的相关接口函数:

通过对中断控制器模块的函数设计,实现了对51单片机中断的嵌套,主要接口函数如表6所示。

表6-中断控制器模块主要接口函数

如上述表6所示,为51单片机虚拟验证平台的中断控制模块的主要接口函数,是实现51中断控制器的核心内容。其中*_requst_res函数实现查询相应的中断是否具备触发的必要条件,当有比此中断优先级更高的中断请求时,是不具备触发本中断请求的,只有所有比此中断优先级高的中断全部执行完才具备本中断申请的必要条件,对应于中断控制器模块结构中的中断触发查询部分。int_ctl_deal函数是对中断嵌套的处理,具体就是查询是否有更高的优先级中断,如果有则需要进行中断嵌套处理,如果没有则准备进行中断申请,对应于中断控制器模块结构中的中断嵌套处理部分。*_int_deal函数是进行中断请求的实现函数,具体功能是实现图2中的时序逻辑,对应于中断控制器模块结构中的中断申请部分。*_int_flag_clear函数是清除相应中断的标志位,由于模拟内核每执行完一个中断都会通过上述的cmd21_flag来通知中断控制器模块,因此可以根据此位来清除相应中断标志,对应于中断控制器模块结构中的中断标志管理部分。此部分接口,实现了默认的中断优先级顺序,以及设置中断优先级寄存器的中断嵌套。

51虚拟内核模块和51中断控制器模块的信号连接如图4所示。

图4说明了51虚拟内核模块和51中断控制器模块的信号连接,int_ctl即为本发明所实现的8051中断控制器模块。通过sc_in/sc_out以及共同的时钟clk,使得整个系统协同推进,在任意clk虚拟内核和中断控制器之间的通讯双方都是可以获取到各自所需的信息,即可实现51单片机中断控制系统的虚拟验证平台,并基于裸机测试代码可以进行平台的验证。

如图5所示,想要搭建验证完成实现51单片机虚拟中断控制器的方法,需要依次完成以下步骤:

步骤1:,完成从开源资料的verilog语言代码到systemc的模型转换,实现不具备中断功能的systemc51虚拟内核。

步骤2:在51单片机实物上运行不带中断的裸机代码,测试裸机代码正常后,加载不带中断的裸机测试代码生成的bin文件到不带中断控制器的虚拟内核。

步骤3:验证从verilog到systemc的51虚拟内核转换是否正确,且51虚拟内核工作是否正确;若51虚拟内核工作不正确,需要去修改verilog语言的代码,然后重新转换成systemc的虚拟内核,直至51虚拟内核工作正确。

步骤4:在现有的51虚拟内核的systemc模型上添加中断控制器模块,编译进51虚拟内核,编译通过。

步骤5:在裸机代码中,设置外部中断1为高优先级,那么中断的优先级顺序则为外部中断1,外部中断0,定时器0,串口中断;同时外部中断的触发是在定时器0中断服务程序中触发的,所以最终的中断顺序为定时器0首先触发中断,接着触发外部中断1,再接着是外部中断0,最后才是串口中断。在51单片机实物上运行,测试后保证带中断的裸机代码正确。加载上一步带中断的裸机测试代码生成的bin文件,到带中断控制器的虚拟内核。

步骤6:对比实物运行的效果来验证中断控制器模块,若中断执行顺序与实物一致,则表明51单片机中断控制器的虚拟验证平台与预期效果是一致的;否则,需要定位哪个中断没有执行,或者中断执行顺序与实物不一致,然后不断的修改调试中断控制器模块,直至实现51单片机的中断控制器。

经验证,本发明实现的51单片机虚拟中断控制器与硬件51单片机开发板上运行的效果一致,达到了预期的效果,可以为51单片机开发者在无实物51开发板的情况下,在本发明实现的51单片机虚拟中断控制器上进行开发与调试。

所述步骤1包括:

步骤1.1:veriloghdl51cpu修改实现;

步骤1.2:verilog2systemc;

步骤1.3:实现虚拟内核8051core。

所述步骤2包括:

步骤2.1:无中断裸机代码编写;

步骤2.2:判断硬件上运行的无中断裸机代码是否正确,若正确,那么执行步骤2.3,否则执行步骤2.1;

步骤2.3:加载无中断裸机代码生成的bin文件至虚拟内核。

所述步骤5包括:

步骤5.1:带中断裸机代码编写;

步骤5.2:判断硬件上运行的带中断裸机代码是否正确,若正确,那么执行步骤5.3,否则执行步骤5.1;

步骤5.3:加载带中断裸机代码生成的bin文件至虚拟内核。

以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1