中断向量如何产生,中断嵌套如何让实现

中断向量如何产生,中断嵌套如何让实现,第1张

中断向量是程序员自己定义的,中断信号的产生是由中断控制器控制的,若有外部中断源或软件中断指令,或产生异常的指令时,中断源会产生一个信号(电平,或者触发沿)送给控制器。控制器根据程序的设置或者机器的默认设置来决定如何处理中断。

而控制器会识别一些中断类型,比如除0中断 键盘中断等等,程序员编程设置某一类中断的处理方式,用一个指针的方式指向中断处理程序,这个指针就是中断向量。中断向量的组成形式,在8086下是双字型,高16位为段地址,低16位为段偏移量。在80386下,中断向量表则需要编程用专门的寄存器来存放,不能再使用实模式下的方式来处理中断。

中断嵌套的实现:在中断处理程序中使用指定的中断处理程序,如int 3。在中断处理程序结束时,必须用iret指令返回。中断嵌套若层数无法控制,容易导致堆栈溢出,所以通常情况下需要关闭Elfags寄存器的IF位来防止中断嵌套的产生。

8051单片机有5个中断源和两个中断优先级,高优先级的中断源可以中断低优先级的服务程序,反之不行。INT0>T0>INT1>T1>串口中断。

8051没有专门的开中断和关中断的指令,中断的开放和关闭是由特殊功能寄存器IE来实现两级控制的。有个总开关EA,然后又有ES,ET1,EX1,ET0,EX0五个开关。为1表示开,为0表示关。

单片机在复位后,IE各位的状态为0,所以CPU处于关中断的状态。对于串口来说,其中断请求被响应后,CPU不能自动清除中断标志。用指令来实现关中断。其他中断源的中断标志在CPU响应中断后自动清除。

中断优先级由IP来控制,PS,PT1,PX1,PT0,PX0,置为1表示高优先级。

当几个中断源同时向CPU请求中断时,按所发生的实时事件的轻重缓急排队,优先处理最紧急事件的中断请求,于是单片机规定每个中断源的优先级别。

当CPU正在处理一个中断请求,又发生另一个优先级比它高的中断请求,CPU暂时中止对前一中断处理,转而去处理优先级更高的中断请求,待处理完后,再继续执行原来的中断处理程序,这样的过程称为中断嵌套,这样的中断系统称为多级中断系统。

由于外界异步事件中断CPU正在执行的程序时随机的,CPU转向去执行中断服务程序时,除了硬件会自动把断电地址,即16位PC程序计数器的值压入堆栈之外,用户还得注意保护有关工作寄存器,累加器,标志位等信息,这个过程通常称为保护现场 。以便在完成中断服务程序后,恢复原工作寄存器,累加器,标志位等的内容,这个过程称恢复现场;最后执行中断返回指令,自动d出断电到PC,返回主程序,继续执行被中断的程序。

对于这个,要这么看:

假设中断A是优先级高的中断,中断B是优先级低的中断

如果在正常执行的过程中,发生中断A,那么,中断A执行完成后,会返回正常程序;

如果在正常执行过程中,发生中断B,又在中断B处理过程中发生中断A,那么,中断A执行完成后,一定要返回的是中断B,这是由硬件决定的,不是软件决定的,所以,软件没有任何指令可以让中断A执行完成后直接跳过还没有执行完的中断B而直接回到主程序,因为这是硬件决定的,软件做不到,即便你在高级中断A中关闭了中断B,但是因为你原来的中断B还没有执行完,所以,仍然要把没执行完的部分执行下去,才能返回到正常程序

对于ARM系列的可以,对于51来说,是不行的,因为51软件指令不允许修改PC寄存器的值

优先级高的中断源可以中断优先级低的中断服务程序,这就形成了中断服务程序中套着中断服务程序的情况,即形成了所谓的中断嵌套。

MCU暂停现行程序而转去响应中断请求的过程称为中断响应;为使系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程序,硬件将中断源分为若干个级别,称作中断优先级。 中断的优先级有两个:查询优先级和执行优先级。

查询优先级是datasheet或书上的默认(IP寄存器不做设置,上电复位后为00H)的优先级:

外部中断0> 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断

或int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART

或PX0>PT0>PX1>PT1>PS>

其实都是查询优级。首先查询优先级是不可以更改和设置的。这是一个中断优先权排队的问题,是指多个中断源同时产生中断信号时,中断仲裁器选择对哪个中断源优先处理的顺序。而这与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候,会依照上述5个查询优先级顺序依次查询,当数个中断同时请求的时候,会优先查询到高优查询先级的中断标志位,但并不代表高查询优先级的中断可以打断已经并且正在执行的低查询优先级的中断服务。

例如:当计数器0中断和外部中断1(按查询优先级,计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。 中断的执行优先级就是你对IP寄存器的设置了。在2个优先级的情况下,某位为1,则相应的中断源为高优先级;为0,则为低优先级。

关于中断的优先级有三条原则:

1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求;

2、正在进行的中断过程不能被新的同级或低优先级的中断请求所中断;

3、正在进行的低优先级中断服务,能被高优先级中断请求中断;

若:同一执行优先级中的中断申请不止一个时,则有一个中断优先权排队问题。同一执行优先级中断的排队,由中断系统硬件确定的自然优先级形成,优先权自高到低的顺序即:

外部中断0>定时/计数0>外部中断1>定时/计数1>串行接口

例如:设置IP =0x10,即设置串口中断为最高优先级,则串口中断可以打断任何其他的中断服务函数实现嵌套,且只有串口中断能打断其他中断的服务函数。若串口中断没有触发,则其他几个中断之间还是保持逻辑优先级,相互之间无法嵌套。

MSP430单片机中断嵌套跳出中断的方法:

如果是要求中断A->中断B这样的序列才会从中断B直接返回主程序的话,那必须要在中断A那里做个标志位表明发生了中断A,由中断B判断。中断B执行完,修改堆栈指针,指向中断A的堆栈地址(压栈后的),直接指令退出中断即可。

但要注意,若在中断A中开了总中断,则可以响应后来的中断B,B执行完再继续执行A。注意:进入中断B后总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动打开。

扩展资料:

MSP430单片机的相关要求规定:

1、MSP430单片机称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片机”解决方案。该系列单片机多应用于需要电池供电的便携式仪器仪表中。

2、MSP430系列的部分产品具有Flash存储器,在系统设计、开发调试及实际应用上都表现出较明显的优点。TI公司推出具有Flash 型存储器及JTAG 边界扫描技术的廉价开发工具MSP-FET430X110,将国际上先进的JTAG技术和Flash在线编程技术引入MSP430。

3、MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。这些特点保证了可编制出高效率的源程序。

参考资料来源:百度百科-MSP430单片机

可以,只要第二次的中断优先级高于第一次就行。通过设置了中断控制寄存器IP来实现。如果不设置 默认的优先级顺序为:INT0 TO INT1 TI 串口中断。

do{}

while(P3^3==0);

先执行一次DO里的循环 在P33=0(INT1中断) 如果成立继续执行循环

do{}

while(P3^3==1);

TR1=0;

先执行一次DO里的循环 在P33=1(INT1没有中断) 如果成立继续执行循环 启动T1

以上就是关于中断向量如何产生,中断嵌套如何让实现全部的内容,包括:中断向量如何产生,中断嵌套如何让实现、单片机外部中断返回之后想再次响应中断该怎么响应、C语言51单片机中断嵌套问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10207183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存