10.07.2015 Views

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

MPLAB® C30 C 编译器用户指南

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.

器 件 支 持 文 件6.7.2 使 用 TBLRDx 指 令 访 问 EEDATA编 译 器 不 直 接 支 持 TBLRDx 指 令 , 但 可 以 通 过 行 内 汇 编 使 用 这 些 指 令 。 像 PSV 访 问 一样 , 通 过 一 个 SFR 值 形 成 一 个 23 位 的 地 址 , 并 将 地 址 编 码 为 指 令 的 一 部 分 。 为 访 问与 前 面 示 例 中 的 存 储 器 , 可 使 用 下 面 的 代 码 :要 使 用 TBLRDx 指 令 :• TBLPAG 寄 存 器 必 须 设 置 为 要 访 问 的 程 序 存 储 器 的 正 确 地 址 。 对 于 EE 数 据 存 储 器 ,这 一 地 址 为 0x7F, 但 最 好 使 用 __builtin_tblpage() 函 数 。• TBLRDx 指 令 只 能 通 过 __asm__ 语 句 访 问 。 关 于 这 一 指 令 的 信 息 , 请 参 阅Programmers Reference Manual (DS70030)。例 6-3:通 过 表 读 访 问 EEDATA#include #define eedata_read(src, dest) { \register int eedata_addr; \register int eedata_val; \\eedata_addr = __builtin_tbloffset(&src); \__asm__("tblrdl [%1], %0" : "=r"(eedata_val) : "r"(eedata_addr)); \dest = eedata_val; \}int main(void) {int value;TBLPAG = __builtin_tblpage(&user_data);eedata_read(user_data[2], value);if (value) ; /* do something */}6.7.3 其 他 信 息 来 源《dsPI<strong>C30</strong>F 系 列 参 考 手 册 》 的 第 5 章 (DS70052C_CN) 对 dsPIC 器 件 提 供 的 闪 存程 序 存 储 器 和 EE 数 据 存 储 器 的 使 用 进 行 了 很 好 的 论 述 。 本 章 也 包 含 关 于 程 序 存 储 器和 EE 数 据 存 储 器 运 行 时 编 程 的 信 息 。© 2005 Microchip Technology Inc. DS51284C_CN 第 85 页

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

Saved successfully!

Ooh no, something went wrong!