如果是要求中断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单片机
优先级高的中断源可以中断优先级低的中断服务程序,这就形成了中断服务程序中套着中断服务程序的情况,即形成了所谓的中断嵌套。
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,即设置串口中断为最高优先级,则串口中断可以打断任何其他的中断服务函数实现嵌套,且只有串口中断能打断其他中断的服务函数。若串口中断没有触发,则其他几个中断之间还是保持逻辑优先级,相互之间无法嵌套。
设置中断的优先级优先级低的可以被优先级高的打断,
例如
1、优先级低的在执行,
2、这时进一个优先级高的中断,优先级低的中断就被打断了,
3、执行优先级高的中断,
4、执行完优先级高的中断后,返回低优先级中断,继续执行该低优先级中断
这样也能实现中断套中断
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)