10.07.2015 Views

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

MPLAB ® <strong>C30</strong> 用 户 指 南6.6.4 中 断 服 务 程 序 声 明 宏下 面 的 宏 可 用 于 声 明 中 断 服 务 程 序 (ISR):#define _ISR __attribute__((interrupt))#define _ISRFAST __attribute__((interrupt, shadow))例 如 , 声 明 timer0 中 断 的 中 断 服 务 程 序 :void _ISR _INT0Interrupt(void);声 明 SPI1 中 断 的 快 速 现 场 保 护 中 断 服 务 程 序 :void _ISRFAST _SPI1Interrupt(void);注 :如 果 中 断 服 务 程 序 使 用 了 表 7-1 中 给 出 的 保 留 名 , 中 断 服 务 程 序 的 地 址 将自 动 填 充 到 中 断 向 量 表 中 。6.7 从 C 代 码 访 问 EEDATAMPLAB <strong>C30</strong> 提 供 了 一 些 方 便 的 宏 定 义 来 允 许 将 数 据 存 放 在 器 件 的 EE 数 据 区 中 。 这 实 现起 来 很 简 单 :int _EEDATA(2) user_data[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };user_data 将 被 存 放 在 EE 数 据 空 间 中 , 为 给 定 的 初 值 保 留 10 个 字 。dsPIC 器 件 为 编 程 人 员 提 供 了 两 种 方 法 来 访 问 这 种 存 储 区 。 一 种 方 法 是 通 过 程 序 空 间可 视 性 (PSV) 窗 口 。 另 一 种 方 法 是 使 用 特 殊 机 器 指 令 (TBLRDx)。6.7.1 通 过 PSV 访 问 EEDATA编 译 器 通 常 管 理 PSV 窗 口 来 访 问 存 储 在 程 序 存 储 器 中 的 常 量 。 否 则 ,PSV 窗 口 可 用 于访 问 EEDATA 存 储 器 。要 使 用 PSV 窗 口 :• PSVPAG 寄 存 器 必 须 设 置 为 要 访 问 的 程 序 存 储 器 的 正 确 地 址 。 对 于 EE 数 据 , 该 地址 为 0xFF, 但 最 好 使 用 __builtin_psvpage() 函 数 。• 还 应 通 过 置 位 CORCON 寄 存 器 中 的 PSV 位 来 使 能 PSV 窗 口 。 如 果 该 位 没 有 置 位 ,使 用 PSV 窗 口 将 始 终 读 为 0x0000。例 6-2:通 过 PSV 访 问 EEDATA#include int main(void) {PSVPAG = __builtin_psvpage(&user_data);CORCONbits.PSV = 1;/* ... */if (user_data[2]) ;/* do something */}这 些 步 骤 仅 需 要 执 行 一 次 。 除 非 改 变 了 PSVPAG, 否 则 可 通 过 像 普 通 C 变 量 一 样 引 用EE 数 据 空 间 中 的 变 量 来 读 这 些 变 量 , 如 本 例 。注 : 这 一 访 问 模 式 与 编 译 器 管 理 的 PSV (-mconst-in-code) 模 式 不 兼 容 。要 注 意 防 止 出 现 冲 突 。DS51284C_CN 第 84 页© 2005 Microchip Technology Inc.

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

Saved successfully!

Ooh no, something went wrong!