- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HCS12中断讲解课件
HCS12中断 默认状态: 在进入中断服务程序时,I位自动置1,禁止其他可屏蔽中断 即使有优先级更高的中断请求,也必须等当前中断服务程序执行完以后才能响应 优先级的作用只有在多个中断源同时请求中断时在能体现 无法实现中断嵌套 如果在进入中断服务程序时,手动对I位清零: 任何其他可屏蔽中断都可以被响应,无论其优先级有多高 中断响应由时间控制,可以实现中断嵌套 对中断执行无法预测 HPRIO寄存器 写入HPRIO中的中断向量的后八位,可以改变该中断的优先级 同样,优先级的作用只有在多个中断源同时请求中断时在能体现 HCS12默认中断处理机制 在可屏蔽中断服务程序中EnableInterrupts 采用中断优先处理机制 中断优先处理机制 在中断服务程序中,首先对I为清零,即EnableInterrupts 选择优先级更高的中断源可以进入响应中断 设置优先等级 两级 一个中断源为低优先级,其他为高优先级 在低优先级中断服务程序中,对I位清零 在高优先级中断服务程序中,不清零 多级 利用局部的中断屏蔽位 比如Timer Channel0 的中断屏蔽位 TIE_C0I 优先机制 - 两级 例如: 中断向量地址 $FFF0 – FFF1 为低优先级 其他的中断为高优先级 在$FFF0 – FFF1 中断服务程序中,EnableInterrupts(I位清零) 其他的中断包括自己都可以在中断服务程序执行时,被响应 在其他的中断服务程序中,I位不清零(默认) 只有当前中断服务程序执行完后,才能响应其他的中断请求 优先机制 – 多级 优先机制 – 多级 情况 1: 每个中断都单独发生,在一个中断程序执行时,没有其他中断 情况 2: 在执行ECT1的中断服务程序时,ECT0请求中断 ECT0中断服务程序将被执行 情况 3: 在执行ECT2的中断服务程序时,ECT0请求中断 ECT2的中断服务程序执行结束后,执行ECT0的中断服务程序 情况 4: ECT1,ECT2同时请求中断 ECT1的中断服务程序先执行,当EnableInterrupts后 执行ECT2的中断服务程序 ECT2的中断服务程序执行结束后,返回执行ECT1的中断服务程序 方案:优先机制 – 多级 在ECT0中断服务程序中: 在ECT1中断服务程序中(自定义优先级最低): 在ECT2中断服务程序中(自定义优先级最高): 用户程序 * 运 行 运 行 运 行 等 待 运 行 等 待 中断 A 中断 B 程序 低优先级 高优先级 中断A请求 中断B请求 等 待 人 人 平 等 运 行 运 行 运 行 等 待 运 行 运 行 等 待 中断 A 中断 B 程序 低优先级 高优先级 中断B请求 中断B被挂起 中断A请求 长 幼 不 分 运 行 运 行 等 待 运 行 运 行 等 待 中断 A 中断 B 程序 低优先级 高优先级 中断A请求 中断B请求 中断B返回 运 行 等 级 森 严 当同时有多个中断源请求中断时,中断向量地址最靠近$FFFF的,将会首先被响应 $EA TIE_C2I I ECT 通道2 $FFEA, $FFEB 2 高 $EC TIE_C1I I ECT 通道1 $FFEC, $FFED 0 低 $EE TIE_C0I I ECT 通道0 $FFEE, $FFEF 1 中 HPRIO 局部屏蔽位 CCR屏蔽位 中断源 中断向量地址 自定义优先级 要求: 在低优先级的中断服务程序中,高优先级的中断请求可以被响应 HPRIO = 0xEA: ECT0,1,2同时请求中断时,CPU将会首先响应通道2 默认时, CPU将会首先响应通道0 TIE_C1I = 0; //关闭ECT1局部中断 TIE_C2I = 1; //开放ECT2局部中断 EnableInterrupts; //开放全局中断 … TIE_C1I = 1; //开放ECT1局部中断 TIE_C2I = 1; //开放ECT2局部中断 TIE_C0I = 1; //开放ECT0局部中断 TIE_C2I = 1; //开放ECT2局部中断 EnableInterrupts; //开放全局中断 … TIE_C0I = 1; //开放ECT0局部中断 TIE_C2I = 1; //开放ECT2局部中断 *
文档评论(0)