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 />

如 果 该 函 数 调 用 了 一 个 子 例 程 , __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

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

Saved successfully!

Ooh no, something went wrong!