中断向量地址装入向量表的方法
- 格式:ppt
- 大小:58.50 KB
- 文档页数:3
第七章微计算机的中断系统7-1 什么是中断类型码、中断向量、中断向量表?在基于8086/8088的微机系统中,中断类型码和中断向量之间有什么关系?解:处理机可处理的每种中断的编号为中断类型。
中断向量是指中断处理程序的入口地址,由处理机自动寻址。
中断向量表是存放所有类型中断处理程序入口地址的一个默认的内存区域。
在8086系统中,中断类型码乘4可得到向量表的入口,从此处读出4字节内容即为中断向量。
7-2 什么是硬件中断和软件中断?在PC机中两者的处理过程有什么不同?解:硬件中断通过中断请求线输入电信号来请求处理机进行中断服务;软件中断是处理机内部识别并进行处理的中断过程。
硬件中断一般由中断控制器提供中断类型码,处理机自动转向中断处理程序;软件中断完全由处理机内部形成中断处理程序的入口地址并转向中断处理程序,不需外部提供信息。
7-3 试叙述基于8086/8088的微机处理硬件中断的过程。
解:以INTR中断请求为例。
当8086收到INTR的高电平信号时,在当前指令执行完毕且IF=1的条件下,8086在两个总线周期中分别发出INTA#有效信号;在第二个INTA#期间,8086收到中断源发来的一字节中断类型码;8086完成保护现场的操作,CS、IP内容进入堆栈,清除IF、TF;8086将类型码乘4后得到中断向量入口地址,从此地址开始读取4字节的中断处理程序的入口地址,8086从此地址开始执行,完成INTR中断请求的响应过程。
7-4 在PC机中如何使用“用户中断”入口请求中断和进行编程?解:PC机中分配用户使用的中断是IRQ9,经扩展槽B40h亿引出,故把用户的中断请求线连接到B40h上。
在应用程序中,利用25H号系统调用将中断服务程序的入口地址写入对于0AH 类型中断对应的中断向量表中去。
在应用程序中把主片8259A D2屏蔽位清零,把从主片8259A D1屏蔽位清0,使主片的IR2、从片的IR1可以输入中断请求。
6.1 分类说明8086CPU有哪几种中断?答:8086CPU中断源可分为内部中断和外部中断,内部中断有溢出中断、除法出错中断、INTn指令中断、断点中断、单步(陷阱)中断;外部中断有可屏蔽中断INTR\不可屏蔽中断NMI。
6.2 简述 8086可屏蔽中断的响应过程。
可屏蔽中断INTR接受来自普通外设的中断请求信号(一般使用可编程中断控制器8059A来管理此类外设的中断请求),当该信号线有效时,CPU将根据中断允许标志IF的状态来决定是否响应。
如果IF=0,则表示INTR线上中断被屏蔽或禁止,CPU将不理会该中断请求而处理下一条指令。
由于CPU并不锁存INTR信号,INTR信号必须保持有效状态,直到接受到响应信号或撤销请求为止。
如果IF=1,则表示INTR线上的中断开放,CPU在完成现在正在执行的指令后,识别该中断请求,并进行中断处理。
6.5 中断应答时序如图6.2所示,说明前后两个INTA周期的任务。
第一个INTA表示对中断请求的响应,用于通知中断请求设备,第二个INTA用于将中断类型号送数据总线的低8位上。
期间LOCK信号用于保证在中断响应过程中不会被其他CPU占用总线而导致中断响应失败。
6.9 某外设中断类型号为10H,它的中断服务程序的入口地址为1020H:3FC9H,求其向量地址并具体描述中断向量的各字节在存储器中的存储情况。
解:向量地址:10H*4=40H[0040H]、[0041H]、[0042H]、[0043H]依次存放C9H、3FH、20H、10H6.10 某外设的中断服务子程序名称为INT_PROC,其中断类型号为18H,试编写一程序段将该外设的中断向量装入到中断向量表中。
解:向量地址:18H*4=60HPUSH DSMOV AX,0MOV DS,AXMOV WORD PTR [0060H],OFFSET INT_PROCMOV WORD PTR [0062H],SEG INT_PROCPOP DSHLT7.2 简述CPU与外围设备交换信息的过程。
第六章习题与思考题典型例题解析例6-1 试述PC微机中断系统的分类与特点。
答:PC微机系统中断包括硬件(外部)中断和软件(内部)中断两大类。
硬件中断包括不可屏蔽中断NMI和可屏蔽中断INTR。
它们都由外部硬件产生。
软件中断包括软件中断INT nH和CPU内部特殊中断,它们由内部中断指令或执行程序过程中出现异常产生的。
软件中断又有DOS中断和BIOS中断之分。
硬件中断的特点是:(1)硬中断是外部事件而引起的中断,因此,硬件中断具有随机性和突发性。
(2)在硬件中断响应周期,CPU需要发中断回答信号(非屏蔽硬件中断不发中断回答信号)。
(3)硬件中断的中断号由中断控制器提供(非屏蔽硬件中断的中断号由系统指定为02H)(4)硬件中断一般是可屏蔽的(非屏蔽硬件中断是不可屏蔽的)。
软件中断的特点是:(1)软件中断是执行中断指令而产生的,无需外部施加中断请求信号。
在程序需要调用某个中断服务程序时,只要安排一条相应中断指令,就可转去执行所需要的中断程序,因此,中断的发生不是随机的,而是由程序安排好的。
(2)在软件中断响应周期,CPU不需要发中断回答信号。
(3)软件中断的中断类型号是在指令中直接给出,因此,不需要使用中断控制器。
(4)软件中断是不可屏蔽的。
例6-2 试述可编程控制器8259A的作用。
答:可编程控制器8259A在协助CPU处理中断事务中所起的作用主要是:(1)接受和扩充外部设备的中断请求。
外设的中断请求,并非直接送到CPU,而是通过8259A接受进来,再由它向CPU提出中断请求。
一片8259A可授受8个中断请求,经过级联可扩展到8片8259A,能接受64个中断请求。
(2)进行中断优先级排队。
外设的中断优先级排队,并不是CPU安排,而是由8259A安排的。
即由8259A中断请求输入引脚(IR)的编号决定的。
连到IR0上的外设中断优先级最高,连到IR7上的外设中断优先级最低。
(3)向CPU提供中断类型号。
学习一个芯片的功能时,我的建议是先学会如何用C语言点亮一个LED灯,然后就是学习一下使用他的中断,因为在做芯片的时候,各个厂家有自己的一套自己的方法。
所以使用中断的就必须了解很多概念,比如如何打开中断,如何安装自己的中断子服务程序,等等!先介绍一下什么叫中断:你在下象棋,突然电话响了,你回屋接电话,然后回来继续下象棋,这个过程就叫做中断响应过程(中断过程)。
CPU执行正常任务———————下象棋保护现场———————————-你已经想好要―将军‖,先在脑海中记下来。
中断发生———————————-电话响-中断服务程序—————————-接电话恢复现场———————————-回来后恢复刚才想法中断返回———————————-你回来继续下象棋中断屏蔽———————————-Boss 正在训话,要求所有电话关机,你不能接电话了。
非屏蔽中断——————————-你内急,即使是Boss 在训话,你还是得到外面去嘘嘘。
可屏蔽中断——————————-你在―闭关修炼‖,可以不受外界干扰所以我们在使用中断之前先得告诉CPU,我们要使用那个中断,当中断发生的时候,你的执行程序的去向(也就是中断服务子程序),最后在返回我们被中断的函数。
这样就完成了我们的中断历程!看看6713执行中断的流程:一、使能了全局中断和子中断,那么CPU每执行一条指令之前就去查询一下有没有中断被置位,如果有产生的,那么CPU就要跳转!二、软件把CPU内部的寄存器A0~A15,B0~B15,等等这些寄存器的值推入堆栈保存,把当前PC寄存器的值放入IRP寄存器中以备中断返回能找到当前被打断的位置(保存现场,中断函数前面得加interrupt关键字)三、CPU的PC指针读出中断向量表的地址,也就是把(ISTP寄存器的值+子中断向量偏移量)装入PC寄存器,这样就执行跳转。
四、在中断向量表里一般有就用跳转指令,这样就可以跳转到我们用C语言编写的中断服务子程序中。
ARM嵌入式中断向量表配置策略和实现方法一般32位ARM嵌入式系统的中断向量表是程序编译前设置好的。
在编写32位ARM嵌入式系统的中断服务程序、设置和修改ARM体系结构的中断向量表时,常感到相当麻烦,不得不修改汇编代码,对不喜欢使用汇编代码编程的程序员尤其如此。
当需要在程序运行过程中动态修改中断向量的程序时会感到更为不便,不得不增加很多分支处理指令才能实现。
为此本文提出一种简便高效的配置方法,实现了ROM固化程序在运行时动态配置ARM嵌入式系统中断向量表的功能。
1 ARM中断向量两种设置方法在32位ARM系统中,一般都是在中断向量表中放置一条分支指令或PC寄存器加载指令,实现程序跳转到中断服务例程的功能。
例如:IRQEntry B HandleIRQ ;跳转范围较小B HandleFIQ或IRQEntry LDR PC,=HandleIRQ ;跳转的范围是任意32位地址空间LDR PC,=HandleFIQLDR伪指令等效生成1条存储读取指令和1条32位常数定义指令。
32位常数存储在LDR 指令附近的存储单元中,相对偏移小于4KB。
该32位数据就是要跳转到的中断服务程序入口地址。
之所以使用LDR伪指令,是因为ARM的RISC指令为单字指令,不能装载32位的立即数(常数),无法直接把一个32位常数数据或地址数据装载到寄存器中。
下面一般程序与上述伪指令功能等效,但中断向量表描述得更为清晰。
其中VectorTable为相对LDR指令的偏移量:IRQEntry LDR PC,VectorTable+0;与LDR PC,=HandleIRQ等效LDR PC,VectorTable+4;与LDR PC,=HandleFIQ等效。
STM32 中断向量表的位置、重定向我们也知道怎么跳到main 函数了,那么,中断发生后,又是怎么跑到中断入口地址的呢?从stm32f10x.s 可以看到,已经定义好了一大堆的中断响应函数,这就是中断向量表,标号__Vectors,表示中断向量表入口地址,例如:AREA RESET, DATA, READONLY ;定义只读数据段,实际上是在CODE区(假设STM32 从FLASH 启动,则此中断向量表起始地址即为0x8000000)EXPORT __VectorsIMPORT OS_CPU_SysTickHandler IMPORTOS_CPU_PendSVHandler__Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler DCD BusFault_Handler ; Bus Fault Handler DCD UsageFault_Handler ; Usage Fault Handler这个向量表的编写是有讲究的,跟硬件一一对应不能乱写的,CPU 找入口地址就靠它了,bin 文件开头就是他们的地址,参考手册RM0008 的10.1.2 节可以看到排列。
我们再结合CORTEX-M3 的特性,他上电后根据boot 引脚来决定PC 位置,比如boot 设置为flash 启动,则启动后PC 跳到0x08000000。
此时CPU 会先取2 个地址,第一个是栈顶地址,第二个是复位异常地址,故有了上面的写法,这样就跳到reset_handler。
那么这个reset_handler 的实际地址是多少.?下面的一堆例如Nmi_handler 地址又是多少呢?发生中断是怎么跑到这个地址的呢?下面挨个讲解。
DM6437 中断向量表配置1. 编写中断服务例程在.c源文件中编写ISR函数c_intXX,用于中断处理,如:interrupt void c_intXX (void){…;}注:对于硬件中断而言,XX = 00~15。
2.初始化中断向量表,并在内存段中的中断向量表中配置好对应的中断向量首先是把中断向量表定位到某一内存段中,我们可以在cmd文件中配置中断向量表的内存映射,如:MEMORY{VECS: o = 0x10800000 l = 0x00000400MEMTEST: o = 0x10800400 l = 0x00000200IRAM: o = 0x10800600 l = 0x0001FA00DDR2: o = 0x80000000 l = 0x10000000}SECTIONS{.bss > IRAM.cinit > IRAM.cio > IRAM.const > IRAM.data > IRAM.far > IRAM.stack > IRAM.switch > IRAM.sysmem > IRAM.text > IRAM.vecs > VECS.ddr2 > DDR2}然后建立一个.asm文件,用以配置中断向量表中的中断向量,我们需要声明一些全局变量,以便其他源文件可以引用这些变量或者引用其他源文件的变量,如:*-----------------------------------------------------------------* Global symbols defined here and exported out of this file*-------------------------------------------------------------------- .global _vectors.global _c_int00.global _vector1.global _vector2 ;RSVD保留.global _vector3 ;RSVD保留.global _vector4.global _vector5.global _vector6.global _vector7.global _vector8.global _vector9.global _vector10.global _vector11.global _vector12.global _vector13.global _c_int14_vencint ; Hookup the c_int14 ISR in main().global _vector15因为引用了rts的_c_int00中断,即RESET中断,因此需要引入这个符号:.ref _c_int00为了把中断服务例程的地址,即中断向量插入到中断向量表中,可以定义一个宏:VEC_ENTRY .macro addrSTW B0,*--B15MVKL addr,B0MVKH addr,B0B B0LDW *B15++,B0NOP 2NOPNOP.endm为了初始化中断向量表中的中断向量,可以定义一个虚拟的中断向量:_vec_dummy:B B3NOP 5接下来就可以配置中断向量表了:.sect “.vecs”.align 1024_vectors:_vector0: VEC_ENTRY _c_int00;RESET中断_vector1: VEC_ENTRY _vec_dummy ;NMI不可屏蔽中断_vector2: VEC_ENTRY _vec_dummy ;保留中断1_vector3: VEC_ENTRY _vec_dummy ;保留中断2_vector4: VEC_ENTRY _vec_dummy ;外部中断INT4_vector5: VEC_ENTRY _vec_dummy ;外部中断INT5_vector6: VEC_ENTRY _vec_dummy ;外部中断INT6_vector7: VEC_ENTRY _vec_dummy ;外部中断INT7_vector8: VEC_ENTRY _c_int08 ; EDMA控制器中断EDMAINT,对应于c_int08 ISR_vector9: VEC_ENTRY _vec_dummy;JTAGRTDX中断_vector10: VEC_ENTRY _vec_dummy;EMIF_SDRAM_Timer 中断_vector11: VEC_ENTRY _vec_dummy;McBSP_0_Receive中断_vector12: VEC_ENTRY _vec_dummy;McBSP_1_Transmit中断_vector13: VEC_ENTRY _vec_dummy;Host_Port_Host_to_DSP中断_vector14: VEC_ENTRY _vec_dummy;Timer0中断_vector15: VEC_ENTRY _vec_dummy;Timer1中断3. 在C程序中指定定义的中断向量表,并且启用CPU中断功能在C程序中,用CSL的IRQ模块来设置中断比较方便,在设置之前,需要外部链接上面的asm程序的中断向量表符号:extern far void vectors();//之所以为vectors,因为C编译器编译后自动改名其为_vectors引用了中断向量表之后,就可以设置中断了:IRQ_setVecs(vectors); //指向asm中定义的中断向量表IRQ_nmiEnable();IRQ_globalEnable();IRQ_map(IRQ_EVT_EDMAINT, 8);//映射事件到指定的物理中断号IRQ_reset(IRQ_EVT_EDMAINT);4.启动中断源,如venc中断至此,中断服务例程c_int14_vencint 就可以为venc中断服务了,其它硬件中断向量的配置同理。
习题一1.什么是接口?接口就是微处理器CPU与外部世界的连接部件,是CPU与外界进行信息交换的中转站。
2.为什么要在CPU与外设之间设置接口?在CPU与外设之间设置接口主要有4个原因:(1)CPU与外设二者的信号不兼容,包括信号线的功能定义、逻辑定义和时序关系(2)CPU与外设的速度不匹配,CPU的速度快,外设的速度慢(3)若不通过接口,而由CPU直接对外设的操作实施控制,会使CPU处于穷于应付与外设打交道之中,大大降低CPU的效率(4)若外设直接由CPU控制,会使外设的硬件结构依赖于CPU,对外设本身的发展不利。
3.接口技术在微机应用中起的作用?随着计算机技术的高速发展,计算机的应用越来越广泛。
然而,在微机系统中,微处理器的强大功能必须通过外部设备才能实现,而外设与微处理器之间的信息交换和通信又是靠接口来实现的,所以,接口技术成为了一门关键技术,它直接影响微机系统的功能和微机的推广应用。
4.接口电路的硬件一般由哪几部分组成?接口电路的硬件一般由以下几部分组成:(1)基本逻辑电路:包括命令寄存器、状态寄存器和数据缓冲寄存器,是接口电路中的核心(2)端口地址译码电路:实现设备的选择功能(3)供选电路:根据不同任务和功能要求而添加的功能模块电路。
5.接口电路的软件控制程序一般包括哪几部分?接口电路的软件控制程序一般包括以下的程序段,各部分程序是相互渗透、融为一体的:(1)初始化程序段:对可编程接口芯片进行初始化编程(2)传送方式处理程序段:不同的传送方式(查询、中断、DMA方式)程序段不同(3)主控程序段:完成接口任务的程序段(4)程序终止与退出程序段:程序退出前对接口电路中硬件进行保护的程序段(5)辅助程序段:人-机对话、菜单等6.接口电路的结构有哪几种形式?接口电路的结构主要有四种:(1)固定式结构:不可编程的接口电路,结构简单、功能单一、固定(2)半固定式结构:由PAL或GAL器件构成的接口电路,功能和工作方式可以通过改写内部的逻辑表达式来改变,但逻辑表达式一旦烧入芯片,其功能和工作方式就固定下来了(3)可编程结构:其功能和工作方式可由编程指定,使用灵活、适应面广,且种类繁多(4)智能型结构:芯片本身就是一个微处理器,外设的全部管理都由智能接口完成,如I/O处理器I0809或通用单片机7.CPU与接口之间有哪几种传送数据的方式?它们各应用在什么场合?CPU与接口之间的数据传送方式主要有查询方式、中断方式和DMA方式:(1)查询方式:主要用于CPU不太忙且传送速度不高的情况下。