第6章MC9S12系列中断系统_第1页
第6章MC9S12系列中断系统_第2页
第6章MC9S12系列中断系统_第3页
第6章MC9S12系列中断系统_第4页
第6章MC9S12系列中断系统_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《MC9S12XS单片机原理及嵌入式系统开发》MC9S12XS单片机原理

及嵌入式系统开发合肥工业大学张阳,吴晔,滕勤Email:yzhang0615@163.com,wuye@,tengqin7348@126.com

TEL13505612773第6章

MC9S12系列中断系统MC9S12系列中断系统概述

MC9S12系列中断优先级

MC9S12系列中断程序应用实例

前言 中断是用以提高计算机工作效率的一种重要技术,最初它只是作为计算机与外设交换信息的一种同步控制方式而提出的,但随着计算机技术的发展,特别是CPU速度的迅速提高,对计算机内部机制的要求也越来越高,希望计算机能随时发现各种错误,当系统出现意想不到的事件时,能及时妥善处理。于是,中断的概念得以延伸,除了传统的外部事件(硬件)引起的中断事件外,还有CPU内部软件中断的概念。所谓中断,是指CPU在正常执行程序的过程中,由于内部/外部事件或由程序的预先安排,引起了CPU暂时中断当前程序的运行,而转去执行由内部/外部事件或预先安排的时间而需要执行的中断服务子程序,在中断服务子程序执行完毕后,CPU再重新回来执行当前的程序。利用中断可以大大提高CPU的工作效率。实现中断功能的控制逻辑称为中断机构或中断系统。前言 尽管单片机或者微控制器中的中断系统各不相同,但中断系统的基本功能是相同的:能实现中断响应、中断处理(服务)、中断返回和中断屏蔽;能实现中断优先级排队(管理);能实现中断嵌套。6.1MC9S12系列中断系统概述 MC9S12系列MCU的中断属于异常情况处理的一部分,异常情况处理还包括复位,所以本章除论述MC9S12系列MCU的中断系统,也简要介绍MC9S12系列MCU的几种复位情况。正常情况下,MCU有序的执行相应程序,按照明确的获取-解码-执行的方式顺序处理各种指令。程序计数器记录了下一条程序指令位于内存中的位置,即使当程序为了相应分支或跳转指令而偏离了正常的顺序处理,但仍然是在顺序事件处理的控制范围之内。可能发生的异常情况会打破这种事件处理的顺序流,将一个正常程序流的中断归为一个异常情况,异常情况不一定总是和错误相关联的,中断是在一个MCU上实现多个任务的有效方法。通过上面的论述可以知道,MC9S12系列程序运行时可能发生的异常可分为两类:复位和中断,而中断又进一步分为可屏蔽中断和不可屏蔽中断。MC9S12系列MCU的异常情况分类如图6.1所示。6.1MC9S12系列中断系统概述6.1MC9S12系列中断系统概述

6.1.1复位· S12系列单片机共有四种事件可以触发系统复位。 (1)外部复位

S12配备一个标记为RESET的低电平有效复位引脚,当该引脚电压为低电平时,触发复位。 (2)上电复位 在S12的VDD引脚上的一个正向变化将触发上电复位,这意味着当给S12上电时,它以一个已知的、确定的设置启动。6.1MC9S12系列中断系统概述

6.1.1复位

(3)计算机工作正常(COP)复位

COP系统允许MCU检测软件运行故障,通常COP在软件开发设计过程中是关闭的。但是,当基于MC9S12系列的系统完全运行后,这是一项重要的安全保障功能之一。COP系统包含一个用户设置的定时器,一旦定时器超时,则触发系统复位。为了防止定时器超时,执行的程序必须在定时器超时之前,向ARMCOP寄存器中依次写入$55和$AA。若某个程序陷入一个死循环,它将不能按照上述要求对ARMCOP寄存器进行操作,因此将会产生COP复位。为了有效地实现这个功能,向ARMCOP寄存器中写入$55的代码应该有策略的分布在程序的重要部分,写入$AA的代码则可以放在程序的其他部分。这样,一旦MCU在某代码处运行失效,将不会产生需要的代码序列($55或$AA),这样就会触发COP复位。可以在程序设计中设置多对$55和$AA,实现错误恢复功能。6.1MC9S12系列中断系统概述

6.1.1复位

(4)时钟监控复位 当系统时钟频率低于某个预设置值或停止工作时,将触发时钟监控复位。 当上述事件触发复位时,S12单片机在程序计数器中放置一个复位向量,处理器执行启动例程。COP复位和时钟监控复位具有各自的复位向量。6.1MC9S12系列中断系统概述

6.1.2中断 MC9S12系列MCU的中断分为可屏蔽中断和不可屏蔽中断。MCU有一个条件代码寄存器(CCR),如图6.2所示,其中的X位和I位与中断相关,X位是不可屏蔽中断的屏蔽位,置为“1”则关闭不可屏蔽中断,置为“0”则允许不可屏蔽中断;I位是可屏蔽中断的屏蔽位,置为“1”则关闭可屏蔽中断,置为“0”则允许可屏蔽中断。在系统复位时,CCR这些中断屏蔽位默认为“1”,所以MCU复位后,不可屏蔽中断和可屏蔽中断都处于关闭状态。6.1MC9S12系列中断系统概述

6.1.2中断 1.不可屏蔽中断 不可屏蔽中断包括软件中断、非法指令陷阱和XIRQ中断,下面简要介绍常用的几个不可屏蔽中断。 (1)软件中断

SWI实质上是一条指令,但其执行过程与中断相同,即通过中断矢量确定目标地址,中断矢量为$FFF6~$FFF7,它自动保存MCU的寄存器和返回地址,最后必须通过RTI指令返回。 (2)非法指令陷阱

MCU正常工作时,每次获得的都是由汇编或编译程序生成的有效操作码,MCU能够正确解释并执行它们,但当受到干扰或系统出现混乱时,可能得到无法识别的操作码,即非法指令,这时MCU自动产生一次中断,中断矢量地址为$FFF8~$FFF9。6.1MC9S12系列中断系统概述

6.1.2中断 1.不可屏蔽中断 (3)XIRQ XIRQ是非屏蔽中断引脚,无论MCU处于哪种运行状态,该引脚一旦被拉成低电平,MCU执行完当前指令后,都会响应该中断,中断矢量为$FFF4~$FFF5。该中断一般用于系统掉电检测、硬件故障等重要事件处理,当MCU处于等待或暂停模式时,该中断将唤醒MCU。6.1MC9S12系列中断系统概述

6.1.2中断 2.可屏蔽中断 可屏蔽中断可以在程序控制下由用户开启或者关闭。可屏蔽中断的开关是条件代码寄存器(CCR)中的I位。通过清除I可以开启可屏蔽中断。S12系列单片机中的可屏蔽中断数量非常多,这里仅对IRQ做简要介绍,其他的可屏蔽中断可参见相关功能模块的章节。

MC9S12系列MCU有一个标记为IRQ引脚,当该引脚出现低电平或者下降沿时,则会产生中断请求信号,这也是MCU接受外部事件中断的主要手段。IRQ控制寄存器(IRQCR)和IRQ的中断设置相关,如图6.3所示。6.1MC9S12系列中断系统概述

6.1.2中断

通过该寄存器中的IRQE位和IRQEN位对IRQ中断进行设置。 IRQE:中断电平/边沿有效选择: 0表示IRQ引脚配置为低电平有效; 1表示IRQ引脚配置为下降沿有效。 IRQEN:外部IRQ中断请求使能: 0表示IRQ中断关闭; 1表示IRQ中断允许。6.1MC9S12系列中断系统概述

6.1.2中断 3.中断堆栈操作顺序 因为中断响应过程中,会有隐含的堆栈操作,所以中断响应前,堆栈必须有效,即堆栈指针SP必须指向一个有效的RAM区,而且堆栈的大小必须不少于9个字节。中断响应堆栈操作如表6-1所示。6.2MC9S12系列中断优先级 MC9S12系列有多个中断源,所以在同一时刻可能会有两个或两个以上的中断源同时请求中断,这就要求必须根据任务的轻重缓急给每个中断源分配不同的中断优先级。当两个或两个以上中断源同时发生时,优先级高的中断将先被处理。一般来说,不可屏蔽中断的优先级高于可屏蔽中断的优先级。复位以及不可屏蔽中断的优先级从高到低依次为:6.2MC9S12系列中断优先级6.2MC9S12系列中断优先级6.2MC9S12系列中断优先级6.2MC9S12系列中断优先级 MC9S12系列默认的中断处理机制如图6.4所示。从图中可以看到,MC9S12系列默认状态下在进入中断服务程序时,CCR中的I位自动置1,所以禁止响应其他可屏蔽中断,尽管在处理中断A的服务程序过程中又来了更高级别的中断B的中断请求,MCU也无法及时处理高优先级B中断,必须等待当前A中断服务程序执行完以后才能响应高优先级B中断6.2MC9S12系列中断优先级

如果希望在MC9S12系列中实现中断嵌套,一个比较简单的方法是进入中断服务程序时,将CCR中的可屏蔽中断屏蔽位I清零。这样可以实现如图6.5所示的中断嵌套。6.2MC9S12系列中断优先级

从图6.5中可以看到,这样简单的CCR中的I位处理也可能会带来问题,就是会出现低优先级的中断请求也可以挂起高优先级中断服务程序。因为在首先响应B中断服务程序中已经清除了可屏蔽中断屏蔽位I,所以此时任何可屏蔽中断请求都能够得到响应,这样就出现了低优先级的中断A打断高优先级B中断服务程序的情况。为了解决这个问题,可以只在A中断服务程序中清除可屏蔽中断屏蔽位I,而在B中断服务程序中对CCR中的I位不做处理,这样就可以得到如图6.6所示的中断处理机制,即只存在高优先级的中断请求打断低优先级中断服务程序的情况。6.3MC9S12系列中断程序应用实例

本实例硬件连接如图6.7所示,PORTA端口与1个8位拨码开关连接,PORTB端口与8只LED连接,IRQ引脚与一个按键连接,按键按下为低电平。要求编程实现IRQ作为中断源,采用中断方式,利用8位拨码开关控制8只LED灯的循环点亮速度,拨码开关的不同状态设置了灯的循环点亮速度值。6.3MC9S12系列中断程序应用实例

本实例中关于流水灯的实现已经在第5章中介绍过,本章着重介绍中断服务程序的编写。中断服务程序可以有两种编写方式:一种是利用中断编号关联中断服务程序;另一种是通过在.prm文件中的声明关联中断服务程序。首先介绍利用中断编号编写中断服务程序。从表6.2中可以看到,中断向量表依次自上而下从0开始编号,中断在表格中是第7个,所以编号为“6”。另外一种比较方便确定编号的方法是,可以打开工程中“Includes”文件夹下的“MC9S12XS128.h”文件,头文件的开始处对所有中断向量地址和中断标号都做了宏定义,中断的中断向量入口地址的宏定义语句为“#defineVirq0xFFF2U”,中断的中断标号的宏定义语句为“#defineVectorNumber_Virq6U”,所以也可以用“VectorNumber_Virq”代替前文中提到的编号“6”。下面是部分实例程序代码。6.3MC9S12系列中断程序应用实例

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论