430中断

MSP430系列单片的中断实现与中断嵌套!
1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT;


2)当进入中断程序时,只要不在中断中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断 优先级高还是低都不执行;


3)若在中断A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断B后总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动 


打开;
4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!


5)
对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;
对于多源中断要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用"EINT();"开中断,而在打开中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.
//==================================================
中断处理
  当一个外部设备发出中断请求时,如果外部设备的中断使能位和通用中断使能位GIE置位了,需要有中断服务程序。只有不可屏蔽中断需要设置单独的个别的中断使能位来。
  中断接收
  从接受到中断请求,到开始执行中断服务子程序第一条指令之前,时长是6个机器周期。中断逻辑执行如下:
  1).完成任何当前指令
  2).指向的下一条指令的PC被压入堆栈
  3).SR被压入堆栈
  4).在执行最后一条指令时如果发生了多个中断,拥有最高优先级的中断被选择并等待处理
  5).对于只有单个中断源的中断,它的标志位会自动复位。而多源中断的中断标志位由软件服务去设置
  6).状态寄存器SR被清除。这会终止任何低功耗模式。因为GIE位被清除,所以禁止任何中断产生
  7).中断向量中的内容将会载入到PC中,程序从这个地址开始运行中断服务程序。
  中断返回
  中断服务程序以指令RETI (return from an interrupt service routine)结束。中断返回占用5个周期去执行以下动作。
  1).压入到堆栈中的SR的数据出栈,所有先前GIE,CPUOFF等的设置将生效,无论在中断服务程序中如何设置
  2).PC出栈,从断点处执行程序。
  中断嵌套
  
  如果在中断服务子程序中设置了GIE位,就可能发生中断嵌套。当允许中断嵌套时,任何正在执行中断服务子程序发生中断将会打断中断服务程序,无论它的中断优先级如何。该嵌套中断程序执行完后,在回到当前中断继续执行.


具体方式如下:


 


1)430默认的是关闭中断嵌套的,除非你在一个中断程序中再次开总中断EINT;


2)当进入中断程序时,只要不在中断中再次开中断,则总中断是关闭的,此时来中断不管是比当前中断的优先级高还是低都不执行;


3)若在中断A中开了总中断,则可以响应后来的中断B(不管B的优先级比A高还是低),B执行完再继续执行A。注意:进入中断B后总中断同样也会关闭,如果B中断程序执行时需响应中断C,则此时也要开总中断,若不需响应中断,则不用开中断,B执行完后跳出中断程序进入A程序时,总中断会自动打开;


4)若在中断中开了总中断,后来的中断同时有多个,则会按优先级来执行,即中断优先级只有在多个中断同时到来时才起做用!中断服务不执行抢先原则。


5)对于单源中断,只要响应中断,系统硬件自动清中断标志位,对于TA/TB定时器的比较/捕获中断,只要访问TAIV/TBIV,标志位倍被自动清除;


对于多源中断要手动清标志位,比如P1/P2口中断,要手工清除相应的标志,如果在这种中断用"EINT();"开中断,而在打开中断前没有清标志,就会有相同的中断不断嵌入,而导致堆栈溢出引起复位,所以在这类中断中必须先清标志再打开中断开关.
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值