01.12.2014 Views

RealView Compilation Tools Developer Guide - ARM Information ...

RealView Compilation Tools Developer Guide - ARM Information ...

RealView Compilation Tools Developer Guide - ARM Information ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

处 理 处 理 器 异 常<br />

6.7 中 断 处 理 程 序<br />

<strong>ARM</strong> 处 理 器 有 FIQ 和 IRQ 两 级 外 部 中 断 , 均 是 由 低 (LOW) 电 平 信 号 激 活 进 入<br />

内 核 程 序 。 为 响 应 一 个 中 断 , CPSR 中 相 应 的 中 断 使 能 位 必 须 清 空 。<br />

在 以 下 方 式 中 , FIQ 较 IRQ 有 更 高 的 优 先 级 :<br />

• 当 发 生 多 个 中 断 时 , 首 先 处 理 FIQ。<br />

• 处 理 FIQ 造 成 禁 用 IRQ, 直 至 FIQ 处 理 程 序 再 次 将 其 置 为 可 用 状 态 前 禁 止<br />

使 用 。 这 通 常 是 通 过 在 处 理 程 序 结 束 时 将 CPSR 从 SPSR 中 恢 复 来 完 成 的 。<br />

FIQ 向 量 是 向 量 表 ( 在 地 址 0x1C 处 ) 最 后 的 入 口 , 使 得 FIQ 处 理 程 序 被 直 接 放<br />

置 在 该 向 量 位 置 并 从 该 地 址 顺 序 执 行 。 它 避 免 了 跳 转 以 及 相 关 的 延 迟 , 并 意 味 着<br />

如 果 系 统 有 缓 存 , 向 量 表 和 FIQ 处 理 程 序 必 须 被 锁 定 在 其 所 在 的 块 内 。 这 一 点<br />

非 常 重 要 , 因 为 FIQ 是 为 尽 快 处 理 中 断 而 设 计 的 。 五 个 额 外 的 FIQ 模 式 的 编 组<br />

寄 存 器 使 得 调 用 与 处 理 程 序 之 间 的 状 态 得 以 保 存 , 从 而 又 加 快 了 其 执 行 速 度 。<br />

备 注<br />

中 断 处 理 程 序 必 须 包 括 清 除 中 断 来 源 的 代 码 。<br />

6.7.1 C 语 言 编 写 的 简 单 中 断 处 理 程 序<br />

可 通 过 使 用 __irq 函 数 声 明 关 键 字 来 编 写 简 单 的 C 语 言 中 断 处 理 程 序 。 可 用<br />

__irq 关 键 字 来 编 写 简 单 单 级 中 断 处 理 程 序 , 以 及 调 用 子 例 程 的 中 断 处 理 程 序 。<br />

但 是 , 不 能 用 __irq 关 键 字 来 编 写 reentrant( 重 入 ) 中 断 处 理 程 序 , 因 它 对 SPSR<br />

不 进 行 存 储 或 恢 复 。 本 文 中 ,“ 重 入 ” 的 含 义 是 指 处 理 程 序 能 再 次 设 置 中 断 并 能<br />

将 其 自 身 中 断 。 有 关 详 细 信 息 请 参 阅 第 6-29 页 的 可 重 入 中 断 处 理 程 序 。<br />

__irq 关 键 字 :<br />

• 保 护 所 有 ATPCS 易 损 坏 的 寄 存 器 ;<br />

• 保 护 所 有 被 函 数 使 用 的 其 它 寄 存 器 ( 不 包 括 浮 点 寄 存 器 );<br />

• 通 过 将 程 序 计 数 器 设 置 到 (lr - 4) 并 恢 复 CPSR 的 初 始 数 据 值 来 退 出 函 数 。<br />

<strong>ARM</strong> DUI 0203BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 6-27

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!