单片机原理与接口技术_第1页
单片机原理与接口技术_第2页
单片机原理与接口技术_第3页
单片机原理与接口技术_第4页
单片机原理与接口技术_第5页
免费预览已结束,剩余39页可下载查看

付费下载

下载本文档

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

文档简介

1、6 中断系统6 中断系统 概念 CPU在正常执行程序的过程中,由于内部/外部事件或由程序的预先安排,引起了CPU暂时中断当前程序的运行,而转去执行由内部/外部事件或预先安排的事件而需要执行的中断服务子程序,在中断服务子程序执行完毕后,CPU再重新回来执行当前的程序。6 中断系统 上课过程中多媒体出现故障 上课过程中出现敲门、电话铃声生活中的中断:6 中断系统 上课过程中多媒体出现故障 上课过程中出现敲门、电话铃声生活中的中断:异常不可控制可以控制6 中断系统 上课过程中多媒体出现故障 上课过程中出现敲门、电话铃声生活中的中断:异常不可控制可以控制同时出现,处理哪一个?先后出现,怎么半?6 中断

2、系统 上课过程中多媒体出现故障 上课过程中出现敲门、电话铃声、提问生活中的中断:异常不可控制可以控制同时出现,处理哪一个?先后出现,怎么半?中断的优先级管理与中断嵌套处理MC9S12的异常上电复位 VDDCPU CLKDATA BUS/ADDRESS BUSIRESET8192 ECLK Cycles V F P P P V - VECTOR FETCHF - FREE CYCLEP - PROGRAM FETCHFFFE FFFE 1st Opcode 2nd Opcode 3rd Opcode 128 ECLK Cycles 64 ECLK Cycles外部 & 内部复位 64 ECLK

3、CYCLES 32 ECLK CYCLESCPU CLK DATA BUS/ADDRESS BUS RESETIRESETSAMPLE PIN FFFE FFFE 1st Opcode 2nd Opcode3nd Opcode中断信号源 From COPFromP.I.T From Crystal MonitorCOPRESETP.I.T IRQC.MRESET INTERRUPT & RESET VECTORGENERATION & PRIORITYECT IRQSSPI IRQSSCI IRQSOther IRQSResets SWI ILLOP I_Vector X_VectorIPEN

4、DXPEND IRQ XIRQ RESETINTERNAL BUSEXTERNAL BUSThe MC9S12DG128can generate over 50 Interrupt requests 异常(中断)处理中断请求中断响应、:关中断保护断点和标志寄存器跳到中断服务程序入口中断程序处理中断返回中断优先级与中断嵌套当多个中断等待执行时,中断优先级决定哪一个中断首先被执行中断嵌套是指中断本身被另一个中断所打断中断优先级: RESET引脚和上电复位 时钟监视复位 看门狗(COP)复位 指令陷阱 软件中断(SWI) XIRQ中断 I位可屏蔽中断中断优先级与中断嵌套按照X、I标志位对于异常的影响

5、将所有的异常再次分类: 所有的复位、软件中断和指令陷阱不受X、I标志位影响。 XIRQ中断当X=1时被屏蔽,但不受I标志影响。 其余所有中断当I=1时被屏蔽。XIRQ中断的优先级高于I位可屏蔽中断中断的优先级是通过XIRQ中断会将X、I标志同时置位,由此来屏蔽后续的X、I位中断。而I位可屏蔽中断仅仅将I标志位置1,依次来屏蔽同类型的中断。可屏蔽中断中断源1中断源2中断源3中断源中断源中断XI=0I=1HCS12默认中断处理机制运 行运 行运 行等 待运 行等 待中断 A中断 B程序低优先级高优先级中断A请求中断B请求等 待人人平等在可屏蔽中断服务程序中EnableInterrupts运 行运

6、行运 行等 待运 行运 行等 待中断 A中断 B程序低优先级高优先级中断B请求中断B被挂起中断A请求长幼不分采用中断优先处理机制运 行运 行等 待运 行运 行等 待中断 A中断 B程序低优先级高优先级中断A请求中断B请求中断B返回运 行等级森严在中断服务程序中,首先对I为清零,即EnableInterrupts选择优先级更高的中断源可以进入响应中断设置优先等级两级一个中断源为低优先级,其他为高优先级在低优先级中断服务程序中,对I位清零在高优先级中断服务程序中,不清零多级利用局部的中断屏蔽位比如Timer Channel0 的中断屏蔽位 TIE_C0I中断优先处理机制优先机制 - 两级例如:中断

7、向量地址 $FFF0 FFF1 为低优先级其他的中断为高优先级在$FFF0 FFF1 中断服务程序中,EnableInterrupts(I位清零)其他的中断包括自己都可以在中断服务程序执行时被响应在其他的中断服务程序中,I位不清零(默认)只有当前中断服务程序执行完后,才能响应其他中断请求当同时有多个中断源请求中断时,中断向量地址最靠近$FFFF的,将会首先被响应最高优先级设定寄存器(Highest Priority I Interrupt)优先机制 多级优先机制 多级自定义优先级中断向量地址中断源CCR屏蔽位局部屏蔽位HPRIO1中$FFEE, $FFEFECT 通道0ITIE_C0I$EE0

8、低$FFEC, $FFEDECT 通道1ITIE_C1I$EC2高$FFEA, $FFEBECT 通道2ITIE_C2I$EA要求: 在低优先级的中断服务程序中,高优先级的中断请求可以被响应HPRIO = 0 xEA: ECT0,1,2同时请求中断时,CPU将会首先响应通道2默认时, CPU将会首先响应通道0情况1:每个中断都单独发生,在一个中断程序执行时,没有其他中断优先机制 多级优先级中断向量地址中断源CCR屏蔽位局部屏蔽位1 中$FFEE, FFEFECT 通道0ITIE_C0I0 低$FFEC, FFEDECT 通道1ITIE_C1I2 高$FFEA, FFEBECT 通道2ITIE_

9、C2I 情况2: 在执行ECT1的中断服务程序时,ECT0请求中断 ECT0中断服务程序将被执行优先机制 多级优先级中断向量地址中断源CCR屏蔽位局部屏蔽位1 中$FFEE, FFEFECT 通道0ITIE_C0I0 低$FFEC, FFEDECT 通道1ITIE_C1I2 高$FFEA, FFEBECT 通道2ITIE_C2I情况3:在执行ECT2的中断服务程序时,ECT0请求中断ECT2的中断服务程序执行结束后,执行ECT0的中断服务程序优先机制 多级优先级中断向量地址中断源CCR屏蔽位局部屏蔽位1 中$FFEE, FFEFECT 通道0ITIE_C0I0 低$FFEC, FFEDECT

10、通道1ITIE_C1I2 高$FFEA, FFEBECT 通道2ITIE_C2I情况4:ECT1,ECT2先后请求中断 ECT1的中断服务程序先执行,当EnableInterrupts后执行ECT2的中断服务程序ECT2的中断服务程序执行结束后,返回执行ECT1的中断服务程序优先机制 多级优先级中断向量地址中断源CCR屏蔽位局部屏蔽位1 中$FFEE, FFEFECT 通道0ITIE_C0I0 低$FFEC, FFEDECT 通道1ITIE_C1I2 高$FFEA, FFEBECT 通道2ITIE_C2I情况5:ECT1,ECT2同时请求中断 ECT2的中断服务程序先执行ECT2的中断服务程序

11、执行结束后,执行ECT1的中断服务程序优先机制 多级优先级中断向量地址中断源CCR屏蔽位局部屏蔽位1 中$FFEE, FFEFECT 通道0ITIE_C0I0 低$FFEC, FFEDECT 通道1ITIE_C1I2 高$FFEA, FFEBECT 通道2ITIE_C2I方案:优先机制 多级在ECT0(中)中断服务程序中:在ECT1(低)中断服务程序中(自定义优先级最低):在ECT2(高)中断服务程序中(自定义优先级最高): TIE_C1I = 0; /关闭ECT1局部中断TIE_C2I = 1; /开放ECT2局部中断EnableInterrupts; /开放全局中断TIE_C1I = 1;

12、 /开放ECT1局部中断TIE_C2I = 1; /开放ECT2局部中断TIE_C0I = 1; /开放ECT0局部中断TIE_C2I = 1; /开放ECT2局部中断EnableInterrupts; /开放全局中断TIE_C0I = 1; /开放ECT0局部中断TIE_C2I = 1; /开放ECT2局部中断用户程序中断优先级与中断嵌套默认状态:在进入中断服务程序时,I位自动置1,禁止其他可屏蔽中断即使有优先级更高的中断请求,也必须等当前中断服务程序执行完以后才能响应优先级的作用只有在多个中断源同时请求中断时在能体现无法实现中断嵌套如果在进入中断服务程序时,手动对I位清零:任何其他可屏蔽中

13、断都可以被响应,无论其优先级有多高中断响应由时间控制,可以实现中断嵌套对中断执行无法预测HPRIO寄存器写入HPRIO中的中断向量的后八位,可以改变该中断的优先级同样,优先级的作用只有在多个中断源同时请求中断时在能体现中断向量表在0 xFF800 xFFFF地址空间设置了一个向量表,每个向量表对应一种异常的处理程序的地址。向量表中每个向量为16位,占用2个字节空间,所有S12最大可有64个中断向量。S12处理器在进行中断响应时,依据中断信号的来源在中断向量表中对应位置取得中断向量的16位中断服务程序入口地址,进而以此地址转到相应的中断服务程序。 页2 Flash 页1 Flash中断程序设计实

14、例寄存器RAM不分页Flash分页Flash不分页Flash中断向量0 x00000 xFFFF中断服务程序入口地址 页2 Flash 页1 Flash中断程序设计实例寄存器RAM不分页Flash分页Flash不分页Flash中断向量0 x00000 xFFFF中断服务程序入口地址 页2 Flash 页1 Flash中断程序设计实例寄存器RAM不分页Flash分页Flash不分页Flash中断向量0 x00000 xFFFF中断服务程序入口地址 页2 Flash 页1 Flash中断程序设计实例寄存器RAM不分页Flash分页Flash不分页Flash中断向量0 x00000 xFFFF中断服

15、务程序入口地址 页2 Flash 页1 Flash中断程序设计实例寄存器RAM不分页Flash分页Flash不分页Flash中断向量0 x00000 xFFFF中断服务程序入口地址 页2 Flash 页1 Flash中断程序设计实例寄存器RAM不分页Flash分页Flash不分页Flash中断向量0 x00000 xFFFFRAM跳转表入口$06$06中断程序设计实例(1)用关键词interrupt和中断矢量编号定义中断函数Interrupt INT_NUM void ISR_Function(void)interrupt 7 void RTI_ISR(void) . /*中断服务程序实现主体

16、*/ 中断程序设计实例(2)用关键词interrupt定义中断函数, 中断矢量入口由prm文件指定void interrupt ISR_Function (void) . /*中断服务程序实现主体*/在项目对应的prm文件中添加一行矢量位置定义,如:VECTOR 0 _Startup /系统缺省的复位矢量入口VECTOR 7 RTI_ISR /指定的中断服务矢量入口中断程序设计实例(3)用#pragma TRAP_PROC定义中断函数, 在prm文件中指定矢量入口#pragma TRAP_PROC void SCI0_ISR(void) /*中断服务程序实现主体*/ 在prm文件中使用VECT

17、OR实现中断向量与中断程序的连接:VECTOR 0 _Startup /这是系统默认/复位中断Startup() VECTOR 20 SCI0_ISR /指定中断号 或者:VECTOR ADDRESS 0 xFFD6 SCI0_ISR /直接指定中断向量地址中断程序设计实例(4)直接建立中断向量表数组_interrupt void UnimplementedISR(void) _asm BGND;_interrupt void ReservedISR(void) _asm BGND;typedef void (*tIsrFunc)(void);const tIsrFunc ResetVecto

18、rTable 0 xFF10 =ReservedISR, /* 0 xFF10 Spurious Interrupt */ReservedISR, /* 0 xFF12 Reserved */UnimplementedISR, /* 0 xFFF2 IRQ */UnimplementedISR, /* 0 xFFF4 XIRQ */UnimplementedISR, /* 0 xFFF6 SWI */UnimplementedISR, /* 0 xFFF8 Unimplemented instruction trap */UnimplementedISR, /* 0 xFFFA COP fai

19、lure reset */UnimplementedISR, /* 0 xFFFC Clock monitor fail reset */_Startup /* Reset vector */;中断程序设计实例而且由于中断向量表字长限制,中断服务程序入口地址只能是16位,其寻址范围为64K中断服务子程序必须被放在非分页存储区内,即NON_BANKED。#pragma CODE_SEG _NEAR_SEG NON_BANKED/中断服务程序#pragma CODE_SEG DEFAULT/下面内容按默认放置外部中断例程读写Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0R/WIRQEIRQEN000000外部中断控制寄存器:INTCRIRQE:边沿触发中断使能 0:IRQ引脚接受低电平触发 1:IRQ引脚接受下降沿触发IRQEN:IRQ中断使能位 0:禁止IRQ触发中断 1:允许IRQ触发中断void IRQInit(void) INTCR = 0 xC0; /11000000B,下降沿触发,允许IRQ中断 EnableInterrupts; / 允许中断#define EnableInterrupts _asmCLI 外部中断例程#pragma CO

温馨提示

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

评论

0/150

提交评论