网站大量收购独家精品文档,联系QQ:2885784924

嵌入式系统及应用-Chapter10-ARM中断机制.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统及应用-Chapter10-ARM中断机制

中断概述 中断是CPU处理外部突发事件的一个重要技术。它能使CPU在运行过程中对外部事件发出的中断请求及时地进行处理, 处理完成后又立即返回断点,继续进行CPU原来的工作。引起中断的原因或者说发出中断请求的来源叫做中断源。 根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断两类。外部中断一般是指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断是可以屏 蔽的中断,也就是说,利用中断控制器可以屏蔽这些外部设备的中断请求。内部中断是指因硬件出错(如突然掉电、奇偶校验错等)或运算出错(除数为零、运算溢出、单步中断等)所引起 的中断。内部中断是不可屏蔽的中断。 软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序。例如:ROMBIOS 中的各种外部设备管理中断 服务程序(键盘管理中断、显示器管理中断、打印机管理中断等),以及DOS的系统功能调用(INT 21H)等都是软件中断。 中断概述 中断相应 中断源向CPU 发出中断请求,若优先级别最高,CPU 在满足一定地条件下,可以中断当前程序的运行,保护好被中断主程序的断点及现场信息。然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。CPU 响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。 中断概述 中断服务程序 CPU 响应中断以后,就会终止当前的程序,转去执行一个中断服务子程序,以完成为相应设备的服务; a.保护现场(由一系列的压栈指令完成)。目的是为了保护那些与主程序中有冲突的寄存器,(如R0,R1,R2 等),如果中断服务子程序中所使用的寄存器与主程序中所使用的寄存器等没有冲突的话,这一步可以省略。 b.中断处理,中断处理程序在检查到相应的中断源后,调用对应的中断处理程序完成。 c.恢复现场并返回(由一系列的出栈指令完成),与保护现场对应的,但要注意数据恢复的次序,以免混乱。 ARM中断请求与处理 中断机制 中断源 中断优先级 中断请求:Pending 中断向量偏移:Offset 中断屏蔽:Mask ARM中断机制 ARM中断源 ARM中断优先级 ARM中断寄存器 ARMSRC Pending寄存器 ARM中断模式寄存器 ARM中断屏蔽寄存器 ARM中断优先级寄存器 ARM中断模式寄存器 ARM中断Pending寄存器 ARM中断offset寄存器 ARM中断SUBSOURCE寄存器 ARM中断SUBMASK寄存器 ARM外部中断寄存器 ARM外部中断0控制寄存器 ARM外部中断1控制寄存器 ARM外部中断2控制寄存器 ARM外部中断Filter寄存器 ARM外部中断屏蔽寄存器 ARM外部中断Pending寄存器 ARM中断编程 异常向量表 中断向量表 Reset异常 IRQ异常 程序结构 中断模块 异常向量表 中断向量表 复位异常:ResetHandler 中断异常:ISR 结构:前后台程序 中断模块:Int_Init 中断模块:Int_InitExint 中断模块:Int_InstallIsr 中断模块:Int_InstallExpt 中断模块:宏定义 //后天: main无线循环函数 void Main(void) { …. //系统初始化 g_uiEvent = 0; //事件及数据清零 g_uiData = 0; while (1) { if((g_uiEvent KEY_BIT) != 0) { //有事件发生, 调用事件处理代码 spi_LedDisplay(0, g_uiKey, 0); //事件处理完毕后请求事件位 g_uiEvent = ~KEY_BIT; } } //事件相关变量定义 #define KEY_BIT 0x1 //键盘事件位 volatile unsigned int g_uiEvent = 0; //事件 volatile unsigned int g_uiData = 0; //事件数据 //前台: 中断服务函数 void __irq ISR_Key(void) { //清除中断请求标志位 ClearPending(BIT_EINT4_7); rEINTPEND = (0x14); //…进行中断处理,设置标志位, 读取中断数据; g_uiEvent |= KEY_BIT; g_uiData = …. } //

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档