中断接口器件的功能演示的可视化设计
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
中断优先级分析器的工作原理
可编程中断控制器中断控制器8259A是专门为控制优先级中断而设计开发的芯片。用于实现中断优先管理、中断屏蔽。它将中断源优先排队、辨别中断源以及提供中断矢量的电路集于一片中。因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需要增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。根据CPU发来的命令字定义和修改IRR中各中断源的优先级别,多个中断源同时请求中断时,可根据各中断源的优先级别判断并选择出最高的优先级别,进而判断该优先权是否高于正在处理的中断,若当前申请中断的最高优先权高于正在处理的中断级,则向CPU发出中断请求信号。
该分析器相当于一个优先级编码器和一个比较器电路,可实现中断判优及屏蔽的功能。
按优先级设置方法可有如下四种方式:
全嵌套方式;特殊全嵌套方式;优先级自动循环方式;优先级特殊循环方式。
中断优先级分析器工作的大致过程如图1-3所示:
图1-3 中断优先级分析器的工作原理
1.5 8259A的工作原理
IR线上提出了中断请求的中断源,即出现请求,IRR中断请求寄存器(共有8位D7~D0)对应于连接在IR0~IR7线上的外设的中断请求,哪一根输入线有请求,哪一根输入线就置1。 【买计算机毕业论文就到计算机毕业论文网】
我们假设现有一中断信号输入,那么中断过程的时序图如1-4所示 [资料来源:www.THINK58.com]
图1-4 中断时序图
1.6 该课题的主要研究方向和研究方法
该课题是对8259A芯片的工作工程进行可视化的演示,同时需要把芯片自身的功能结合程序结构编程演示其内部的工作机理。同时使我们在学习编写程序的基础上明白计算机系统的内部的构造和系统。
对于计算机使用者来说,我们常常只看到了计算机工作却不知道他是怎么进行和完成工作的,计算机的内部是又许多芯片组成的,每个芯片都有它必不可少的作用,本课题就是让你了解到各个不同芯片的作用、工作原理、工作方式和工作状况等。通过对每个芯片的了解从而进一步的了解到计算机系统。笔者所做的是关于中断接口这一模块,而控制中断的芯片是8259A。它的主要作用是和CPU之间互相交换中断的信息,而8259A的中断屏蔽寄存器IMR可以屏蔽一个或几个IR的中断请求,它加强了对中断的控制能力。而且8259A是内部主动的初始化芯片,即是我们常说的仿真式的初始化,这是其一个重要的特点。
在以前的学习过程中,我们对8259A这个芯片不是特别的了解,所以我们要通过对其内部的初始化编程、工作方式的编程、操作命令字的编程等将其统一起来。
在这次研究中,我们为了更加明确真实的显示出芯片的工作状况和工作原理,我们用代码仿真式的编程出每个器件和芯片。使我们在不需要真实物品的情况下同样能把整个中断或是其他的响应过程都真实的展现在大家的眼前。
本文来自think58 [来源:http://www.think58.com]
对于我们一整个小组而言,需要的是把各个芯片结合起来使计算机系统能完成各个响应,同时使其能在实验台上真实的演示,得到直观的视图。其中运用到C、C++、VC++6.0三种语言,在实验台这个平台上让我们对程序的流程及中断的工作方式得到详细的理解。
2 对该课题的部分概念的重点说明
2.1 可视化的理解说明
什么叫可视化?每个语言本身都是“不可视”的,仅仅是语言而已;所谓“可视化”不过是支持该语言的IDE(通俗点说就是编程工具)所提供的功能,让你在编窗口等一些“看到着”的程序时可以使用拖拽等可视化操作。
可视化就是利用计算机图形学和图像处理技术,将数据转换成图形或图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。它涉及到计算机图形学、图像处理、计算机视觉、计算机辅助设计等多个领域,成为研究数据表示、数据处理、决策分析等一系列问题的综合技术。可视化技术最早运用于计算科学中,并形成了可视化技术的一个重要分支——科学计算可视化(Visualization in Scientific Computing)。科学计算可视化能够把科学数据,包括测量获得的数值、图像或是计算中涉及、产生的数字信息变为直观的、以图形图像信息表示的、随时间和空间变化的物理现象或物理量呈现在研究者面前,使他们能够观察、模拟和计算。科学计算可视化自1987年提出以来,在各工程和计算领域得到了广泛的应用和发展。Visual C++提供了一个支持可视化编程的集成开发环境:Visual Studio(又名Developer Studio)。Developer Studio是一个通用的应用程序集成开发环境。 内容来自think58 [资料来源:http://think58.com]
可视化是指能使程序在实验台上得到实现和得到真实直观的效果图。这是由我们这组的一个同学单独做到,同时能让我的程序和他的实验台能相互得到实现,相互制约相互响应和发出信号。
使用类视图显示所有已定义的类以及这些类中的数据成员、成员变量。Visual C++自动从项目工作区中所包含的源程序文件中分离出类。
作为本课题的中心思想,所得到的编程结果最后都需要能通过检测程序得到直观的视图,即为可视化。在装载8259A的DLL以后读取到该芯片的信息,得到的器件图如图2-1所示:
内容来自think58
[资料来源:www.THINK58.com]
[资料来源:www.THINK58.com]think58好,好think58 [版权所有:http://think58.com]
内容来自think58 [资料来源:http://THINK58.com]
本文来自think58 [资料来源:http://think58.com]
[来源:http://www.think58.com]
内容来自think58 [资料来源:http://think58.com]
think58好,好think58
[资料来源:http://THINK58.com]
图2-1 测试程序所得器件图
而此时假设输入信号,那么我们能从信息框看到结果,信息框的显示如图2-2所示: think58.com [资料来源:http://THINK58.com]
内容来自think58 [资料来源:http://www.THINK58.com]
图2-2 信息框显示图
2.2 访真式编程的理解说明
在该课题中,我们不能做到拿到每一个芯片来真实的展现这个课题的思想。所以我们运用类、对象等来表示该芯片响应外界传来的信号结合自身的功能和程序结构来演示其内部的工作机理。
在本课题我们最重点了解的是8259A芯片的功能,所以我们在这次编程过程中,对8259A进行了详细的编写。相当于把8259A作为了一个类,其中的功能成了被调用的函数。这便形成了访真式编程的中心思想。这样既能得到相对应的芯片方便随时调用,同时也能简洁明了的将芯片的功能和如何实现的通过测试程序展现出来。
2.3 状态机的理解说明
状态机从设计的角度来讲就是指状态图,理解各个状态之间的迁移关系;从编码上讲,运用状态表或状态模式来实现演示芯片的工作过程。
状态机用于对模型元素的动态行为进行建模,更具体地说,就是对系统行为中受事件驱动的方面进行建模(事件与信号),状态机专门用于定义依赖于状态的行为(即根据模型元素所处的状态而有所变化的行为)。其行为不会随着其元素状态发生变化的模型元素不需要用状态机来描述其行为(这些元素通常是主要负载管理数据的被动类)。从定义可知,状态模式是要应对状态转换的。那么状态的转换在哪里定义呢?你可以选择在使用环境角色的代码中来表现出来,当然这便意味着状态转变的规则就固定下来了。 copyright think58 [资料来源:THINK58.com]
状态模式相当于我们在想象中已经“实现”了一次,状态模式的引入免除了代码中复杂而庸长的逻辑判断语句。而且具体状态角色将具体状态和它对应的行为封装了起来,这使得增加一种新的状态变得简单一些。而且如果设计合理的话,具体状态角色可以被重用。状态机由状态组成,各状态由转移链接在一起。状态是对象执行某项活动或等待某个事件时的条件。转移是两个状态之间的关系,它由某个事件触发,然后执行特定的操作或评估并导致特定的结束状态。
状态图用于显示状态机(它指定对象所在的状态序列)、使对象达到这些状态的事件和条件、以及达到这些状态时所发生的操作。
图2- 3 描绘了状态机的各种元素。
图2-3 状态机符号
2.4 CPU与8259A之间的转换方式
按照8259A和系统总线的连接来分,有以下两种方式。
(1) 缓冲方式
在多片8259A级连的大系统中,8259A通过外部总线驱动器和数据总线相连,这就是缓冲方式。在缓冲方式下,8259的SP/EN输出信号作为缓冲器的启动信号,用来启动总线驱动器,在8259A与CPU之间进行信息交换。缓冲方式是用8259A的初始化命令字ICW4来设置的。
(2) 非缓冲方式
当系统中只有一片或几片8259A芯片时,可以将数据总线直接与系统数据总线相连,这时8259A处于非缓冲方式下。在这种方式下,8259A的SP/EN信号作为输入端设置,主片应接高电平,从片应接低电平。
think58.com
[资料来源:http://www.THINK58.com]
CPU 有两条中断线,LINT0 和 LINT1。在8259A的配置中,LINT1 连到了“Non-Maskable Interrupt”(NMI),当检测到严重的、潜在的、不可恢复的错误时就会产生 NMI。之所以叫做“Non-Maskable Interrupt”是因为没有办法阻断它——除了处理器,没有谁能屏蔽它。引起 NMI 的一个典型的例子就是内存校验错。
LINT0 被用作“Interrupt Input Line”(INTR),它连接在主 8259 的 INT 脚上。8259 通过使 INT 有效来将中断通知给系统。当 CPU 确认后,8259 通过总线向 CPU 发送一个8位的值(之前被 O/S 编程进了 PIC)。这个8位的值就是相应 IRQ 的中断向量。这个中断向量被用作 IDT 的索引来确定中断服务程序(ISR)的地址。然后,CPU 跳转到 ISR,进行服务此中断所需的处理。
CPU与8259A之间通过数据线和控制线的直接连接,译码器和地址线的间接连接,同时有INT和INTA之间的相互转换,其线路连接图如图2-4所示。
图 2-4 线路连接图
3 代码的编写工作以及说明
3.1 对代码的初步设计工作
在编写该课题时,我们首先需要明白8259A的主要功能。8259A可扩展外部中断源的数目,又有多种中断管理方式.在编写程序中,我们必须了解8259A与其他芯片不同的引脚及其功能。而8259A的主要引脚就是中断响应的引脚和判断中断优先级的引脚。它决定了8259A的一个特大功能就是响应中断。于是我们则需要对每个引脚的功能和在什么情况下哪个引脚做出怎样的反应进行详细的编程说明,同时我们一组的成员在Line、Dcomponent上的编写几乎是一致的,唯一的不同就是对芯片的解说上,使他们都在D8259A.CPP下完成。 内容来自think58
在对代码的编写中,我们首先要把8259A这块代码从总系统中抽离出来,即建立一个新的DLL工程。这个总系统就是包含各个不同芯片的简单编程文件夹,我们需要在每个独立的芯片编程程序中根据实际情况、在编译后测试文件能更好的显示出器件原理的前提下对芯片编程进行调整和修改,同时我们需要知道做为器件功能演示的share文件夹,在编译代码的时候需要将share这个目录加入到编译环境下,然后在VC++6.0的模板下,重新建立一个新的工程,我们可以将其设为D8259DLL这么一个DLL工程。同时将原本系统中的D8259.h(头文件) 和D8259.cpp(源文件);line.h和line.cpp;Dcomponent.h和Dcomponent.cpp文件都复制到新的D8259A的子文件中,*.h文件是一些变量、类、函数的定义,不能编译;*.cpp文件是.h文件的实现,可以进行编译。通过对程序的编译和链接我们会在建立的新的工程中有个DEBUG文件夹中得到有一个文件名为D8259DLL.dll的文件,这就是我们运行的结果。
3.2 对基类和派生类的主要函数的解释说明
通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。
copyright think58
[来源:http://www.think58.com]
3.2.1 对基类中部分函数的解说
基类是相对于派生类而言的,是个相对的概念。任何一个类都能派生出一个新类,基类是对若干个派生类的抽象,基类抽取了它的派生类的公共特征。它具有三种继承方式,按关键字给予表示:public 表示公有基类;private 表示私有基类;protected 表示保护基类。
Dcomponent中的OutSig(int iPinNo, int iSigVal)函数是一个基类函数,他是对引脚号与输入信号之间的关系已经各个不同的引脚在接收到不同信号的时所做出的不同响应。该基类中有些操作并未实现,我们可以通过其派生类,在对派生类的定义中实现基类中定义的操作。
DrawObject(CDC* pDC)也是一个基类,其表示的是一个画图对象,属于该类的控件有:线段、椭圆、矩形和圆角矩形,其中CDC是一个类,其中用构造参数生成对象,而这里的CDC*pDC是一个CDC类的指针,可以调用或引用CDC类的属性方法事件。
think58.com [来源:http://www.think58.com]