RealView Compilation Tools Developer Guide - ARM Information ...
RealView Compilation Tools Developer Guide - ARM Information ...
RealView Compilation Tools Developer Guide - ARM Information ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
处 理 处 理 器 异 常<br />
如 果 该 函 数 调 用 了 一 个 子 例 程 , __irq 除 保 护 其 它 易 损 坏 寄 存 器 外 , 还 为 中 断 模<br />
式 保 护 链 接 寄 存 器 。 有 关 详 细 信 息 请 参 阅 从 中 断 处 理 程 序 调 用 子 例 程 。<br />
备 注<br />
在 使 用 汇 编 Thumb C 代 码 时 , C 语 言 中 断 处 理 程 序 不 能 以 这 种 方 式 生 成 。 在<br />
Thumb 模 式 下 编 译 时 ,__irq 关 键 字 有 问 题 , 产 生 中 断 或 任 何 其 它 异 常 时 , 处 理<br />
器 总 是 转 到 <strong>ARM</strong> 状 态 。<br />
但 是 , 由 __irq 函 数 调 用 的 子 例 程 可 以 为 Thumb 进 行 编 译 ( 当 启 用 交 互 时 )。 有<br />
关 交 互 的 详 细 信 息 , 请 参 阅 第 4 章 <strong>ARM</strong> 和 Thumb 交 互 操 作 。<br />
从 中 断 处 理 程 序 调 用 子 例 程<br />
如 果 从 高 级 中 断 处 理 程 序 调 用 子 例 程 ,__irq 关 键 字 也 将 从 堆 中 恢 复 lr_IRQ 的<br />
值 , 以 便 它 能 被 SUBS 指 令 使 用 , 使 得 在 处 理 完 该 中 断 后 返 回 到 正 确 的 地 址 。<br />
示 例 6-14 说 明 了 这 一 实 现 过 程 。 高 层 中 断 处 理 程 序 在 0x80000000 基 地 址 读 取 存<br />
储 器 映 射 中 断 控 制 器 的 值 。 如 果 该 地 址 的 值 为 1, 高 层 处 理 程 序 跳 转 到 一 个 用 C<br />
语 言 编 写 的 处 理 程 序 。<br />
示 例 6-14<br />
__irq void IRQHandler (void)<br />
{<br />
volatile unsigned int *base = (unsigned int *) 0x80000000;<br />
}<br />
if (*base == 1)<br />
{<br />
C_int_handler();<br />
}<br />
*(base+1) = 0;<br />
// which interrupt was it?<br />
// process the interrupt<br />
// clear the interrupt<br />
用 armcc 编 译 , 示 例 6-14 生 成 以 下 代 码 :<br />
IRQHandler PROC<br />
STMFD<br />
MOV<br />
LDR<br />
SUB<br />
CMP<br />
sp!,{r0-r4,r12,lr}<br />
r4,#0x80000000<br />
r0,[r4,#0]<br />
sp,sp,#4<br />
r0,#1<br />
6-28 © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 <strong>ARM</strong> DUI 0203BSC