中断向量地址装入向量表的方法

合集下载

微计算机原理(第2版)课后习题答案潘名莲马争丁庆生编著

微计算机原理(第2版)课后习题答案潘名莲马争丁庆生编著

第七章微计算机的中断系统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提供中断类型号。

DSP(TMS320C6713)入门之旅三、中断的理解和使用

DSP(TMS320C6713)入门之旅三、中断的理解和使用

学习一个芯片的功能时,我的建议是先学会如何用C语言点亮一个LED灯,然后就是学习一下使用他的中断,因为在做芯片的时候,各个厂家有自己的一套自己的方法。

所以使用中断的就必须了解很多概念,比如如何打开中断,如何安装自己的中断子服务程序,等等!先介绍一下什么叫中断:你在下象棋,突然电话响了,你回屋接电话,然后回来继续下象棋,这个过程就叫做中断响应过程(中断过程)。

CPU执行正常任务———————下象棋保护现场———————————-你已经想好要―将军‖,先在脑海中记下来。

中断发生———————————-电话响-中断服务程序—————————-接电话恢复现场———————————-回来后恢复刚才想法中断返回———————————-你回来继续下象棋中断屏蔽———————————-Boss 正在训话,要求所有电话关机,你不能接电话了。

非屏蔽中断——————————-你内急,即使是Boss 在训话,你还是得到外面去嘘嘘。

可屏蔽中断——————————-你在―闭关修炼‖,可以不受外界干扰所以我们在使用中断之前先得告诉CPU,我们要使用那个中断,当中断发生的时候,你的执行程序的去向(也就是中断服务子程序),最后在返回我们被中断的函数。

这样就完成了我们的中断历程!看看6713执行中断的流程:一、使能了全局中断和子中断,那么CPU每执行一条指令之前就去查询一下有没有中断被置位,如果有产生的,那么CPU就要跳转!二、软件把CPU内部的寄存器A0~A15,B0~B15,等等这些寄存器的值推入堆栈保存,把当前PC寄存器的值放入IRP寄存器中以备中断返回能找到当前被打断的位置(保存现场,中断函数前面得加interrupt关键字)三、CPU的PC指针读出中断向量表的地址,也就是把(ISTP寄存器的值+子中断向量偏移量)装入PC寄存器,这样就执行跳转。

四、在中断向量表里一般有就用跳转指令,这样就可以跳转到我们用C语言编写的中断服务子程序中。

ARM嵌入式中断向量表配置策略和实现方法

ARM嵌入式中断向量表配置策略和实现方法

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 中断向量表的位置 、重定向

STM32 中断向量表的位置 、重定向

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 地址又是多少呢?发生中断是怎么跑到这个地址的呢?下面挨个讲解。

微机原理与接口技术 7.中断向量表(已看)ppt课件

微机原理与接口技术 7.中断向量表(已看)ppt课件
中断恳求 中断效力存放器ISR 保管一切正在效力的中断源,某位=1表示对应的IRi中断正在被
效力 中断屏蔽存放器IMR 存放中断屏蔽字,某位=1表示对应的IRi输入被屏蔽 中断优先权判别电路 确定能否向CPU发出中断恳求,中断呼应时确定ISR的哪位应置
位及把相应中断的类型码放到数据总线上
三种EOI命令 自动EOI〔AEOI〕 ——〔自动EOI方式〕 非指定EOI〔NSEOI〕——〔正常EOI方式〕 指定EOI〔SEOI〕 ——〔特殊EOI方式〕
自动EOI方式:在第2个INTA终了时,由8259A使 ISRi自动复位;
因不保管当前正在效力的中断的形状,故AEOI不能 用于中断嵌套方式
期INTA,要求PIC在第2个中断呼应总线周期把中断 类型码 n 放到数据总线上,供CPU读入。
中断优先级
背景:系统有多个终端,而CPU同一个时 辰只能呼应一个中断,为理处理这个 矛盾应按中断的轻重缓急来确定中断 的优先级别.
8088/8086系统中各中断的优先级
优先级从高到低顺序如下:

软件中断、内部中断 (除单步中断外)
级连电路系衔统总线接AB、D方B、CB 法
最多1主8从 64个中断源
INTA A0 CS D0-D7 RD WR INT
8259A CAS0
(从片1)
CAS1 CAS2
SP/EN IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
INTA A0 CS D0-D7 RD WR INT
8259A CAS0
特殊屏蔽方式:
提供了允许较低优先级的中断可以得到呼应的特 殊手段。
原理:假定当前正在处置IR6,先进入特殊屏蔽 方式,然后设置IM6=1。这时,除IR6外的一切 中断恳求均能得到呼应。

中断向量表配置

中断向量表配置

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中断服务了,其它硬件中断向量的配置同理。

中断向量的使用

中断向量的使用
__interrupt void USART_RXC_Server(void)
{
}
#pragma vector=USART_UDRE_vect
__interrupt void USART_UDRE_Server(void)
{
}
#pragma vector=USART_TXC_vect
__interrupt void USART_TXC_Server(void)
{
}
#pragma vector=ADC_vect
__interrupt void ADC_Server(void)
{
}
#pragma vector=EE_RDY_vect
__interrupt void EE_RDY_Server(void)
{
}
#pragma vector=ANA_COMP_vect
中断向量的使用中断向量表的作用中断向量的地址是arm的中断向量号arm的中断向量stm32的中断向量表中断向量的作用中断向量表中断向量stm32中断向量表
如何输出HEX文件?
在配置文件后面加入以下代码,便P都能识别.
// Output File
-Ointel-extended,(XDATA)=.eep //产生eeprom文件
{
}
#pragma vector=TIMER1_COMPB_vect
__interrupt void TIMER1_COMPB_Server(void)
{
}
#pragma vector=TIMER1_OVF_vect
__interrupt void TIMER1_OVF_Server(void)
{
}

接口与通信习题参考答案

接口与通信习题参考答案

习题一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不太忙且传送速度不高的情况下。

中断机制和中断描述符表、中断和异常的处理

中断机制和中断描述符表、中断和异常的处理

中断机制和中断描述符表、中断和异常的处理注:本分类下⽂章⼤多整理⾃《深⼊分析linux内核源代码》⼀书,另有参考其他⼀些资料如《linux内核完全剖析》、《linux c 编程⼀站式学习》等,只是为了更好地理清系统编程和⽹络编程中的⼀些概念性问题,并没有深⼊地阅读分析源码,我也是草草翻过这本书,请有兴趣的朋友⾃⼰参考相关资料。

此书出版较早,分析的版本为2.4.16,故出现的⼀些概念可能跟最新版本内核不同。

此书已经开源,阅读地址1、中断向量Intel x86 系列微机共⽀持256 种向量中断,为使处理器较容易地识别每种中断源,将它们从0~255 编号,即赋予⼀个中断类型码 n,Intel 把这个8 位的⽆符号整数叫做⼀个向量,因此,也叫中断向量。

所有256 种中断可分为两⼤类:异常和中断。

异常⼜分为故障(Fault)、陷阱(Trap)和夭折(Abort),它们的共同特点是既不使⽤中断控制器,⼜不能被屏蔽。

中断⼜分为外部可屏蔽中断(INTR)和外部⾮屏蔽中断(NMI),所有I/O 设备产⽣的中断请求(IRQ)均引起屏蔽中断,⽽紧急的事件(如硬件故障)引起的故障产⽣⾮屏蔽中断。

⾮屏蔽中断的向量和异常的向量是固定的,⽽屏蔽中断的向量可以通过对中断控制器的编程来改变。

Linux 对256 个向量的分配如下。

• 从0~31 的向量对应于异常和⾮屏蔽中断。

• 从32~47 的向量(即由I/O 设备引起的中断)分配给屏蔽中断。

• 剩余的从48~255 的向量⽤来标识软中断。

Linux 只⽤了其中的⼀个(即128 或0x80向量)⽤来实现系统调⽤。

当⽤户态下的进程执⾏⼀条int 0x80 汇编指令时,CPU 就切换到内核态,并开始执⾏system_call() 内核函数。

2、外设可屏蔽中断、异常及⾮屏蔽中断Intel x86 通过两⽚中断控制器8259A 来响应15 个外中断源,每个8259A 可管理8 个中断源。

mcu中断 直接向量 表引用法

mcu中断 直接向量 表引用法

MCU中断是一种在单片机工作中非常重要的机制,用于实现在处理器运行中途被外部事件打断,跳转执行特定的处理程序的功能。

在MCU 中断的实现中,直接向量和表引用法是两种常用的方式。

本文将对这两种中断实现方式进行详细介绍,并分析其优缺点。

一、直接向量中断1. 直接向量中断是一种简单而直接的中断处理方式,其原理是通过一个中断向量表来存放中断服务程序的入口位置区域。

当中断事件发生时,处理器直接根据中断号来索引中断向量表,找到相应的中断服务程序入口位置区域,然后跳转执行该程序。

2. 直接向量中断的优点在于实现简单,响应速度快。

由于直接向量表存放的是中断服务程序的入口位置区域,因此可以直接跳转执行,不需要额外的寻址和计算,从而可以很快地响应中断事件。

3. 然而,直接向量中断也存在一些缺点。

中断向量表的大小是固定的,当系统中的中断事件较多时,可能导致中断向量表无法容纳所有的中断服务程序入口位置区域,从而限制了系统的扩展性。

另外,在中断向量表中不能存放动态生成的中断服务程序入口位置区域,这也限制了一些灵活性和动态性的要求。

二、表引用法中断1. 表引用法中断是一种通过间接引用中断服务程序入口位置区域的中断处理方式。

其原理是在中断向量表中存放的不再是中断服务程序的入口位置区域,而是中断服务程序的入口位置区域的指针。

当中断事件发生时,处理器首先根据中断号索引中断向量表,找到中断服务程序入口位置区域的指针,然后再通过该指针来间接引用真正的中断服务程序入口位置区域,最后跳转执行该程序。

通过这种方式,可以实现中断服务程序入口位置区域的动态生成和修改。

2. 表引用法中断的优点在于其灵活性和动态性。

由于中断向量表存放的是中断服务程序入口位置区域的指针,因此可以随时生成和修改中断服务程序入口位置区域,从而满足系统对于动态性和灵活性的要求。

中断向量表的大小也可以根据系统的需求进行动态调整,满足系统的扩展性。

3. 然而,表引用法中断也存在一些缺点。

微机基础原理第二版标准答案

微机基础原理第二版标准答案

3.2设(DS)=6000H,(ES)=2000H,(SS)=1500H,(Si)=00A0H,(BX)=0800H ,(BP)=1200H ,数据变量VAR 为0050H. 请分别指出下列各条指令源操作数的寻址方式?它的物理地址是多少?(1) MOV AX,BX (2) MOV DL,80H(3) MOV AX, V AR (4) MOV AX,V AR[BX][SI](5) MOV AL, ‘B' (6) MOV DI, ES: [BX](7) MOV DX,[BP] (8) MOV BX ,20H[BX]解:(1)寄存器寻址。

因源操作数是寄存器,故寄存器BX 就是操作数的地址.(2)立即寻址。

操作数80H 存放于代码段中指令码MOV 之后。

(3)直接寻址。

( 4)基址一变址一相对寻址.操作数的物理地址 =(DS) × 16+ (SI)+ (BX) +VAR= 60000H + 00A0H +0800H +0050H =608F0H(5)立即寻址(6) 寄存器间接寻址 .操作数的物理地址 = (ES) × 16+ (BX)= 20000H + 0800H = 20800H(7) 寄存器间接寻址。

操作数的物理地址 = (SS) × 16+ (BP)= 15000H + 1200H= 16200H(8) 寄存器相对寻址.操作数的物理地址= (DS) × 16+ (BX) + 20H= 60000H +0800H +20H= 60820H3.3 假设 (DS)= 212AH,(CS)= 0200H,(IP)= 1200H,(BX)= 0500H, 位移量 DATA=40H ,(217A0H) =2300H ,(217E0H)=0400H , (217E2H) =9000H 试确定下列转移指令的转移地址 .(1) JMP BX(2) JMP WORD PTR[BX] (3) JMP DWORD PTR[BX+DA TA]解: 转移指令分为段内转移和段间转移, 根据其寻址方式的不同, 又有段内的直接转移 和间接转移, 以及段间的直接转移和间接转移地址。

《微型计算机接口技术与应用》测验题库答案

《微型计算机接口技术与应用》测验题库答案

微型计算机接口技术与应用练习测验题库填空题 186个简答题 185个程序题 23 个合计 394个一、填空题1.屏蔽命令有两种格式,即写单通道屏蔽的屏蔽字和写4个通道屏蔽位的屏蔽字。

2.所谓软命令就是只要对特定的地址进行一次写操作(即/CS和内部寄存器地址及/IOW同时有效),命令就生效,而与写入的具体数据无关。

3.8237A-5有3个软命令:清先/后触发器命令、总清除命令和清屏蔽寄存器命令。

4.DMA空闲周期和DMA有效周期5.8237A-5有7种状态周期,分别为:SI,So,S1,S2,S3,S4,Sw。

6.一个完整的DMA有效周期包括4个状态周期:S1,S2,S3,S4及可能的Sw状态。

7.中断是指CPU在正常运行程序时,由于内部/外部事件或由程序的预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的事件服务的程序中去。

服务完毕,再返回去继续执行被暂时中断的程序。

8.中断源是指发出中断请求的外部设备或引起中断的内部原因。

9.CPU识别中断或获取中断服务程序入口地址的方法有:向量中断和查询中断。

10.中断向量是中断服务程序的入口地址。

11.PC微机上,中断向量由程序自动装入中断向量表;没有配置完善系统软件和单板机上,中断向量由用户手动装入。

12.中断类型号是系统分配给每个中断源的代号。

13.中断类型号在中断处理过程中非常重要。

在采用向量中断方式的中断系统中,CPU需要通过它才可以找到中断服务程序的入口地址,实现程序的转移。

14.中断号(n)×4=中断向量最低字节指针15.当系统中有多个中断源时就可能出现几个中断源同时申请中断,而CPU在一个时刻只能响应并处理一个中断请求,这时中断源要排队。

设置中断优先级,就可以根据中断的轻重缓急给每个中断源指定CPU响应的优先级,任务紧急的先响应,可以暂缓的后响应。

16.级别相同或级别低的中断不能中断级别高的中断服务,这就是中断嵌套。

中断向量表配置

中断向量表配置

中断向量表配置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中断服务了,其它硬件中断向量的配置同理。

STM32 NVIC中断向量表设置以及EXTI中断寄存器设置

STM32 NVIC中断向量表设置以及EXTI中断寄存器设置
trigger selection register)上升沿触发寄存器
图5 4. EXTI_FTSR (Falling trigger selection register)下降沿触发器
图6
需要说明的是,作为外部唤醒线是边沿触发的,这些线上不能出现毛刺信号。 5. EXTI_SWIER (Software interrupt event register) 软件中断事件寄存器
图7 我们可以通过对相应位置写 1,来软件触发中断,对响应 PR 位写 1,清除软件中断。 该寄存器复位值为 0 6. EXTI_PR (Pending Register) 中断挂起寄存器
图8 该寄存器复位值是不确定的,如果某个激活了某个中断,则对应的挂起位会置 1, 如果要手动清除挂起,则我们需要往对应位写 1. 这里需要说明一下,就是中断和中断事件不是同一个概念。从图 2 中我们可以看到 两者的来源都是一致的,但是中断是需要 CPU 参与的,需要软件的中断服务函数才能 完成中断后产生的结果;但是事件,是靠脉冲发生器产生一个脉冲,进而由硬件自动完 成这个事件产生的结果,当然相应的联动部件需要先设置好,比如引起 DMA 操作,AD 转换等。 分析程序
NVIC 中断向量表设置以及 EXTI 中断寄存器设置
一、开始中断的步骤 A. 端口设置。这里包括了输入引脚的设置,务必记得打开 GPIO 的时钟和 AFIO 的时钟 信号 B. 中断寄存器的设置 C. NVIC 中断向量寄存器的设置。这里关键点有优先级分组设置以及中断入口地址的设 置 D. 中断函数的书写
图1 从寄存器配置中我们可以看到每个中断由四位配置,那么 STM32 总计有 16 个外部 中断(具体参照 STM32 参考手册 P133 页),因此 EXTIR 有四组,在书写时要注意。 具体对应关系如下:0000: PA[x] pin,0001: PB[x] pin,0010: PC[x] pin,0011: PD[x] pin 0100: PE[x] pin,0101: PF[x] pin,0110: PG[x] pin。假设我们需要设定外部中断 0 由 GPIOB_0 来控制,那么我就可以写成 AFIO->EXTIR[0] |=0X01; 2、 中断寄存器的设置 A. 首先我们可以观察一下下图

ARM嵌入式中断向量表配置策略和实现方法

ARM嵌入式中断向量表配置策略和实现方法

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等效VectorTable DCD HandleTRQDCD HandleFIQHandleIRQHandleFIQ一般ARM嵌入式系统的程序都是固化在从00000000H开始的低端ROM空间中,中断向量表VectorTable也是固化在ROM中,所以上述两种方法都无法在程序运行时动态随机修改中断向量表。

基于C语言设置TMS320DSP中断向量表

基于C语言设置TMS320DSP中断向量表

基于C语言设置TMS320 DSP中断向量表摘要:随着DSP芯片应用的不断深入,用C语言开发DSP芯片,不仅可以使DSP芯片的开发速度大大提高,也使得程序的修改和移植变得十分方便。

C语言设置TMS320系列DSP中断向量表是高级语言开发DSP的一个具体应用。

关键词: C语言,中断,中断向量表,DSP。

Setting TMS320 DSP Interrupt Vectors Table in CAbstract Along with the development of DSP chip, the exploiture of DSP in C not only accelerate the evolution of DSP ,but also make the program easy to modify and transplant. This is a practice application that setting TMS320 DSP interrupt vectors table in C.Key Words C language, Interrupts, Interrupt vector table, DSP.1、引言DSP(数字信号处理器)自二十世纪70年代末80年代初诞生以来,得到了突飞猛进的发展,在信号处理、通讯、雷达等方面应用越来越广泛,而且开发手段和开发设备也越来越多样化。

其中C语言在DSP开发应用中起着越来越重要的作用,以C 语言编写的DSP应用程序具有可读性、可移植性,易于维护和修改。

另外在DSP应用系统中,中断是完成数据传递、实时处理等的重要手段,因而用C语言完成对DSP中断设置是DSP开发的重要内容。

DSP中断的设置主要包括中断服务程序的编写,中断向量表的设置,中断寄存器的初始化等内容。

本文以TI公司TMS320系列DSP为例,说明用C语言设置中断向量表的方法。

并给出实例进行说明。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中断类型号60 H 中断服务程序 del_myfile30: seg1:offset1 4600:2000
IRET
中断向量表
0000:0000
。。。
0000:60H×4
2000H ?
? 0000: 60H×4+2 4600H
向量表的装入程序之一: 中断类型号60H 中断服务程序 INTITB:MOV AX,0 del_myfile30: MOV DS, AX 4600:2000 MOV SI, 60H×4 MOV AX,OFFSET del_myfile30 IRET MOV [SI], AX MOV AX,SEG del_myfile30: MOV [SI+2], AX
• 实例:一个多路监控系统,由于硬盘容量 有限,只能保存30天的监控数据,为了能 使保存的数据是最新的,每天晚上12点执 行中断服务(定时器中断),自动将30天 前的文件删除。假设中断服务程序已经编 好,中断服务程序的符号地址(存放到内 存中的标号地址del_myfile30。中断类型 号为N=60H。试编一初始化程序,将中断 人口地址装入到向量表中。
中断向量表
H,程序要修改 么?程序执行完了后,哪里 有变化?
0000:0000
。。。
0000:00C0
2000H 4600H
0000:00C2
相关文档
最新文档