中断向量表笔记
中断向量表内容
中断向量表内容
今天,老师给我们讲了一些关于“中断向量表”的事情。
我听得有点晕乎乎的,不太明白是啥意思。
不过,老师说,机器就像我们的“大脑”,它们有时会忙得不得了,需要有人帮忙提醒它们去做别的事情。
就像我做作业做得好好的,妈妈突然叫我去洗碗,我就得中断做作业去洗碗。
老师说,“中断向量表”就是记录这些“提醒”事情的表格,机器在忙得时候,收到“提醒”就会去查这个表格,看看应该去做什么。
嘿,我还想象了一下,如果我是机器,收到了提醒,跑去查表格,突然看到要去做洗碗的事情,我肯定会“哎呀”一声不想去!
有时候,中断向量表里的内容是个小小的号码,这些号码就像是一个个电话号码一样,告诉机器该去找哪个“号码”的事情做。
老师还说,表格上的内容很重要,不对的话,机器可能就会做错事。
我记得老师说完,我脑袋里好像突然冒出了很多小小的“嗡嗡”声,感觉中断向量表好像很神奇,很复杂呢!
—— 1 —1 —。
中断向量表——精选推荐
中断向量表中断向量表是DSP程序的重要组成部分,当有中断发生并且处于允许状态时,程序指针跳转到中断向量表中对应的中断地址。
由于中断服务程序一般较长,通常中断向量表存放的是一个跳转指令,指向实际的中断服务程序。
下面是5402中断向量表的一个范例,可以作为模板,使用时稍作修改就行:******************************************************************5402V ectors.asm*完整的5402中断向量表示例*5402共有30个中断向量,每个向量占4个字的空间。
*使用向量一般用一条跳转指令转到相应中断服务子程序,其余空位用NOP填充*未使用的向量直接用RETE返回,是为了防止意外进入未用中断。
***************************************************************** .sect ".vectors" ;开始命名段.vecotrs.global CodeStart ;引用程序入口的全局符号定义…;引用其它中断程序入口的全局符号定义.align 0x80 ;中断向量表必须对齐128字的页边界RESET: B CodeStart; Reset中断向量,跳转到程序入口NOP ;用NOP填充表中其余空字NOP ;B指令占了两个字,所以要填两个NOPNMI: RETE ;不可屏蔽中断NOPNOPNOP; 软件中断SINT17 .space 4*16 ;软件中断使用较少,简单起见用0填充SINT18 .space 4*16SINT19 .space 4*16SINT20 .space 4*16SINT21 .space 4*16SINT22 .space 4*16SINT23 .space 4*16SINT24 .space 4*16SINT25 .space 4*16SINT26 .space 4*16SINT27 .space 4*16SINT28 .space 4*16SINT29 .space 4*16SINT30 .space 4*16INT0: RETE ;外部中断INT0NOPNOPNOPINT1: RETE ;外部中断INT1NOPNOPNOPINT2: RETE ;外部中断INT2NOPNOPNOPTINT: RETE ;Timer0中断NOPNOPNOPBRINT0: RETE ;McBSP #0 接收中断NOPNOPNOPBXINT0: RETE ;McBSP #0 发送中断NOPNOPNOPDMAC0: RETE ;无定义(默认)DMA0中断NOPNOPNOPTINT1: RETE ;Timer1中断(默认)或DMA1中断. NOPNOPNOPINT3: RETE ;外部中断3NOPNOPNOPHPINT: RETE ;HPI中断NOPNOPNOPBRINT1: RETE ;McBSP #1接收中断(默认)或DMA2中断NOPNOPNOPBXINT1: RETE ;McBSP #1发送中断(默认)或DMA3中断NOPNOPNOPDMAC4: RETE ;DMA4中断NOPNOPNOPDMAC5: RETE ;DMA5中断NOPNOPNOP.end在本实验中只要把在开头加上中断子程序标号的引用,并在中断表的TINT部分换成跳转指令就行了:*vectors.asm for 方波发生.sect ".vectors" ;开始命名段.vecotrs.global CodeStart ;引用程序入口的全局符号定义.global TINT0_ISR ;引用Timer0中断子程序<节省篇幅,中间省略>TINT: B TINT0_ISR ;Timer0中断NOPNOPBRINT0: RETE ;McBSP #0 receive interrupt<节省篇幅,下略>技巧提示:只有第一个中断(Reset中断)是每个程序都应该有的,在不需要其它中断的情况下,可以只用这一部分,后面可以省略。
计算机系统中断向量表基础知识
计算机系统中断向量表基础知识计算机系统中断向量表是指存储系统中断处理程序入口地址的表格。
在计算机运行过程中,当发生硬件故障或软件异常时,中断向量表起到了关键作用。
本文将介绍计算机系统中断向量表的基础知识。
一、中断的概念及分类中断是指由硬件或软件生成的一个信号,用于通知CPU在正常指令执行过程中发生了某种特殊情况。
根据中断的来源,可以将中断分为硬件中断和软件中断两种类型。
硬件中断是由计算机硬件设备生成的,例如外设设备的请求、时钟信号等。
而软件中断则是由软件程序主动触发的,比如系统调用、异常处理等。
二、中断向量表的作用中断向量表的主要作用是将中断号与相应的中断处理程序的入口地址关联起来。
当系统发生中断时,CPU会根据中断号在中断向量表中查找对应的处理程序的入口地址,并跳转到该地址执行中断处理程序。
中断向量表是一个数组或表格,每个元素对应一个中断号,并存储了该中断号对应的中断处理程序的入口地址。
在大部分计算机系统中,中断向量表是预先设置好的,其中的入口地址在操作系统启动时被初始化。
三、中断向量表的结构中断向量表的结构可以有多种形式,常见的格式有直接模式和间接模式。
1. 直接模式:在直接模式中,中断向量表的每个元素存储的是中断处理程序的入口地址。
当发生中断时,CPU会直接跳转到中断向量表中对应中断号的入口地址执行中断处理程序。
2. 间接模式:在间接模式中,中断向量表的每个元素存储的是一个指针,指向中断处理程序的入口地址。
当发生中断时,CPU会先根据中断号找到中断向量表中对应元素的指针,然后再跳转到指针所指向的中断处理程序的入口地址。
四、中断向量表的初始化过程在计算机系统启动时,操作系统会负责初始化中断向量表。
初始化的过程包括两个主要步骤:设置中断号和对应中断处理程序的关联,并将中断向量表的起始地址加载到CPU的特定寄存器中。
首先,操作系统会将每个中断号与对应的中断处理程序进行关联。
这一步骤通常在操作系统的初始化代码中完成。
AVR_中断向量表
C中断向量:#if defined(_ICC_A VR_) // "ICCA VR 编译器"条件编译开始/*==================================================================== ==================中断向量定义====================================================================== ================*/#define IT_RESET 1// 外部引脚、上电复位、掉电检测复位、看门狗复位、以及 JTAG A VR 复位中断向量#define IT_INT0 2 // 外部中断请求0中断向量#define IT_INT1 3 // 外部中断请求1中断向量#define IT_TIMER2_COMP 4 // 定时器/计数器2比较匹配中断向量#define IT_TIMER2_OVF 5 // 定时器/计数器2溢出中断向量#define IT_TIMER1_CAPT 6 // 定时器/计数器1输入捕获中断向量#define IT_TIMER1_COMPA 7 // 定时器/计数器1A比较匹配中断向量#define IT_TIMER1_COMPB 8 // 定时器/计数器1B比较匹配中断向量#define IT_TIMER1_OVF 9 // 定时器/计数器1溢出中断向量#define IT_TIMER0_OVF 10 // 定时器/计数器0溢出中断向量#define IT_SPI_STC 11 // SPI串行传输结束中断向量#define IT_USART_RXC 12 // USART接收结束中断向量#define IT_USART_UDRE 13 // USART数据寄存器空中断向量#define IT_USART_TXC 14 // USART传送结束中断向量#define IT_ADC 15 // ADC转换结束中断向量#define IT_EE_RDY 16 // EEPROM就绪中断向量#define IT_ANA_COMP 17 // 模拟比较器中断向量#define IT_TWI 18 // 两线串行接口中断向量#define IT_INT2 19 // 外部中断请求2中断向量#define IT_TIMER0_COMP 20 // 定时器/计数器0比较匹配中断向量#define IT_SPM_RDY 21 // 保存程序存储器内容就绪中断向量#endif // "_ICC_A VR_" 条件编译结束#if defined(_CodeVision_A VR_) // "CodeV ision A VR C 编译器"条件编译开始#define EXT_INT0 2 // 外部中断请求0中断向量#define EXT_INT1 3 // 外部中断请求1中断向量#define TIM2_COMP 4 // 定时器/计数器2比较匹配中断向量#define TIM2_OVF 5 // 定时器/计数器2溢出中断向量#define TIM1_CAPT 6 // 定时器/计数器1输入捕获中断向量#define TIM1_COMPA 7 // 定时器/计数器1A比较匹配中断向量#define TIM1_COMPB 8 // 定时器/计数器1B比较匹配中断向量#define TIM1_OVF 9 // 定时器/计数器1溢出中断向量#define TIM0_OVF 10 // 定时器/计数器0溢出中断向量#define SPI_STC 11 // SPI串行传输结束中断向量#define USART_RXC 12 // USART接收结束中断向量#define USART_DRE 13 // USART数据寄存器空中断向量#define USART_TXC 14 // USART传送结束中断向量#define ADC_INT 15 // ADC转换结束中断向量#define EE_RDY 16 // EEPROM就绪中断向量#define ANA_COMP 17 // 模拟比较器中断向量#define TWI 18 // 两线串行接口中断向量#define EXT_INT2 19 // 外部中断请求2中断向量#define TIM0_COMP 20 // 定时器/计数器0比较匹配中断向量#define SPM_READY 21 // 保存程序存储器内容就绪中断向量#endif // "defined(_CodeVision_A VR_)" 条件编译结束#if defined(_IAR_EW_A VR_) // "IAR Embedded Workbench A VR 编译器"条件编译开始#define RESET_vect (0x00)// 外部引脚、上电复位、掉电检测复位、看门狗复位、以及 JTAG A VR 复位中断向量#define INT0_vect (0x04) // 外部中断请求0中断向量#define INT1_vect (0x08) // 外部中断请求1中断向量#define TIMER2_COMP_vect (0x0C) // 定时器/计数器2比较匹配中断向量#define TIMER2_OVF_vect (0x10) // 定时器/计数器2溢出中断向量#define TIMER1_CAPT_vect (0x14) // 定时器/计数器1输入捕获中断向量#define TIMER1_COMPA_vect (0x18) // 定时器/计数器1A比较匹配中断向量#define TIMER1_COMPB_vect (0x1C) // 定时器/计数器1B比较匹配中断向量#define TIMER1_OVF_vect (0x20) // 定时器/计数器1溢出中断向量#define TIMER0_OVF_vect (0x24) // 定时器/计数器0溢出中断向量#define SPI_STC_vect (0x28) // SPI串行传输结束中断向量#define USART_RXC_vect (0x2C) // USART接收结束中断向量#define USART_UDRE_vect (0x30) // USART数据寄存器空中断向量#define USART_TXC_vect (0x34) // USART传送结束中断向量#define ADC_vect (0x38) // ADC转换结束中断向量#define EE_RDY_vect (0x3C) // EEPROM就绪中断向量#define ANA_COMP_vect (0x40) // 模拟比较器中断向量#define TWI_vect (0x44) // 两线串行接口中断向量#define INT2_vect (0x48) // 外部中断请求2向量#define TIMER0_COMP_vect (0x4C) // 定时器/计数器0比较匹配中断向量#define SPM_RDY_vect (0x50) // 保存程序存储器内容就绪中断向量#endif // "defined(_IAR_EW_A VR_)" 条件编译结束汇编语言中断向量:;************************************************************************* ;* 中断向量位置声明 *;************************************************************************* ;******** 中断向量地址定义:.equ INT0addr = 0x002 ;外部中断请求0向量地址.equ INT1addr = 0x004 ;外部中断请求1向量地址.equ OC2addr = 0x006 ;定时器/计数器2比较匹配中断向量地址.equ OVF2addr = 0x008 ;定时器/计数器2溢出中断向量地址.equ ICP1addr = 0x00a ;定时器/计数器1输入捕获中断向量地址.equ OC1Aaddr = 0x00c ;定时器/计数器1A比较匹配中断向量地址.equ OC1Baddr = 0x00e ;定时器/计数器1B比较匹配中断向量地址.equ OVF1addr = 0x010 ;定时器/计数器1溢出中断向量地址.equ OVF0addr = 0x012 ;定时器/计数器0溢出中断向量地址.equ SPIaddr = 0x014 ;SPI串行传输结束中断向量地址.equ URXCaddr = 0x016 ;USART接收结束中断向量地址.equ UDREaddr = 0x018 ;USART数据寄存器空中断向量地址.equ UTXCaddr = 0x01a ;USART传送结束中断向量地址.equ ADCCaddr = 0x01c ;ADC转换结束中断向量地址.equ ERDY addr = 0x01e ;EEPROM就绪中断向量地址.equ ACIaddr = 0x020 ;模拟比较器中断向量地址.equ TWIaddr = 0x022 ;两线串行接口中断向量地址.equ INT2addr = 0x024 ;外部中断请求2向量地址.equ OC0addr = 0x026 ;定时器/计数器0比较匹配中断向量地址.equ SPMRaddr = 0x028 ;保存程序存储器内容就绪中断向量地址。
中断向量表
在DOS系统(实模式)下,从0x20开始,用于操作系统本身。
保护模式
在Linux下(保护模式),没有使用BIOS设置的中断向量表,0x00 ~ 0x1F是CPU保护模式下的默认中断向 量,而0x20开始,都是被Linux系统重新设置的。
X86占用的中断向量表如下: Linux自己设置的中断以后再添加。
谢谢观看
基本简介
基本简介
是指中断服务程序入口的偏移量与段基址,一个中断向量占据4字节空间。中断向量表是8086系统内存中最 低端1K字节空间,它的作用就是按照中断类型号从小到大的顺序存储对应的中断向量,总共存储256个中断向量。 在中断响应过程中,CPU通过从接口电路获取的中断类型号(中断向量号)计算对应中断向量在表中的位置,并 从中断向量表中获取中断向量,将程序流程转向中断服务程序的入口。
中断向量表
中断源的识别标志
目录
01 基本简介
02 列表
基本信息
中断源的识别标志,可用来形成相应的中断服务程序的入口或存放中断服务程序的首称为中断向量。在 Pc/AT中由硬件产生的中断标识码被称为中断类型号(当然,中断类型号还有其他的产生方法,如指令中直接给 出、CPU自动形成等),即在中断响应期间8259A产生的是当前请求中断的最高优先级的中断源的中断类型号。中 断类型号和中断向量之间有下面的关系:中断类型号×4=存放中断向量的首有了存放中断向量的首,从该开始的 4个存储单元中取出的就是中断服务程序的入口
ppc880中断处理笔记
Chapter07--中断管理一.中断概述中断是另外的一个执行线程单元,中断处理不归属于操作系统内核调度,而是由CPU 硬件相关机制异步触发。
中断处理是整个运行系统中优先级最高的代码,可以抢占任何任务级代码运行。
某些CPU还支持中断分级,高级中断可以抢占低级中断运行。
中断机制是多任务环境运行的基础,是系统实时性的保证。
中断可以抢占优先级最高的任务。
VxWorks使用中断表来提供中断级的服务¾ISR连接到唯一的中断向量¾中断表中,在合适的中断向量处,包含中断处理器(interrupt handlers)一个VxWorks中断处理器:¾保存CPU中断上下文¾调用一个C语言的ISR¾恢复CPU上下文,当ISR返回后¾管理中断级的上下文变量¾中断表的基址在usrInit()中配置中断向量(Interrupt Vectors)中断向量是中断表中对应于中断处理程序的地址。
这个地址是相对于中断表基址的偏移量。
中断号(interrupt numbers)中断号顺序地表示中断表的入口(Entries)宏定义intVector = INUM_TO_IVEC (intNumber)来完成中断号到中断向量的转换二.中断处理程序设计注意事项为了提高对中断的响应速度,VxWorks系统设计使得ISR运行在一种特殊的上下文环境中,它没有任务控制块,因此在中断响应过程中省去了任务上下文切换,同时所有ISR 共享一个中断堆栈。
只有ISR完成后任务才能执行。
ISR的约束(限制) 如下:¾ISR不能有任何可能直接或者间接导致阻塞的代码:如不能调用semTake()函数,ISR可以调用semGive()函数;由于内存操作函数malloc()和free()的内部都用到了信号量,因此这两个函数也不能由ISR直接或者间接引用。
IS R不能调用任何完成创建或者释放功能的函数¾ISR中不要使用VxWorks的IO驱动程序的I/O操作。
中断向量表笔记
中断向量笔记大头小脑1、中断向量表(Interrupt Vector Table是ISR(Interrupt Service Routine)进入点的数组)2、当CPU开始处理一个中断的时候(从优先级号开始),根据优先级计算中断向量表中和这个中断相关的地址。
这个地址被载入到程序计数器。
CPU开始执行这个地址存储的指令(在中断向量表中),这个地址的代码是所选择的ISR的开始。
由于ISR的大小关系,中断向量表可能仅仅存储ISR的初始化部分,比如:一个跳转指令,这个跳转指令把CPU引导到ISR的在存储区域的剩余程序部分。
3、中断向量表存储在代码存储区域。
BIV寄存器指定了中断向量表的具体地址。
中断向量在中断向量表中是按照优先级增长的方式递增的。
4、BIV寄存器存储着中断向量表的基地址。
其可以分配到任何一个可用的代码存储区域。
5、在系统初始化中可以改变BIV的值。
在这种方法下,可以有多个中断向量表,通过改变BIV的值它们之间可以切换。
6、中断向量表是根据中断优先级而组织的。
7、TC1728提供附加的选项:允许跨过几个没有被用的中断向量进入点。
8、使用BIV寄存器和优先级号来计算(P1013)(P1014)PIPN左移5bits和BIV寄存器的值“或”运算,得到指向中断向量表的指针。
CCPN现在的CPU优先级号,PIPN,正在等待的CPU优先级号。
总结:1、TriCore是以中断的优先级来定义中断向量表,每一个服务请求可以分配一个独立的优先级2、Power PC是以中断的属性来定义中断向量表,只有16个优先级。
3、中断向量表是在startup中初始化的,一般在库中,不可见。
中断向量表-西华大学
软件中断
硬件中断
可屏蔽中断请求
西华大学电气信息学院 郑海春
1.软件中断(内部中断)
软件中断的特点是:
1)是指令中指定的,或隐含的,或是预定的。 2)CPU不执行中断响应总线周期INTA。 3 )除单步中断外,其他内部中断的优先级都比 外部中断的要高,都不能被屏蔽(禁止)。
4 )单步中断的优先级是所有中断里最低的,它 可以用中断允许标志位TF置0来屏蔽。
7.1.3 中断系统的功能
1.实现中断及返回 当某一中断源发出中断申请时,若允许响应这个中断 请求,CPU必须在现行的指令执行完后,把断点处的IP 和CS值(即下一条应执行的指令的地址)、各个寄存 器的内容和标志位的状态推入堆栈保留下来——称为 保护断点和现场。然后转到需要处理的中断源的服务 程序的入口,同时清除中断请求触发器。当中断处理 完后,再恢复被保留下来的各个寄存器和标志位的状 态(称为恢复现场),恢复IP和CS值(称为恢复断 点),CPU返回断点,继续执行主程序。
BP SP DI SI DX CX BX AX
;开中断 ;中断服务 ;关中断 ;恢复现场
;开中断 ;中断返回
返回本节
西华大学电气信息学院 郑海春
7.3 IBM-PC机中断系统结构
•7.3.1 8086/8088CPU的中断结构体系
•7.3.2 8086/8088中断优先级
•7.3.3 IBM-PC/XT的中断控制逻辑
MOV MOV MOV ADD DS,AX SI,0210H ; 84H*4 DS:[SI], 5670H SI,2
MOV
DS:[SI],1234H
西华大学电气信息学院 郑海春
用方法二实现中断向量表的初始化:
功能调用。DOS功能调用指令INT 21H的25号功能可以 设置中断向量。在执行INT 21H前,预置参数是: AH=25H;AL=中断类型号;DS:DX中预置中断向量。 MOV AH,25H;功能号
threadx学习笔记
tx_ill.s文件用来处理初始化过程中的汇编语言,它是面向处理器和开发工具的。
Void_tx_initialize_low_level{1、CPSCR|= FIQ_ MODE,SET SP_fiq;2、CPSCR|=IRQ_MODE,SET SP_irp;3、CPSCR|=SVC_MODE,SET SP_svc;4、设置中断向量表IRQ_TABLE;5、设置内部TIMER线程的堆栈起始地址,堆栈大小和优先级::tx_timer_stack_start,_tx_timer_stack_size,_tx_timer_priorit;6、设置初始化后未使用内存地址的初始值_tx_initialize_unused_memory;}Tx_tcs.s负责在中断发生时对上次的运行现场进行保存,它保存中断上下文,为了不覆盖R14_irq离得中断返回地址,TCS的返回是通过跳到__tx_irq_processing_return地址做到的。
Tx_TCR.S负责中断处理程序执行完后的处理。
Void _tx_thread_context_save{1、把表示中断嵌套个数的变量_tx_thread_system_state++;2、if _tx_thread_system_state>1,PUSH R0-R3,CPSR,R14 in IRQ stack,B__tx_irq_processing_return;3、else if _tx_thread_current_ptr=0判断是否有线程正在运行,if not ,B_tx_irq_processing_return;4、else,P USH Context_irq in thread’s stack,SP_thread=new SP,B_tx_irq_processing_return;}由于R13和R14在不同的CPU模式下对应的是不同的物理寄存器,所以若要得到中断前的线程堆栈指针,需要先返回到该线程的运行模式,同时禁止中断,取值后再返回到终端模式。
AVR笔记:外部中断
A VR学习笔记之【外部中断】【一】Mega16共有三个外部中断,外部中断相比定时器而言它的寄存器比较少,因此相对比较简单。
我们现在只关心需要用的部分,其他的暂且放弃不管。
和外部中断相关的特殊功能寄存器有:①MCU控制寄存器(MCUCR)在上面八位的寄存器中,白色的部分使我们要关心的,灰色部分就不用管了。
资料上对后面四位(第四位)的作用有介绍。
ISC11与ISC10控制中断1的触发方式。
下表为ISC10/11的值对应触发方式:SC11与ISC10控制中断0的触发方式。
下表为ISC00/01的值对应触发方式:我们在使用外部中断0和1的时候,其触发方式的设置便是通过以上ISC的不同值实现的。
至于INT2下面有介绍。
②MCU控制与状态寄存器(MCUCSR)这个寄存器只有一个BIT与外部中断相关。
ISC2,我们通过和INT0/1的对比可以发现ISC的后缀数字命名只有规律的,这会方便我们记忆。
同时在说明文档上说了很长一段关于ISC2的说明:他的意思说早了,他也就是想说:ISC=0的话INT2是下降沿出发中断,ISC=1是上升沿出发。
这才是应该说明的最重要的点。
他后面还说了:(1)如果你让ISC=0那么外部的低电平必须保持到当前正在运行的指令运行结束才会出发,换一句意思就是,如果外部时间过短,有可能导致INT2不被触发。
(2)他又说明,如果改变ISC2的值的话有可能触发中断,导致误判,因此如果你想改变其中断触发方式的话,首先把通用中断控制寄存器(GICR)里面控制INT2的中断开关关了,这样便不会触发中断了。
③通用中断控制寄存器(GICR)他就是个中断开关。
前面三位依次赋值便会打开响应中断。
当然总中断开关也要打开才行(SREG|=BIT(7))。
④通用中断标志寄存器(GIFR)他就是一个中断标志,我们也就是说在中断发生的时候中断对用的标志会变为1,此时程序会自动转到中断程序子函数。
然后有硬件自动清零,以等待下一次的中断发生。
我的DSP之路-关于中断(附中断向量表)
我的DSP之路-关于中断(附中断向量表)2008-3-8中断标志寄存器IFR,由CPU内核控制,一旦中断被响应,IFR会被CPU自动清除(除INTR指令引起的中断外),不需要人工干预。
IFR中断标志寄存器只有INT1~INT6,那上面说的是用INTR引起外部中断,那时就需要人工干预了?引起的中断如何执行?无法观察到IFR的变化,其一直为0,可能是有置1,只是中断响应又把它清0了。
那上述所说的除外情况是怎样的情况呢。
用INTR进外部中断时,不可屏蔽,即IMR对其无影响。
IMR只是屏蔽对外部中断源的响应。
CMD文件里可以用/* */来注释,其它的汇编的文件,如.ASM、.H文件就只能用;来注释。
外部中断XINT1、XINT2。
外部中断输入引脚必须至少被拉低或拉高5或11个CLKOUT 时钟周期才被认为是有效的中断请求输入,这由SCSR2中的I/O QUAL位决定。
每一个外设中断都有三个屏蔽位:INTM、INTn、各自的屏蔽位。
两个中断请求标志位:IFR、PIRQR0~2、各自的中断请求标志位。
2008-3-10中断被响应后,CUP级IFR中相应中断标志位自动清零,外部中断的XINT1/2的外设级中断标志位也会自动被清零;但片内外设(包括事件管理中断和系统模块中断)中断被响应后不会自动清0,需要用户对其进行写1清0。
通过INTR指令来请求中断时,CPU不会清除IFR中的位。
但仿真时观察IFR值一直为0?通过INTR指令来请求外设中断时,不会装PIVR外设中断向量,PIVR默认的0000装入。
INTM在硬件中断被响应时自动置1,因此在中断服务程序返回时一定要重新开中断。
如果要实现中断嵌套,可以在中断服务程序中开放中断。
查看是否有可屏蔽中断发出请求,应看其标志位而不是PIRQR0~2。
中断有两个中断向量:CPU中断向量(即0~40H地址的向量表)和外设中断向量PIV。
参考:中断向量表(文档)。
软硬中断以及中断向量表
软硬中断以及中断向量表概述中断(英语:Interrupt)是指处理器接收到来⾃硬件或软件的信号,提⽰发⽣了某个事件,应该被处理器注意,这种情况就称为中断。
通常,在接收到来⾃外围硬件(相对于中央处理器和内存)的异步信号,或来⾃软件的同步信号之后,处理器将会进⾏相应的硬件/软件处理。
发出这样的信号称为进⾏中断请求(interrupt request,IRQ)。
硬件中断导致处理器通过⼀个运⾏信息切换(context switch,也叫上下⽂切换)来保存执⾏状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的⼀个指令,以可编程的⽅式直接指⽰这种运⾏信息切换,并将处理导向⼀段中断处理代码。
中断在计算机多任务处理,尤其是即时系统中尤为有⽤。
这样的系统,包括运⾏于其上的操作系统,也被称为“中断驱动的”(interrupt-driven)。
中断是⽤以提⾼计算机⼯作效率、增强计算机功能的⼀项重要技术。
最初引⼊硬件中断,只是出于性能上的考量。
如果计算机系统没有中断,则处理器与外部设备通信时,它必须在向该设备发出指令后进⾏忙等待(Busy waiting),反复轮询该设备是否完成了动作并返回结果。
这就造成了⼤量处理器周期被浪费。
引⼊中断以后,当处理器发出设备请求后就可以⽴即返回以处理其他任务,⽽当设备完成动作后,发送中断信号给处理器,后者就可以再回过头获取处理结果。
这样,在设备进⾏处理的周期内,处理器可以执⾏其他⼀些有意义的⼯作,⽽只付出⼀些很⼩的切换所引发的时间代价。
后来被⽤于CPU外部与内部紧急事件的处理、机器故障的处理、时间控制等多个⽅⾯,并产⽣通过软件⽅式进⼊中断处理(软中断)的概念。
在硬件实现上,中断可以是⼀个包含控制线路的独⽴系统,也可以被集成进存储器⼦系统中。
对于前者,在IBM个⼈机上,⼴泛使⽤(Programmable Interrupt Controller,PIC)来负责中断响应和处理。
STM8学习笔记——定时器定时功能和中断相关
STM8学习笔记——定时器定时功能和中断相关
定时器都差不多,无非就是计数,溢出了标志置位,如果中断允许的话产
生一个中断。
说到中断,STM8S105 的中断向量表如下
时基单元:
在选用内部时钟的情况下,CK_PSC 是由fmaster 提供的,经过定时器预分频器分频产生CK_CNT 时钟,然后作为一次计数的时基,举个例子,16M 的
内部RC,经过16 分频,则CK_CNT 为1M,那么定时1ms 只需计数1000 次。
计数模式:
共有三种:向上,向下,中央对齐
以向上计数为例:计数器从0 计数到用户定义的比较值(TIMx_ARR 寄存器
的值),然后重新从0 开始计数并产生一个计数器溢出事件,同时,如果
TIM1_CR1 寄存器的UDIS 位是0,将会产生一个更新事件(UEV)。
关于IAR 中断函数的写法
asm(“sim”);//关全局中断
asm(“rim”);//开全局中断
#pragma vector=TIM2_OVR_UIF_vector (这里根据上面的中断向量表选择要进入的中断的向量)
__interrupt void TIM2_OVR_UIF(void)//__interrupt 关键字表示中断函数{ TIM2_SR1 &=~0x01; // 清除更新中断标记,这步不能漏掉,否则会连续进入中。
汇编语言学习笔记12
第十二章内中断任何一种cpu都有这样的能力:可以在执行完当前正在执行的操作后,检测到cpu从外部发送过来的或内部产生的一种特殊信息,并且能够对这种信息进行迅速的处理。
这种特殊的信息我们就可以将它们称--中断信息。
中断就是cpu 不在继续执行本来的指令而是转向操作处理传来的特殊信息。
我们所说的中断,是为了便于理解而采用的一种逻辑上的说法,它是对几个先后顺序的硬件操作产生的时间的统一描述。
内中断的产生中断类型码除法溢出 0单步执行 1执行int0指令 4执行int指令指令格式为 int n 当这几种情况产生的时候,cpu就会接收到中断来源cpu 也会接受道不同的中断信息。
故中断信息必须包含识别来源的编码。
中断类型码是一个字节型数据,我们将产生中断信息的事件,称为中断源,中断处理程序Cpu接收到中断信息后,如何队中断信息进行处理可以由我们编程决定,当然用来处理中断的程序就叫做中断处理程序。
Cpu在收到中断信息后会根据中断源的类型码来进行处理中断信息,比如cpu根据中断类型码4,就可以找到4号中断的处理程序,当然cpu的有些中断处理程序是cpu的设计者早就设计好了的,当发生中断的时候cpu会自动调用这些程序。
中断向量表中断向量表就是中断向量的列表,所谓的中断向量就是就是中断处理程序的入口地址。
中断向量表就是中断处理程序的入口地址的列表中断向量表在内存中存放,对于8086pc机,中断向量表指定存放在内存地址0处。
从0000:0000---0000:03e8的1000个内存单元存放着中断向量表,这些中断程序入口地址列表不能存放到别处,其中一个表项存放一个中断向量,也是一个中断处理程序的入口地址,它包括段地址和偏移地址,所以每个表项占两个字,高地址存放段地址,低地址存放偏移地址。
中断过程Cpu接收到中断信息,自然就知道了中断信息编码(中断向量)中断向量的作用就是告诉cs和ip,相应的中断程序的入口地址(其实中断向量表就是存储了各种中断程序的入口地址)、知道了地址相应的设置了cs和ip那么cpu就会去转而执行中断处理程序,额弱弱地说cpu在进行cs和ip的转移时会相应的保存原来的cs和ip的信息(这就用到了以前学的栈指令咯)目的是执行完中断程序后赚回来继续执行原来的程序我们进行详细介绍中断处理过程:从终端信息中获得中断类型码标志寄存器的值入栈(中断过程会改变标志寄存器的值)设置flag的第8位和第9位改成零(tf和if)Cs内容入栈Ip内容入栈从内存地址为中断类型码*4和中断类型码*4+2的两个字单元中读取入口地址列表,设置ip和cs这样 cpu就会转而去执行中断处理程序了中断处理程序中断处理程序的编写方法和子程序的编写类似,如下是常规步骤保存中断处理程序中将要用到的寄存器内容处理中断恢复寄存器原来的内容用iret指令返回这就是整个中断的处理程序原理解析一下iret指令Pop ipPop csPopf我们就来改写一下0号中断来进行体验一下中断处里程序得编写我们首先要明确一下思路:我们早就知道,0号中断向量表的内容早就写入了cpu设计者早就编好的中断处理程序入口地址,我们首先要将0号向量内容改写(为的是把程序入口地址改成我们自己编写的程序入口地址)其次我们还要将自己编写的程序加载到内存中,主要也是这两个步骤,只要我们完成了这两个步骤中断处理程序也就完成了差不多了。
2.28335中断向量表
中断向量表单片机的程序一般情况下上电之后是从0x0地址开始运行的,而0x0后面是关于硬件的一些对应的中断的入口地址。
所以中断向量表其实就是硬件查表跳转表,相当于C语言的switch 语句。
如:Switch(i){Case 0: goto reset;Case 1: goto int0 ;….}关于I的值就是硬件给出的中断向量。
2406中断向量表:.ref _bad_trap.ref _c_int0.sect "vectors" ;自定义段名_vector: ;向量表地址标识RSVECT B _c_int0 ;C项目初始化入口地址INT1 B _bad_trap ;没有用到的中断跳转到非法中断陷阱INT2 B _bad_trapINT3 B _PM6 ;有用到的中断,则写其实际中断的地址或标号INT4 B _bad_trap ; PM 8 Int level 4 7INT5 B _bad_trap ; PM A Int level 5 8INT6 B _bad_trap ; PM C Int level 6 9……..endPAGE 0 : /* program memory */VECS: origin = 00000h, length = 0007Fhvectors : > VECS PAGE = 0这样就可以把中断向量表写到正确的地址。
.ref _bad_trap 这个标号外部没有定义,为什么还用.ref,而不是用..global?因为_bad_trap在这里只是声明函数,它实际函数可能是.C文件里的bad_trap()函数。
CPU中断向量地址和外设中断向量PIV有什么不同?什么是外设中断向量PIV?一个CPU中断包括好几个外设中断,如INT1包括了PDPINTA、PDPINTB、ADCINT、XINT1、XINT2、SPIINT、RXINT、TXINT、CANMBINT、CANERINT。
中断向量表——精选推荐
中断向量表中断向量地址⼀览表⼀、8088中断向量0-3 4-7 8-B C-F 10-13 14-17 18-1F123456,7除以零单步(⽤于DEBUG)⾮屏蔽中断断点指令溢出打印屏幕保留⼆、8259中断向量20-23 24-27 28-2B 2C-2F 30-33 34-37 38-3B 3C-3F 89ABCDEF定时器键盘彩⾊/图形异步通讯(secondary)异步通讯(primary)硬磁盘软磁盘并⾏打印机三、BIOS中断40-43 44-47 48-4B 4C-4F 50-53 54-57 58-5B 5C-5F 60-63 64-67 68-6B 101112131415161718191A屏幕显⽰设备检验测定存储器容量磁盘I/O串⾏通讯⼝I/O盒式磁带I/O键盘输⼊打印机输出BASIC⼊⼝代码引导装⼊程序⽇时钟四、提供给⽤户的中断6C-6F 70-731B1CCtrl-Break控制的软中断定时器控制的软中断五、数据表指针74-77 78-7B 7C-7F 1D1E1F显⽰器参量表软盘参数表图形表六、中断80-83 84-87 88-8B 8C-8F 20212223程序结束系统功能调⽤结束退出Ctrl-Break退出90-93 94-97 98-9B 9C-9F A0-BB BC-BF C0-FF2425262728-2E2F30-3F严重错误处理绝对磁盘读功能绝对磁盘写驻留退出DOS保留打印机DOS保留七、BASIC中断100-17F 180-19F 1A0-1FF 200-217 218-3C3 3C4-3FF 40-5F60-6768-7F80-8586-F0F1-FF保留⽤户软中断保留由BASIC保留BASIC中断保留DOS功能调⽤* AH=0-2E适⽤DOS1.0以上版本;*AH=2F-57适⽤DOS2.0以上版本;*AH=58-62适⽤DOS3.0以上版本.BIOS中断INT AH功能调⽤参数返回参数100设置显⽰⽅式AL=00 40*25⿊⽩⽅式=01 40*25彩⾊⽅式=02 80*25⿊⽩⽅式=03 80*25彩⾊⽅式=04 320*200彩⾊图形⽅式=05 320*200⿊⽩图形⽅式=06 640*200⿊⽩图形⽅式=07 80*25单⾊⽂本⽅式=08 160*200 16⾊图形=09 320*200 16⾊图形=0A 640*200 16⾊图形=0B 保留(EGA)=0C 保留(EGA)=0D 320*200彩⾊图形(EGA)=0E 640*200彩⾊图形(EGA)=0F 640*350⿊⽩图形(EGA)=10 640*350彩⾊图形(EGA)=11 640*480单⾊图形(EGA)=12 640*480 16⾊图形(EGA)=13 320*200 256⾊图形(EGA)=40 80*30彩⾊⽂本(CGE400)=41 80*50彩⾊⽂本(CGE400)=42 640*400彩⾊⽂本(CGE400)101置光标类型(CH)0-3=光标起始⾏(CL)0-3=光标结束⾏102置光标位置BH=页号,DH,DL=⾏,列103读光标位置BH=页号CH=光标起始⾏,DH,DL=⾏,列104读光笔位置AH=0光笔未触发,=1光笔触发CH=象素⾏, BX=象素列,DH=字符⾏,DL=字符列105置显⽰页AL=页号106屏幕初始化或上卷AL=上卷⾏数,AL=0整个窗⼝空⽩BH=卷⼊⾏属性,CH=左上⾓⾏号,CL=左上⾓列号,CH=右下⾓⾏号,DL=右下⾓列号107屏幕初始化或下卷AL=下卷⾏数,AL=0整个窗⼝空⽩BH=卷⼊⾏属性,CH=左上⾓⾏号,CL=左上⾓列号,DH=右下⾓⾏号,DL=右下⾓列号108读光标位置的字符和属性BH=显⽰页AH=属性,AL=字符109在光标位置显⽰字符及其属性BH=显⽰页,AL=字符,BL=属性CX=字符重复次数10A在光标位置显⽰字符BH=显⽰页,AL=字符CX=字符重复次数10B置彩⾊调板(320*200图形)BH=彩⾊调板IDBL=和ID配套使⽤的颜⾊10C写象素DX=⾏(0-199) CX=列(0-639)AL=象素值10D读象素DX=⾏(0-199) CX=列(0-639)AL=象素值10E显⽰字符(光标前移)AL=字符,BL=前景⾊10F取当前显⽰⽅式AH=字符列数,AL=显⽰⽅式1013显⽰字符串(适⽤AT)ES:BP=串地址,CX=串长度DH,DL=起始⾏,列,BH=页号AL=0,BL=属性串:char,char...AL=1,BL=属性串:char,char...AL=2 光标返回起始位置 光标跟随移动光标返回起始位置AL=2串:char,attr,char, attr,... AL=3串:char,attr,char,attr,...光标返回起始位置 光标跟随移动11设备检验AX=返回值bit0=1,配有磁盘bit1=1,80287协处理器bit4,5=01,40*25BW(彩⾊板)=10,80*25BW(彩⾊板)=11,80*25BW(⿊⽩板)bit6,7=软盘驱动器号bit9,10,11= RS-232板号bit12=游戏适配器bit13=串⾏打印机bit14,15=打印机号12测定存储器容量AX=字节数(KB)130软盘系统复位131读软盘状态AL=状态字节132读磁盘AL=扇区数CH,CL=磁道号,扇区号DH,DL=磁头号,驱动器号ES:BX=数据缓冲区地址读成功:AH=0AL=读取的扇区数读失败:AH=出错代码133写磁盘同上写成功:AH=0 AL=写⼊的扇区数写失败: AH=出错代码134检验磁盘扇区同上(ES:BX不设置)成功:AH=0 AL=检验的扇区数失败:AH=出错代码135格式化盘磁道ES:BX=磁道地址成功:AH=0 失败:AH=出错代码140初始化串⾏通讯⼝AL= 初始化参数DX=通讯⼝号(0,1)AH = 通讯⼝状态AL = 调制解调器状态141向串⾏通讯⼝写字符AL=字符,DX=通讯⼝号(0,1)写成功:(AH)7=0写失败:(AH)7=1(AH)0-5=通讯⼝状态142从串⾏通讯⼝读字符DX=通讯⼝号(0,1)读成功:(AH)7=0,(AL)=字符读失败:(AH)7=1,(AH)0-6=通讯⼝状态143取通讯⼝状态DX=通讯⼝号(0,1)AH=通讯⼝状态AL=调制解调器状态150启动盒式磁带马达151停⽌盒式磁带马达152磁带分块读ES:BX=数据转输区地址AH=状态字节CX=字节数AH=00读成功,=01冗余检验错=02⽆数据传输,=04⽆引导,=80⾮法命令AH=状态字节(同上)153磁带分块写DS:BX=数据传输区地址CX=字节数160从键盘读字符AL=字符码,AH=扫描码161读键盘缓冲区字符ZF=0 AL=字符码,AH=扫描码ZF=1 缓冲区空162取键盘状态字节AL=键盘状态字节170打印字符,回送状态字节AL=字符,DX=打印机号AH=打印机状态字节DX=打印机号AH=打印机状态字节171初始化打印机,回送状态字节172取状态字节DX=打印机号AH=打印机状态字节1A0读时钟CH:CL=时:分DH:DL=秒:1/100秒1A1置时钟CH:CL=时:分,DH:DL=秒:1/100秒1A2读实时钟CH:CL=时:分(BCD)DH:DL=秒:1/100秒(BCD)1A6置报警时间CH:CL=时:分(BCD)DH:DL=秒:1/100秒(BCD)1A7清除报警。
计算机组成原理与接口技术笔记 12 第十二周 第四五章
第四章中断调用指令INT 21HINT 10H宏的概念中断:引发中断有两种可能:1、硬件引发2、软件引发通过INT(interrupt)指令或者异常来产生。
没有中断的时候,只能对外围设备进行轮询。
有了中断,外围设备可以向CPU请求响应中断。
中断用字节来表示,中断最多可以有256个,从00H~FFH响应中断:去执行已知对应的中断服务程序。
中断服务程序要存储在内存中。
中断请求的操作过程:1、执行中断程序的时候也有保存现场,不仅是断点(IP)的保护,还有对标志寄存器的保护。
2、找到相应的中断服务程序,并执行把所有的中断服务程序放到一起,然后把每个中断服务程序的入口地址放到一个表中,这个表就是中断向量表。
根据这个表去查找到相应的中断服务程序的入口地址。
入口地址:段地址+ 偏移地址两个地址都是16位的,每个入口地址都占用32位,即4个字节。
整个中断向量表占用的空间为:4 ×256 = 1024字节= 1KB内存的最开始1K用来存储中断向量表。
中断向量表是按中断号顺序存放的。
比如0000 ~ 0003就是第一号中断……只要把中断号乘以4就是它对应的中断在中断向量表的地址。
中断和子程序调用的区别:中断向量号一旦确定,它的中断服务程序在内存中的位置是固定的,而子程序调用时,子程序在内存中的位置是随机的。
中断的发生是随机的,子程序调用在程序写出来之后是确定的。
有些中断请求是可以屏蔽掉的,而子程序调用是不能屏蔽的。
返回指令:中断服务返回是IRET,要把FR也恢复出来,子程序调用RET,不会改变FR 的值。
硬件中断:INTR和NMI这两个引脚用来接收中断请求,高电平就是接收到中断请求。
NMI获得的中断是不可屏蔽中断,INTR接收的中断请求是可屏蔽中断,只要IF = 0就是屏蔽中断请求。
软件中断:由INT指令引发的中断,与外围设备没有关系的。
00H~1FH这32个中断是被BIOS占用的。
20H~3FH这32个中断是被DOS占用的。
中断向量表详解
8.4 BIOS中断调用8.4.1 BIOS中断调用概述BIOS (BasicInput/OutputSystem)是IBM-PC机的监控程序,它固化在微型机主板的ROM中,其内容主要有系统测试程序 (Post)、初始化引导程序(Boot)、I/O设备的基本驱动程序和许多常用程序模块,它们一般以中断服务程序的形式存在。
例如,负责显示输出的显示 I/O程序为10H号中断服务程序;负责打印输出的打印I/O程序为17H中断服务程序等。
图8.5 是用户程序和操作系统关系示意图,由图可见BIOS程序直接建立在硬件基础上,磁盘操作系统(DOS)和其他操作系统建立在BIOS基础上,各种高级语言 则建立在操作系统基础上。
用户程序可以使用高级语言,也可以调用DOS 或其他操作系统,还可以调用BIOS,甚至直接指挥硬件设备。
通常应用程序调用DOS提供的系统功能,完成输入/输出或其他操作,这样做用户可以少考虑硬件,实现起来容易。
图8.5 用户程序和操作系统关系示意图应用程序直接对硬件编程的优点是程序的效率高,缺点是需要程序员对硬件性能有较深的了解。
总的来说,编程复杂,所以一般不直接对硬件编程。
BIOS中断程序处于DOS功能调用和硬件环境之间。
和DOS功能调用相比其优点是效率高,缺点是编程相对复杂;和直接对硬件编程相比,优点是实现相对容易,缺点是效率相对低。
在下列情况下可考虑使用BIOS中断:(1)有些功能DOS没有提供,但BIOS提供了;(2)有些场合无法使用DOS功能调用;(3)其他原因。
8.4.2BIOS中断调用方法BIOS的调用实际上是利用每一台计算机中BIOS固有的I/O操作程序来方便地解决自己的问题,由于这些已经在计算机中了,故使用时不必要再把它写入自己的程序,只要指明它的操作位置就可以了。
1.BIOS调用的基本操作由于BIOS中的每一种功能调用往往包含不同的几个操作细节,因此调用时需要说明三部分,基本步骤为:(1)设置分功能号。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
中断向量笔记
大头小脑
1、中断向量表(Interrupt Vector Table是ISR(Interrupt Service Routine)
进入点的数组)
2、当CPU开始处理一个中断的时候(从优先级号开始),根据优先级计算中
断向量表中和这个中断相关的地址。
这个地址被载入到程序计数器。
CPU
开始执行这个地址存储的指令(在中断向量表中),这个地址的代码是所
选择的ISR的开始。
由于ISR的大小关系,中断向量表可能仅仅存储ISR
的初始化部分,比如:一个跳转指令,这个跳转指令把CPU引导到ISR
的在存储区域的剩余程序部分。
3、中断向量表存储在代码存储区域。
BIV寄存器指定了中断向量表的具体地
址。
中断向量在中断向量表中是按照优先级增长的方式递增的。
4、BIV寄存器存储着中断向量表的基地址。
其可以分配到任何一个可用的代
码存储区域。
5、在系统初始化中可以改变BIV的值。
在这种方法下,可以有多个中断向量
表,通过改变BIV的值它们之间可以切换。
6、中断向量表是根据中断优先级而组织的。
7、TC1728提供附加的选项:允许跨过几个没有被用的中断向量进入点。
8、使用BIV寄存器和优先级号来计算(P1013)
(P1014)
PIPN左移5bits和BIV寄存器的值“或”运算,得到指向中断向量表的指针。
CCPN现在的CPU优先级号,PIPN,正在等待的CPU优先级号。
总结:1、TriCore是以中断的优先级来定义中断向量表,每一个服务请求可以分配一个独立的优先级
2、Power PC是以中断的属性来定义中断向量表,只有16个优先级。
3、中断向量表是在startup中初始化的,一般在库中,不可见。