产 品 特 性 高 性 能 低 功 耗 的 8 位 AVR 微 处 理 器 先 进 的 RISC 结 构 3 条 指 令 大 多 数 指 令 执 行 时 间 为 单 个 时 钟 周 期 32 个 8 位 通 用 工 作 寄 存 器 全 静 态 工 作 工 作 于 6 MHz 时 性 能 高 达 6 MIPS 只 需 两 个 时 钟 周 期 的 硬 件 乘 法 器 非 易 失 性 程 序 和 数 据 存 储 器 8K 字 节 的 系 统 内 可 编 程 Flash 擦 写 寿 命 :, 次 具 有 独 立 锁 定 位 的 可 选 Boot 代 码 区 通 过 片 上 Boot 程 序 实 现 系 统 内 编 程 真 正 的 同 时 读 写 操 作 52 字 节 的 EEPROM 擦 写 寿 命 :, 次 K 字 节 的 片 内 SRAM 可 以 对 锁 定 位 进 行 编 程 以 实 现 用 户 程 序 的 加 密 外 设 特 点 两 个 具 有 独 立 预 分 频 器 8 位 定 时 器 / 计 数 器, 其 中 之 一 有 比 较 功 能 一 个 具 有 预 分 频 器 比 较 功 能 和 捕 捉 功 能 的 6 位 定 时 器 / 计 数 器 具 有 独 立 振 荡 器 的 实 时 计 数 器 RTC 三 通 道 PWM TQFP 与 MLF 封 装 的 8 路 ADC 8 路 位 ADC PDIP 封 装 的 6 路 ADC 8 路 位 ADC 面 向 字 节 的 两 线 接 口 两 个 可 编 程 的 串 行 USART 可 工 作 于 主 机 / 从 机 模 式 的 SPI 串 行 接 口 具 有 独 立 片 内 振 荡 器 的 可 编 程 看 门 狗 定 时 器 片 内 模 拟 比 较 器 特 殊 的 处 理 器 特 点 上 电 复 位 以 及 可 编 程 的 掉 电 检 测 片 内 经 过 标 定 的 RC 振 荡 器 片 内 / 片 外 中 断 源 5 种 睡 眠 模 式 : 空 闲 模 式 ADC 噪 声 抑 制 模 式 省 电 模 式 掉 电 模 式 及 Standby 模 式 I/O 和 封 装 23 个 可 编 程 的 I/O 口 28 引 脚 PDIP 封 装,32 引 脚 TQFP 封 装,32 引 脚 MLF 封 装 工 作 电 压 2.7-5.5V (ATmega8L) 4.5-5.5V (ATmega8) 速 度 等 级 - 8 MHz (ATmega8L) - 6 MHz (ATmega8) 4 Mhz 时 功 耗, 3V, 25 C 工 作 模 式 : 3.6 ma 空 闲 模 式 :. ma 掉 电 模 式 :.5 µa 具 有 8KB 系 统 内 可 编 程 Flash 的 8 位 微 控 制 器 ATmega8 ATmega8L
引 脚 配 置 PDIP (RESET) PC6 (RXD) PD (TXD) PD (INT) PD2 (INT) PD3 (XCK/T) PD4 VCC GND (XTAL/TOSC) PB6 (XTAL2/TOSC2) PB7 (T) PD5 (AIN) PD6 (AIN) PD7 (ICP) PB 2 3 4 5 6 7 8 9 2 3 4 28 27 26 25 24 23 22 2 2 9 8 7 6 5 PC5 (ADC5/SCL) PC4 (ADC4/SDA) PC3 (ADC3) PC2 (ADC2) PC (ADC) PC (ADC) GND AREF AVCC PB5 (SCK) PB4 (MISO) PB3 (MOSI/OC2) PB2 (SS/OCB) PB (OCA) TQFP Top View 32 3 3 29 28 27 26 25 (INT) PD3 (XCK/T) PD4 GND VCC GND VCC (XTAL/TOSC) PB6 (XTAL2/TOSC2) PB7 2 3 4 5 6 7 8 24 23 22 2 2 9 8 7 PC (ADC) PC (ADC) ADC7 GND AREF ADC6 AVCC PB5 (SCK) (T) PD5 (AIN) PD6 (AIN) PD7 (ICP) PB (OCA) PB (SS/OCB) PB2 (MOSI/OC2) PB3 (MISO) PB4 9 2 3 4 5 6 PD2 (INT) PD (TXD) PD (RXD) PC6 (RESET) PC5 (ADC5/SCL) PC4 (ADC4/SDA) PC3 (ADC3) PC2 (ADC2) MLF Top View 32 3 3 29 28 27 26 25 (INT) PD3 (XCK/T) PD4 GND VCC GND VCC (XTAL/TOSC) PB6 (XTAL2/TOSC2) PB7 2 3 4 5 6 7 8 24 23 22 2 2 9 8 7 PC (ADC) PC (ADC) ADC7 GND AREF ADC6 AVCC PB5 (SCK) (T) PD5 (AIN) PD6 (AIN) PD7 (ICP) PB (OCA) PB (SS/OCB) PB2 (MOSI/OC2) PB3 (MISO) PB4 9 2 3 4 5 6 PD2 (INT) PD (TXD) PD (RXD) PC6 (RESET) PC5 (ADC5/SCL) PC4 (ADC4/SDA) PC3 (ADC3) PC2 (ADC2) NOTE: The large center pad underneath the MLF packages is made of metal and internally connected to GND. It should be soldered or glued to the PCB to ensure good mechanical stability. If the center pad is left unconneted, the package might loosen from the PCB. 2 ATmega8(L)
ATmega8(L) 综 述 方 框 图 ATmega8 是 基 于 增 强 的 AVR RISC 结 构 的 低 功 耗 8 位 CMOS 微 控 制 器 由 于 其 先 进 的 指 令 集 以 及 单 时 钟 周 期 指 令 执 行 时 间, ATmega8 的 数 据 吞 吐 率 高 达 MIPS/MHz, 从 而 可 以 缓 减 系 统 在 功 耗 和 处 理 速 度 之 间 的 矛 盾 Figure. 结 构 框 图 XTAL RESET PC - PC6 PB - PB7 VCC XTAL2 PORTC DRIVERS/BUFFERS PORTB DRIVERS/BUFFERS GND PORTC DIGITAL INTERFACE PORTB DIGITAL INTERFACE MUX & ADC ADC INTERFACE TWI AGND AREF PROGRAM COUNTER STACK POINTER TIMERS/ COUNTERS OSCILLATOR PROGRAM FLASH SRAM INTERNAL OSCILLATOR INSTRUCTION REGISTER GENERAL PURPOSE REGISTERS WATCHDOG TIMER OSCILLATOR INSTRUCTION DECODER X Y Z MCU CTRL. & TIMING CONTROL LINES ALU INTERRUPT UNIT AVR CPU STATUS REGISTER EEPROM PROGRAMMING LOGIC SPI USART + - COMP. INTERFACE PORTD DIGITAL INTERFACE PORTD DRIVERS/BUFFERS PD - PD7 3
AVR 内 核 具 有 丰 富 的 指 令 集 和 32 个 通 用 工 作 寄 存 器 所 有 的 寄 存 器 都 直 接 与 算 逻 单 元 (ALU) 相 连 接, 使 得 一 条 指 令 可 以 在 一 个 时 钟 周 期 内 同 时 访 问 两 个 独 立 的 寄 存 器 这 种 结 构 大 大 提 高 了 代 码 效 率, 并 且 具 有 比 普 通 的 CISC 微 控 制 器 最 高 至 倍 的 数 据 吞 吐 率 ATmega8 有 如 下 特 点 :8K 字 节 的 系 统 内 可 编 程 Flash( 具 有 同 时 读 写 的 能 力, 即 RWW), 52 字 节 EEPROM,K 字 节 SRAM,32 个 通 用 I/O 口 线,32 个 通 用 工 作 寄 存 器, 三 个 具 有 比 较 模 式 的 灵 活 的 定 时 器 / 计 数 器 (T/C), 片 内 / 外 中 断, 可 编 程 串 行 USART, 面 向 字 节 的 两 线 串 行 接 口, 位 6 路 (8 路 为 TQFP 与 MLF 封 装 )ADC, 具 有 片 内 振 荡 器 的 可 编 程 看 门 狗 定 时 器, 一 个 SPI 串 行 端 口, 以 及 五 种 可 以 通 过 软 件 进 行 选 择 的 省 电 模 式 工 作 于 空 闲 模 式 时 CPU 停 止 工 作, 而 SRAM T/C SPI 端 口 以 及 中 断 系 统 继 续 工 作 ; 掉 电 模 式 时 晶 体 振 荡 器 停 止 振 荡, 所 有 功 能 除 了 中 断 和 硬 件 复 位 之 外 都 停 止 工 作 ; 在 省 电 模 式 下, 异 步 定 时 器 继 续 运 行, 允 许 用 户 保 持 一 个 时 间 基 准, 而 其 余 功 能 模 块 处 于 休 眠 状 态 ; ADC 噪 声 抑 制 模 式 时 终 止 CPU 和 除 了 异 步 定 时 器 与 ADC 以 外 所 有 I/O 模 块 的 工 作, 以 降 低 ADC 转 换 时 的 开 关 噪 声 ; Standby 模 式 下 只 有 晶 体 或 谐 振 振 荡 器 运 行, 其 余 功 能 模 块 处 于 休 眠 状 态, 使 得 器 件 只 消 耗 极 少 的 电 流, 同 时 具 有 快 速 启 动 能 力 本 芯 片 是 以 Atmel 高 密 度 非 易 失 性 存 储 器 技 术 生 产 的 片 内 ISP Flash 允 许 程 序 存 储 器 通 过 ISP 串 行 接 口, 或 者 通 用 编 程 器 进 行 编 程, 也 可 以 通 过 运 行 于 AVR 内 核 之 中 的 引 导 程 序 进 行 编 程 引 导 程 序 可 以 使 用 任 意 接 口 将 应 用 程 序 下 载 到 应 用 Flash 存 储 区 (Application Flash Memory) 在 更 新 应 用 Flash 存 储 区 时 引 导 Flash 区 (Boot Flash Memory) 的 程 序 继 续 运 行, 实 现 了 RWW 操 作 通 过 将 8 位 RISC CPU 与 系 统 内 可 编 程 的 Flash 集 成 在 一 个 芯 片 内, ATmega8 成 为 一 个 功 能 强 大 的 单 片 机, 为 许 多 嵌 入 式 控 制 应 用 提 供 了 灵 活 而 低 成 本 的 解 决 方 案 ATmega8 具 有 一 整 套 的 编 程 与 系 统 开 发 工 具, 包 括 :C 语 言 编 译 器 宏 汇 编 程 序 调 试 器 / 软 件 仿 真 器 仿 真 器 及 评 估 板 声 明 本 数 据 手 册 的 典 型 值 来 源 于 对 器 件 的 仿 真, 以 及 其 他 基 于 相 同 产 生 工 艺 的 AVR 微 控 制 器 的 标 定 特 性 本 器 件 经 过 特 性 化 之 后 将 给 出 实 际 的 最 大 值 和 最 小 值 4 ATmega8(L)
ATmega8(L) 引 脚 说 明 VCC 数 字 电 路 的 电 源 GND 地 端 口 B(PB7..PB) XTAL/XTAL2/TOSC/TOSC2 端 口 C(PC5..PC) PC6/RESET 端 口 D(PD7..PD) RESET 端 口 B 为 8 位 双 向 I/O 口, 具 有 可 编 程 的 内 部 上 拉 电 阻 其 输 出 缓 冲 器 具 有 对 称 的 驱 动 特 性, 可 以 输 出 和 吸 收 大 电 流 作 为 输 入 使 用 时, 若 内 部 上 拉 电 阻 使 能, 端 口 被 外 部 电 路 拉 低 时 将 输 出 电 流 在 复 位 过 程 中, 即 使 系 统 时 钟 还 未 起 振, 端 口 B 处 于 高 阻 状 态 通 过 时 钟 选 择 熔 丝 位 的 设 置, PB6 可 作 为 反 向 振 荡 放 大 器 或 时 钟 操 作 电 路 的 输 入 端 通 过 时 钟 选 择 熔 丝 位 的 设 置 PB7 可 作 为 反 向 振 荡 放 大 器 的 输 出 端 若 将 片 内 标 定 RC 振 荡 器 作 为 芯 片 时 钟 源, 且 ASSR 寄 存 器 的 AS2 位 设 置,PB7..6 作 为 异 步 T/C2 的 TOSC2.. 输 入 端 端 口 B 的 其 他 功 能 见 P 55 端 口 B 的 第 二 功 能 及 P 22 系 统 时 钟 及 时 钟 选 项 端 口 C 为 7 位 双 向 I/O 口, 具 有 可 编 程 的 内 部 上 拉 电 阻 其 输 出 缓 冲 器 具 有 对 称 的 驱 动 特 性, 可 以 输 出 和 吸 收 大 电 流 作 为 输 入 使 用 时, 若 内 部 上 拉 电 阻 使 能, 端 口 被 外 部 电 路 拉 低 时 将 输 出 电 流 在 复 位 过 程 中, 即 使 系 统 时 钟 还 未 起 振, 端 口 C 处 于 高 阻 状 态 若 RSTDISBL 熔 丝 位 编 程, PC6 作 为 I/O 引 脚 使 用 注 意 PC6 的 电 气 特 性 与 端 口 C 的 其 他 引 脚 不 同 若 RSTDISBL 熔 丝 位 未 编 程, PC6 作 为 复 位 输 入 引 脚 持 续 时 间 超 过 最 小 门 限 时 间 的 低 电 平 将 引 起 系 统 复 位 门 限 时 间 见 P 35Table 5 持 续 时 间 小 于 门 限 时 间 的 脉 冲 不 能 保 证 可 靠 复 位 端 口 C 的 其 他 功 能 见 后 端 口 D 为 8 位 双 向 I/O 口, 具 有 可 编 程 的 内 部 上 拉 电 阻 其 输 出 缓 冲 器 具 有 对 称 的 驱 动 特 性, 可 以 输 出 和 吸 收 大 电 流 作 为 输 入 使 用 时, 若 内 部 上 拉 电 阻 使 能, 则 端 口 被 外 部 电 路 拉 低 时 将 输 出 电 流 在 复 位 过 程 中, 即 使 系 统 时 钟 还 未 起 振, 端 口 D 处 于 高 阻 状 态 端 口 D 的 其 他 功 能 见 后 复 位 输 入 引 脚 持 续 时 间 超 过 最 小 门 限 时 间 的 低 电 平 将 引 起 系 统 复 位 门 限 时 间 见 P 35Table 5 持 续 时 间 小 于 门 限 时 间 的 脉 冲 不 能 保 证 可 靠 复 位 5
AV CC AV CC 是 A/D 转 换 器 端 口 C (3..) 及 ADC (7..6) 的 电 源 不 使 用 ADC 时, 该 引 脚 应 直 接 与 V CC 连 接 使 用 ADC 时 应 通 过 一 个 低 通 滤 波 器 与 V CC 连 接 注 意, 端 口 C (5..4) 为 数 字 电 源, V CC AREF A/D 的 模 拟 基 准 输 入 引 脚 ADC7..6(TQFP 与 MLF 封 装 ) 代 码 例 子 TQFP 与 MLF 封 装 的 ADC7..6 作 为 A/D 转 换 器 的 模 拟 输 入 为 模 拟 电 源 且 作 为 位 ADC 通 道 本 数 据 手 册 包 含 了 一 些 简 单 的 代 码 例 子 以 说 明 如 何 使 用 芯 片 各 个 不 同 的 功 能 模 块 这 些 例 子 都 假 定 在 编 译 之 前 已 经 包 含 了 正 确 的 头 文 件 有 些 C 编 译 器 在 头 文 件 里 并 没 有 包 含 位 定 义, 而 且 各 个 C 编 译 器 对 中 断 处 理 有 自 己 不 同 的 处 理 方 式 请 注 意 查 阅 相 关 文 档 以 获 取 具 体 的 信 息 6 ATmega8(L)
ATmega8(L) AVR CPU 内 核 介 绍 结 构 综 述 本 节 从 总 体 上 讨 论 AVR 内 核 的 结 构 CPU 的 主 要 任 务 是 保 证 程 序 的 正 确 执 行 因 此 它 必 须 能 够 访 问 存 储 器 执 行 运 算 控 制 外 设 以 及 处 理 中 断 Figure 2. AVR MCU 结 构 的 方 框 图 Data Bus 8-bit Flash Program Memory Program Counter Status and Control Instruction Register 32 x 8 General Purpose Registrers Interrupt Unit SPI Unit Instruction Decoder Control Lines Direct Addressing Indirect Addressing ALU Watchdog Timer Analog Comparator i/o Module Data SRAM i/o Module 2 i/o Module n EEPROM I/O Lines 为 了 获 得 最 高 的 性 能 以 及 并 行 性, AVR 采 用 了 Harvard 结 构, 具 有 独 立 的 数 据 和 程 序 总 线 程 序 存 储 器 里 的 指 令 通 过 一 级 流 水 线 运 行 CPU 在 执 行 一 条 指 令 的 同 时 读 取 下 一 条 指 令 ( 在 本 文 称 为 预 取 ) 这 个 概 念 实 现 了 指 令 的 单 时 钟 周 期 运 行 程 序 存 储 器 是 可 以 在 线 编 程 的 Flash 快 速 访 问 寄 存 器 文 件 包 括 32 个 8 位 通 用 工 作 寄 存 器, 访 问 时 间 为 一 个 时 钟 周 期 从 而 实 现 了 单 时 钟 周 期 的 ALU 操 作 在 典 型 的 ALU 操 作 中, 两 个 位 于 寄 存 器 文 件 中 的 操 作 数 同 时 被 访 问, 然 后 执 行 运 算, 结 果 再 被 送 回 到 寄 存 器 文 件 整 个 过 程 仅 需 一 个 时 钟 周 期 寄 存 器 文 件 里 有 6 个 寄 存 器 可 以 用 作 3 个 6 位 的 间 接 寻 址 寄 存 器 指 针 以 寻 址 数 据 空 间, 实 现 高 效 的 地 址 运 算 其 中 一 个 指 针 还 可 以 作 为 程 序 存 储 器 查 询 表 的 地 址 指 针 这 些 附 加 的 功 能 寄 存 器 即 为 6 位 的 X Y Z 寄 存 器 ALU 支 持 寄 存 器 之 间 以 及 寄 存 器 和 常 数 之 间 的 算 术 和 逻 辑 运 算 ALU 也 可 以 执 行 单 寄 存 器 操 作 运 算 完 成 之 后 状 态 寄 存 器 的 内 容 得 到 更 新 以 反 映 操 作 结 果 7
程 序 流 程 通 过 有 / 无 条 件 的 跳 转 指 令 和 调 用 指 令 来 控 制, 从 而 直 接 寻 址 整 个 地 址 空 间 大 多 数 指 令 长 度 为 6 位, 亦 即 每 个 程 序 存 储 器 地 址 都 包 含 一 条 6 位 或 32 位 的 指 令 程 序 存 储 器 空 间 分 为 两 个 区 : 引 导 程 序 区 (Boot 区 ) 和 应 用 程 序 区 这 两 个 区 都 有 专 门 的 锁 定 位 以 实 现 读 和 读 / 写 保 护 用 于 写 应 用 程 序 区 的 SPM 指 令 必 须 位 于 引 导 程 序 区 在 中 断 和 调 用 子 程 序 时 返 回 地 址 的 程 序 计 数 器 (PC) 保 存 于 堆 栈 之 中 堆 栈 位 于 通 用 数 据 SRAM, 因 此 其 深 度 仅 受 限 于 SRAM 的 大 小 在 复 位 例 程 里 用 户 首 先 要 初 始 化 堆 栈 指 针 SP 这 个 指 针 位 于 I/O 空 间, 可 以 进 行 读 写 访 问 数 据 SRAM 可 以 通 过 5 种 不 同 的 寻 址 模 式 进 行 访 问 AVR 存 储 器 空 间 为 线 性 的 平 面 结 构 AVR 有 一 个 灵 活 的 中 断 模 块 控 制 寄 存 器 位 于 I/O 空 间 状 态 寄 存 器 里 有 全 局 中 断 使 能 位 每 个 中 断 在 中 断 向 量 表 里 都 有 独 立 的 中 断 向 量 各 个 中 断 的 优 先 级 与 其 在 中 断 向 量 表 的 位 置 有 关, 中 断 向 量 地 址 越 低, 优 先 级 越 高 I/O 存 储 器 空 间 包 含 64 个 可 以 直 接 寻 址 的 地 址, 作 为 CPU 外 设 的 控 制 寄 存 器 SPI, 以 及 其 他 I/O 功 能 映 射 到 数 据 空 间 即 为 寄 存 器 文 件 之 后 的 地 址 x2 - x5f 8 ATmega8(L)
ATmega8(L) ALU - 算 术 逻 辑 单 元 状 态 寄 存 器 AVR ALU 与 32 个 通 用 工 作 寄 存 器 直 接 相 连 寄 存 器 与 寄 存 器 之 间 寄 存 器 与 立 即 数 之 间 的 ALU 运 算 只 需 要 一 个 时 钟 周 期 ALU 操 作 分 为 3 类 : 算 术 逻 辑 和 位 操 作 此 外 还 提 供 了 支 持 无 / 有 符 号 数 和 分 数 乘 法 的 乘 法 器 具 体 请 参 见 指 令 集 状 态 寄 存 器 包 含 了 最 近 执 行 的 算 术 指 令 的 结 果 信 息 这 些 信 息 可 以 用 来 改 变 程 序 流 程 以 实 现 条 件 操 作 如 指 令 集 所 述, 所 有 ALU 运 算 都 将 影 响 状 态 寄 存 器 的 内 容 这 样, 在 许 多 情 况 下 就 不 需 要 专 门 的 比 较 指 令 了, 从 而 使 系 统 运 行 更 快 速, 代 码 效 率 更 高 在 进 入 中 断 服 务 程 序 时 状 态 寄 存 器 不 会 自 动 保 存, 中 断 返 回 时 也 不 会 自 动 恢 复 这 些 工 作 需 要 软 件 来 处 理 AVR 中 断 寄 存 器 SREG 定 义 如 下 : Bit 7 6 5 4 3 2 I T H S V N Z C SREG 读 / 写 R/W R/W R/W R/W R/W R/W R/W R/W 初 始 值 Bit 7 I: 全 局 中 断 使 能 I 置 位 时 使 能 全 局 中 断 单 独 的 中 断 使 能 由 其 他 独 立 的 控 制 寄 存 器 控 制 如 果 I 清 零, 则 不 论 单 独 中 断 标 志 置 位 与 否, 都 不 会 产 生 中 断 任 意 一 个 中 断 发 生 后 I 清 零, 而 执 行 RETI 指 令 后 I 恢 复 置 位 以 使 能 中 断 I 也 可 以 通 过 SEI 和 CLI 指 令 来 置 位 和 清 零 Bit 6 T: 位 拷 贝 存 储 位 拷 贝 指 令 BLD 和 BST 利 用 T 作 为 目 的 或 源 地 址 BST 把 寄 存 器 的 某 一 位 拷 贝 到 T, 而 BLD 把 T 拷 贝 到 寄 存 器 的 某 一 位 Bit 5 H: 半 进 位 标 志 半 进 位 标 志 H 表 示 算 术 操 作 发 生 了 半 进 位 此 标 志 对 于 BCD 运 算 非 常 有 用 详 见 指 令 集 的 说 明 Bit 4 S: 符 号 位, S = N V S 为 负 数 标 志 N 与 2 的 补 码 溢 出 标 志 V 的 异 或 详 见 指 令 集 的 说 明 Bit 3 V:2 的 补 码 溢 出 标 志 支 持 2 的 补 码 运 算 详 见 指 令 集 的 说 明 Bit 2 N: 负 数 标 志 表 明 算 术 或 逻 辑 操 作 结 果 为 负 详 见 指 令 集 的 说 明 Bit Z: 零 标 志 表 明 算 术 或 逻 辑 操 作 结 果 为 零 详 见 指 令 集 的 说 明 Bit C: 进 位 标 志 表 明 算 术 或 逻 辑 操 作 发 生 了 进 位 详 见 指 令 集 的 说 明 通 用 寄 存 器 文 件 寄 存 器 文 件 针 对 AVR 增 强 型 RISC 指 令 集 做 了 优 化 为 了 获 得 需 要 的 性 能 和 灵 活 性, 寄 存 器 文 件 支 持 以 下 的 输 入 / 输 出 方 案 : 输 出 一 个 8 位 操 作 数, 输 入 一 个 8 位 结 果 输 出 两 个 8 位 位 操 作 数, 输 入 一 个 8 位 结 果 输 出 两 个 8 位 位 操 作 数, 输 入 一 个 6 位 结 果 输 出 一 个 6 位 位 操 作 数, 输 入 一 个 6 位 结 果 Figure 3 为 CPU 32 个 通 用 工 作 寄 存 器 的 结 构 9
Figure 3. AVR CPU 通 用 工 作 寄 存 器 7 Addr. R x R x R2 x2 R3 xd 通 用 R4 xe 工 作 R5 xf 寄 存 器 R6 x R7 x R26 xa X 寄 存 器, 低 字 节 R27 xb X 寄 存 器, 高 字 节 R28 xc Y 寄 存 器, 低 字 节 R29 xd Y 寄 存 器, 高 字 节 R3 xe Z 寄 存 器, 低 字 节 R3 xf Z 寄 存 器, 高 字 节 大 多 数 操 作 寄 存 器 文 件 的 指 令 都 可 以 直 接 访 问 所 有 的 寄 存 器, 而 且 多 数 这 样 的 指 令 的 执 行 时 间 为 单 个 时 钟 周 期 如 Figure 3 所 示, 每 个 寄 存 器 都 有 一 个 数 据 内 存 地 址, 将 他 们 直 接 映 射 到 用 户 数 据 空 间 的 头 32 个 地 址 虽 然 寄 存 器 文 件 的 物 理 实 现 不 是 SRAM, 这 种 内 存 组 织 方 式 在 访 问 寄 存 器 方 面 具 有 极 大 的 灵 活 性, 因 为 X Y Z 寄 存 器 可 以 设 置 为 指 向 任 意 寄 存 器 的 指 针 ATmega8(L)
ATmega8(L) X Y Z 寄 存 器 寄 存 器 R26..R3 除 了 用 作 通 用 寄 存 器 外, 还 可 以 作 为 数 据 间 接 寻 址 用 的 地 址 指 针 这 三 个 间 接 寻 址 寄 存 器 示 于 Figure 4 Figure 4. X Y Z 寄 存 器 5 XH XL X 寄 存 器 7 7 R27 (xb) R26 (xa) 5 YH YL Y 寄 存 器 7 7 R29 (xd) R28 (xc) 5 ZH ZL Z 寄 存 器 7 7 R3 (xf) R3 (xe) 在 不 同 的 寻 址 模 式 中, 这 些 地 址 寄 存 器 可 以 实 现 固 定 偏 移 量, 自 动 加 一 和 自 动 减 一 功 能 具 体 细 节 请 参 见 指 令 集 堆 栈 指 针 堆 栈 指 针 主 要 用 来 保 存 临 时 数 据 局 部 变 量 和 中 断 / 子 程 序 的 返 回 地 址 堆 栈 指 针 总 是 指 向 堆 栈 的 顶 部 要 注 意 AVR 的 堆 栈 是 向 下 生 长 的, 即 新 数 据 推 入 堆 栈 时, 堆 栈 指 针 的 数 值 将 减 小 堆 栈 指 针 指 向 数 据 SRAM 堆 栈 区 在 此 聚 集 了 子 程 序 堆 栈 和 中 断 堆 栈 调 用 子 程 序 和 使 能 中 断 之 前 必 须 定 义 堆 栈 空 间, 且 堆 栈 指 针 必 须 指 向 高 于 x6 的 地 址 空 间 使 用 PUSH 指 令 将 数 据 推 入 堆 栈 时 指 针 减 一 ; 而 子 程 序 或 中 断 返 回 地 址 推 入 堆 栈 时 指 针 将 减 二 使 用 POP 指 令 将 数 据 弹 出 堆 栈 时, 堆 栈 指 针 加 一 ; 而 用 RET 或 RETI 指 令 从 子 程 序 或 中 断 返 回 时 堆 栈 指 针 加 二 AVR 的 堆 栈 指 针 由 I/O 空 间 中 的 两 个 8 位 寄 存 器 实 现 实 际 使 用 的 位 数 与 具 体 器 件 有 关 请 注 意 某 些 AVR 器 件 的 数 据 区 太 小, 用 SPL 就 足 够 了 此 时 将 不 给 出 SPH 寄 存 器 Bit 5 4 3 2 9 8 SP5 SP4 SP3 SP2 SP SP SP9 SP8 SPH SP7 SP6 SP5 SP4 SP3 SP2 SP SP SPL 7 6 5 4 3 2 读 / 写 R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W 初 始 值 指 令 执 行 时 序 这 一 节 介 绍 指 令 执 行 过 程 中 的 访 问 时 序 AVR CPU 由 系 统 时 钟 clk CPU 驱 动 此 时 钟 直 接 来 自 选 定 的 时 钟 源 芯 片 内 部 不 对 此 时 钟 进 行 分 频 Figure 5 说 明 了 由 Harvard 结 构 决 定 的 并 行 取 指 和 指 令 执 行, 以 及 可 以 进 行 快 速 访 问 的 寄 存 器 文 件 的 概 念 这 是 一 个 基 本 的 流 水 线 概 念, 性 能 高 达 MIPS/MHz, 具 有 优 良 的 性 价 比 功 能 / 时 钟 比 功 能 / 功 耗 比
Figure 5. 并 行 取 指 和 指 令 执 行 T T2 T3 T4 clk CPU st Instruction Fetch st Instruction Execute 2nd Instruction Fetch 2nd Instruction Execute 3rd Instruction Fetch 3rd Instruction Execute 4th Instruction Fetch Figure 6 演 示 的 是 寄 存 器 文 件 内 部 访 问 时 序 在 一 个 时 钟 周 期 里,ALU 可 以 同 时 对 两 个 寄 存 器 操 作 数 进 行 操 作, 同 时 将 结 果 保 存 到 目 的 寄 存 器 中 去 Figure 6. 单 时 钟 周 期 ALU 操 作 T T2 T3 T4 clk CPU Total Execution Time Register Operands Fetch ALU Operation Execute Result Write Back 复 位 与 中 断 处 理 AVR 有 不 同 的 中 断 源 每 个 中 断 和 复 位 在 程 序 空 间 都 有 独 立 的 中 断 向 量 所 有 的 中 断 事 件 都 有 自 己 的 使 能 位 当 使 能 位 置 位, 且 状 态 寄 存 器 的 全 局 中 断 使 能 位 I 也 置 位 时, 中 断 可 以 发 生 根 据 程 序 计 数 器 PC 的 不 同, 在 引 导 锁 定 位 BLB2 或 BLB2 被 编 程 的 情 况 下, 中 断 可 能 被 自 动 禁 止 这 个 特 性 提 高 了 软 件 的 安 全 性 详 见 P 29 存 储 器 编 程 的 描 述 程 序 存 储 区 的 最 低 地 址 缺 省 为 复 位 向 量 和 中 断 向 量 完 整 的 向 量 列 表 请 参 见 P 43 中 断 列 表 也 决 定 了 不 同 中 断 的 优 先 级 向 量 所 在 的 地 址 越 低, 优 先 级 越 高 RESET 具 有 最 高 的 优 先 级, 第 二 个 为 INT 外 部 中 断 请 求 通 过 置 位 通 用 中 断 控 制 寄 存 器 (GICR) 的 IVSEL, 中 断 向 量 可 以 移 至 引 导 Flash 的 起 始 处, 参 见 P 43 中 断 编 程 熔 丝 位 BOOTRST 也 可 以 将 复 位 向 量 移 至 引 导 Flash 的 起 始 处 具 体 参 见 P 96 支 持 引 导 装 入 程 序 - 在 写 的 同 时 可 以 读 (RWW, Read-While-Write) 的 自 我 编 程 能 力 任 一 中 断 发 生 时 全 局 中 断 使 能 位 I 被 清 零, 从 而 禁 止 了 所 有 其 他 的 中 断 用 户 软 件 可 以 在 中 断 程 序 里 置 位 I 来 实 现 中 断 嵌 套 此 时 所 有 的 中 断 都 可 以 中 断 当 前 的 中 断 服 务 程 序 执 行 RETI 指 令 后 I 自 动 置 位 从 根 本 上 说 有 两 种 类 型 的 中 断 第 一 种 由 事 件 触 发 并 置 位 中 断 标 志 对 于 这 些 中 断, 程 序 计 数 器 跳 转 到 实 际 的 中 断 向 量 以 执 行 中 断 处 理 程 序, 同 时 硬 件 将 清 除 相 应 的 中 断 标 志 中 断 标 志 也 可 以 通 过 对 其 写 的 方 式 来 清 除 当 中 断 发 生 后, 如 果 相 应 的 中 断 使 能 位 为 "", 则 中 断 标 志 位 置 位, 并 一 直 保 持 到 中 断 执 行, 或 者 被 软 件 清 除 类 似 的, 如 果 全 局 中 断 标 志 被 清 零, 则 所 有 已 发 生 的 中 断 都 不 会 被 执 行, 直 到 I 置 位 然 后 挂 起 的 各 个 中 断 按 中 断 优 先 级 依 次 执 行 2 ATmega8(L)
ATmega8(L) 第 二 种 类 型 的 中 断 则 是 只 要 中 断 条 件 满 足, 就 会 一 直 触 发 这 些 中 断 不 需 要 中 断 标 志 若 中 断 条 件 在 中 断 使 能 之 前 就 消 失 了, 中 断 不 会 被 触 发 AVR 退 出 中 断 后 总 是 回 到 主 程 序 并 至 少 执 行 一 条 指 令 才 可 以 去 执 行 其 他 被 挂 起 的 中 断 要 注 意 的 是, 进 入 中 断 服 务 程 序 时 状 态 寄 存 器 不 会 自 动 保 存, 中 断 返 回 时 也 不 会 自 动 恢 复 这 些 工 作 必 须 由 用 户 通 过 软 件 来 完 成 使 用 CLI 指 令 来 禁 止 中 断 时, 中 断 禁 止 立 即 生 效 没 有 中 断 可 以 在 执 行 CLI 指 令 后 发 生, 即 使 它 是 在 执 行 CLI 指 令 的 同 时 发 生 的 下 面 的 例 子 说 明 了 如 何 在 写 EEPROM 时 使 用 这 个 指 令 来 防 止 中 断 发 生 以 避 免 对 EEPROM 内 容 的 破 坏 汇 编 代 码 例 程 in r6, SREG ; 保 存 SREG cli ; 禁 止 中 断 sbi EECR, EEMWE ; 启 动 EEPROM 写 操 作 sbi EECR, EEWE out SREG, r6 ; 恢 复 SREG (I 位 ) C 代 码 例 程 char csreg; csreg = SREG; /* 保 存 SREG */ /* 禁 止 中 断 */ _CLI(); EECR = (<<EEMWE); /* 启 动 EEPROM 写 操 作 */ EECR = (<<EEWE); SREG = csreg; /* 恢 复 SREG (I 位 ) */ 使 用 SEI 指 令 使 能 中 断 时, 紧 跟 其 后 的 第 一 条 指 令 在 执 行 任 何 中 断 之 前 一 定 会 首 先 得 到 执 行 汇 编 代 码 例 程 sei ; 置 位 全 局 中 断 使 能 标 志 sleep ; 进 入 休 眠 模 式, 等 待 中 断 发 生 ; 注 意 : 在 执 行 任 何 被 挂 起 的 中 断 之 前 MCU 将 首 先 进 入 休 眠 模 式 C 代 码 例 程 _SEI(); /* 置 位 全 局 中 断 使 能 标 志 */ _SLEEP(); /* 进 入 休 眠 模 式, 等 待 中 断 发 生 */ /* 注 意 : 在 执 行 任 何 被 挂 起 的 中 断 之 前 MCU 将 首 先 进 入 休 眠 模 式 */ 中 断 响 应 时 间 AVR 中 断 响 应 时 间 最 少 为 4 个 时 钟 周 期 4 个 时 钟 周 期 后, 程 序 跳 转 到 实 际 的 中 断 处 理 例 程 在 这 4 个 时 钟 期 期 间 PC 自 动 入 栈 在 通 常 情 况 下, 中 断 向 量 为 一 个 跳 转 指 令, 此 跳 转 需 要 3 个 时 钟 周 期 如 果 中 断 在 一 个 多 时 钟 周 期 指 令 执 行 期 间 发 生, 则 在 此 多 周 期 指 令 执 行 完 毕 后 MCU 才 会 执 行 中 断 程 序 若 中 断 发 生 时 MCU 处 于 休 眠 模 式, 中 断 响 应 时 间 还 需 增 加 4 个 时 钟 周 期 此 外 还 要 考 虑 到 不 同 的 休 眠 模 式 所 需 要 的 启 动 时 间 中 断 返 回 需 要 4 个 时 钟 在 此 期 间 PC( 两 个 字 节 ) 将 被 弹 出 栈, 堆 栈 指 针 加 二, 状 态 寄 存 器 SREG 的 I 置 位 3
AVR ATmega8 存 储 器 系 统 内 可 编 程 的 Flash 程 序 存 储 器 本 节 讲 述 ATmega8 的 存 储 器 AVR 结 构 具 有 两 个 主 要 的 存 储 器 空 间 : 数 据 存 储 器 空 间 和 程 序 存 储 器 空 间 此 外, ATmega8 还 有 EEPROM 存 储 器 以 保 存 数 据 这 三 个 存 储 器 空 间 都 为 线 性 的 平 面 结 构 ATmega8 具 有 8K 字 节 的 在 线 编 程 Flash, 用 于 存 放 程 序 指 令 代 码 因 为 所 有 的 AVR 指 令 为 6 位 或 32 位, 故 而 Flash 组 织 成 4K x 6 位 的 形 式 用 户 程 序 的 安 全 性 要 根 据 Flash 程 序 存 储 器 的 两 个 区 : 引 导 (Boot) 程 序 区 和 应 用 程 序 区, 分 开 来 考 虑 Flash 存 储 器 至 少 可 以 擦 写, 次 ATmega8 的 程 序 计 数 器 (PC) 为 2 位, 因 此 可 以 寻 址 4K 字 的 程 序 存 储 器 空 间 引 导 程 序 区 以 及 相 关 的 软 件 安 全 锁 定 位 请 参 见 P 96 支 持 引 导 装 入 程 序 - 在 写 的 同 时 可 以 读 (RWW, Read-While-Write) 的 自 我 编 程 能 力, 而 P 29 存 储 器 编 程 详 述 了 用 SPI 或 平 行 编 程 模 式 实 现 对 Flash 编 程 常 数 可 以 保 存 于 整 个 程 序 存 储 器 地 址 空 间 ( 参 考 LPM 加 载 程 序 存 储 器 指 令 的 说 明 ) 取 指 与 执 行 时 序 图 请 参 见 P 指 令 执 行 时 序 Figure 7. 程 序 存 储 器 映 像 $ Application Flash Section Boot Flash Section $FFF 4 ATmega8(L)
ATmega8(L) SRAM 数 据 存 储 器 Figure 8 给 出 了 ATmega8 SRAM 空 间 的 组 织 结 构 前 2 个 数 据 存 储 器 包 括 了 寄 存 器 文 件 I/O 存 储 器 及 内 部 数 据 SRAM 起 始 的 96 个 地 址 为 寄 存 器 文 件 与 I/O 存 储 器, 接 着 是 24 字 节 的 内 部 数 据 SRAM 数 据 存 储 器 的 寻 址 方 式 分 为 5 种 : 直 接 寻 址 带 偏 移 量 的 间 接 寻 址 间 接 寻 址 带 预 减 量 的 间 接 寻 址 和 带 后 增 量 的 间 接 寻 址 寄 存 器 文 件 中 的 寄 存 器 R26 到 R3 为 间 接 寻 址 的 指 针 寄 存 器 直 接 寻 址 范 围 可 达 整 个 数 据 区 带 偏 移 量 的 间 接 寻 址 模 式 能 够 寻 址 到 由 寄 存 器 Y 和 Z 给 定 的 基 址 附 近 的 63 个 地 址 在 自 动 预 减 和 后 加 的 间 接 寻 址 模 式 中, 寄 存 器 X Y 和 Z 自 动 增 加 或 减 少 ATmega8 的 全 部 32 个 通 用 寄 存 器 64 个 I/O 寄 存 器 及 24 个 字 节 的 内 部 数 据 SRAM 可 以 通 过 所 有 上 述 的 寻 址 模 式 进 行 访 问 寄 存 器 文 件 的 描 述 见 P 9 通 用 寄 存 器 文 件 Figure 8. 数 据 存 储 器 映 像 Register File R R R2... Data Address Space $ $ $2... R29 R3 R3 I/O Registers $ $ $2... $3D $3E $3F $D $E $F $2 $2 $22... $5D $5E $5F Internal SRAM $6 $6... $45E $45F 5
数 据 存 储 器 访 问 时 间 本 节 说 明 访 问 内 部 存 储 器 的 时 序, 内 部 数 据 SRAM 访 问 时 间 为 两 个 clk CPU 时 钟, 如 Figure 9 所 示 Figure 9. 片 上 数 据 SRAM 存 取 周 期 T T2 T3 clk CPU Address Compute Address Address Valid Data WR Data RD Read Write Memory Vccess Instruction Next Instruction EEPROM 数 据 存 储 器 ATmega8 包 含 52 字 节 的 EEPROM 数 据 存 储 器 它 是 作 为 一 个 独 立 的 数 据 空 间 而 存 在 的, 可 以 按 字 节 读 写 EEPROM 的 寿 命 至 少 为, 次 擦 除 周 期 EEPROM 的 访 问 由 地 址 寄 存 器 数 据 寄 存 器 和 控 制 寄 存 器 决 定 P 29 存 储 器 编 程 包 含 使 用 SPI 或 并 行 编 程 模 式 对 EEPROM 编 程 EEPROM 读 / 写 访 问 EEPROM 的 访 问 寄 存 器 位 于 I/O 空 间 EEPROM 的 写 访 问 时 间 由 Table 给 出 自 定 时 功 能 可 以 让 用 户 软 件 监 测 何 时 可 以 开 始 写 下 一 字 节 用 户 操 作 EEPROM 需 要 注 意 如 下 问 题 : 在 电 源 滤 波 时 间 常 数 比 较 大 的 电 路 中, 上 电 / 下 电 时 V CC 上 升 / 下 降 速 度 会 比 较 慢 此 时 CPU 可 能 工 作 于 低 于 晶 振 所 要 求 的 电 源 电 压 请 参 见 P 2 防 止 EEPROM 数 据 丢 失 以 避 免 出 现 EEPROM 数 据 丢 失 的 问 题 为 了 防 止 无 意 间 对 EEPROM 的 写 操 作, 需 要 执 行 一 个 特 定 的 写 时 序 具 体 参 看 EEPROM 控 制 寄 存 器 的 内 容 执 行 EEPROM 读 操 作 时, CPU 会 停 止 工 作 4 个 周 期, 然 后 再 执 行 后 续 指 令 ; 执 行 EEPROM 写 操 作 时, CPU 会 停 止 工 作 2 个 周 期, 然 后 再 执 行 后 续 指 令 6 ATmega8(L)
ATmega8(L) EEPROM 地 址 寄 存 器 - EEARH 和 EEARL Bit 5 4 3 2 9 8 EEAR8 EEARH EEAR7 EEAR6 EEAR5 EEAR4 EEAR3 EEAR2 EEAR EEAR EEARL 7 6 5 4 3 2 读 / 写 R R R R R R R R/W R/W R/W R/W R/W R/W R/W R/W R/W 初 始 值 X X X X X X X X X Bits 5..9 Res: 保 留 保 留 位, 读 操 作 返 回 值 为 零 Bits 8.. EEAR8..: EEPROM 地 址 EEPROM 地 址 寄 存 器 EEARH 和 EEARL 指 定 了 52 字 节 的 EEPROM 空 间 EEPROM 地 址 是 线 性 的, 从 到 5 EEAR 的 初 始 值 没 有 定 义 在 访 问 EEPROM 之 前 必 须 为 其 赋 予 正 确 的 数 据 EEPROM 数 据 寄 存 器 - EEDR Bit 7 6 5 4 3 2 MSB LSB EEDR 读 / 写 R/W R/W R/W R/W R/W R/W R/W R/W 初 始 值 Bits 7.. EEDR7..: EEPROM 数 据 对 于 EEPROM 写 操 作, EEDR 是 需 要 写 到 EEAR 单 元 的 数 据 ; 对 于 读 操 作, EEDR 是 从 地 址 EEAR 读 取 的 数 据 EEPROM 控 制 寄 存 器 - EECR Bit 7 6 5 4 3 2 EERIE EEMWE EEWE EERE EECR 读 / 写 R R R R R/W R/W R/W R/W 初 始 值 X Bits 7..4 Res: 保 留 保 留 位, 读 操 作 返 回 值 为 零 Bit 3 EERIE: EEPROM 就 绪 中 断 使 能 若 SREG 的 I 为 "", 则 置 位 EERIE 将 使 能 EEPROM 就 绪 中 断 清 零 EERIE 则 禁 止 此 中 断 当 EEWE 清 零 时 EEPROM 就 绪 中 断 即 可 发 生 Bit 2 EEMWE: EEPROM 主 机 写 使 能 EEMWE 决 定 了 EEWE 置 位 是 否 可 以 启 动 EEPROM 写 操 作 当 EEMWE 为 "" 时, 在 4 个 时 钟 周 期 内 置 位 EEWE 将 把 数 据 写 入 EEPROM 的 指 定 地 址 ; 若 EEMWE 为 ", 则 操 作 EEWE 不 起 作 用 EEMWE 置 位 后 4 个 周 期, 硬 件 对 其 清 零 见 EEPROM 写 过 程 中 对 EEWE 位 的 描 述 Bit EEWE: EEPROM 写 使 能 EEWE 为 EEPROM 写 操 作 的 使 能 信 号 当 EEPROM 数 据 和 地 址 设 置 好 之 后, 需 置 位 EEWE 以 便 将 数 据 写 入 EEPROM 此 时 EEMWE 必 须 置 位, 否 则 EEPROM 写 操 作 将 不 会 发 生 写 时 序 如 下 ( 第 3 步 和 第 4 步 的 次 序 并 不 重 要 ):. 等 待 EEWE 位 变 为 零 2. 等 待 SPMCSR 中 的 SPMEN 位 变 为 零 3. 将 新 的 EEPROM 地 址 写 入 EEAR( 可 选 ) 7
4. 将 新 的 EEPROM 数 据 写 入 EEDR( 可 选 ) 5. 对 EECR 寄 存 器 的 EEMWE 写 "", 同 时 清 零 EEWE 6. 在 置 位 EEMWE 的 4 个 周 期 内, 置 位 EEWE 在 CPU 写 Flash 存 储 器 的 时 候 不 能 对 EEPROM 进 行 编 程 在 启 动 EEPROM 写 操 作 之 前 软 件 必 须 检 查 Flash 写 操 作 是 否 已 经 完 成 步 骤 (2) 仅 在 软 件 包 含 引 导 程 序 并 允 许 CPU 对 Flash 进 行 编 程 时 才 有 用 如 果 CPU 永 远 都 不 会 写 Flash, 步 骤 (2) 可 省 略 请 参 见 P 96 支 持 引 导 装 入 程 序 - 在 写 的 同 时 可 以 读 (RWW, Read-While-Write) 的 自 我 编 程 能 力 注 意 : 如 果 在 步 骤 5 和 6 之 间 发 生 了 中 断, 写 操 作 将 失 败 因 为 此 时 EEPROM 写 使 能 操 作 将 超 时 如 果 一 个 操 作 EEPROM 的 中 断 打 断 了 另 一 个 EEPROM 操 作,EEAR 或 EEDR 寄 存 器 可 能 被 修 改, 引 起 EEPROM 操 作 失 败 建 议 此 时 关 闭 全 局 中 断 标 志 I 经 过 写 访 问 时 间 之 后,EEWE 硬 件 清 零 用 户 可 以 凭 借 这 一 位 判 断 写 时 序 是 否 已 经 完 成 EEWE 置 位 后, CPU 要 停 止 两 个 时 钟 周 期 才 会 运 行 下 一 条 指 令 Bit EERE: EEPROM 读 使 能 EERE 为 EEPROM 读 操 作 的 使 能 信 号 当 EEPROM 地 址 设 置 好 之 后, 需 置 位 EERE 以 便 将 数 据 读 入 EEAR EEPROM 数 据 的 读 取 只 需 要 一 条 指 令, 且 无 需 等 待 读 取 EEPROM 后 CPU 要 停 止 4 个 时 钟 周 期 才 可 以 执 行 下 一 条 指 令 用 户 在 读 取 EEPROM 时 应 该 检 测 EEWE 如 果 一 个 写 操 作 正 在 进 行, 就 无 法 读 取 EEPROM, 也 无 法 改 变 寄 存 器 EEAR 经 过 校 准 的 片 内 振 荡 器 用 于 EEPROM 定 时 Table 为 CPU 访 问 EEPROM 的 典 型 时 间 Table. EEPROM 编 程 时 间 符 号 () 校 准 的 RC 振 荡 器 周 期 数 典 型 的 编 程 时 间 EEPROM 写 操 作 (CPU) 8448 8.5 ms Note:. 使 用 时 钟 频 率 为 MHz, 不 倚 赖 CKSEL 熔 丝 位 的 设 置 8 ATmega8(L)
ATmega8(L) 下 面 的 代 码 分 别 用 汇 编 和 C 函 数 说 明 如 何 实 现 EEPROM 的 写 操 作 在 此 假 设 中 断 不 会 在 执 行 这 些 函 数 的 过 程 当 中 发 生 同 时 还 假 设 软 件 没 有 Boot Loader 若 Boot Loader 存 在, 则 EEPROM 写 函 数 还 需 要 等 待 正 在 运 行 的 SPM 命 令 的 结 束 汇 编 代 码 例 程 EEPROM_write: ; 等 待 上 一 次 写 操 作 结 束 sbic EECR,EEWE rjmp EEPROM_write ; 设 置 地 址 寄 存 器 (r8:r7) out EEARH, r8 out EEARL, r7 ; 将 数 据 写 入 数 据 寄 存 器 (r6) out EEDR,r6 ; 置 位 EEMWE sbi EECR,EEMWE ; 置 位 EEWE 以 启 动 写 操 作 sbi EECR,EEWE ret C 代 码 例 程 void EEPROM_write(unsigned int uiaddress, unsigned char ucdata) { /* 等 待 上 一 次 写 操 作 结 束 */ while(eecr & (<<EEWE)) ; /* 设 置 地 址 和 数 据 寄 存 器 */ EEAR = uiaddress; EEDR = ucdata; /* 置 位 EEMWE */ EECR = (<<EEMWE); /* 置 位 EEWE 以 启 动 写 操 作 */ EECR = (<<EEWE); } 9
下 面 的 例 子 说 明 如 何 用 汇 编 和 C 函 数 来 读 取 EEPROM, 在 此 假 设 中 断 不 会 在 执 行 这 些 函 数 的 过 程 当 中 发 生 汇 编 代 码 例 程 EEPROM_read: ; 等 待 上 一 次 写 操 作 结 束 sbic EECR,EEWE rjmp EEPROM_read ; 设 置 地 址 寄 存 器 (r8:r7) out EEARH, r8 out EEARL, r7 ; 设 置 EERE 以 启 动 读 操 作 sbi EECR,EERE ; 自 数 据 寄 存 器 读 取 数 据 in r6,eedr ret C 代 码 例 程 unsigned char EEPROM_read(unsigned int uiaddress) { /* 等 待 上 一 次 写 操 作 结 束 */ while(eecr & (<<EEWE)) ; /* 设 置 地 址 寄 存 器 */ EEAR = uiaddress; /* 设 置 EERE 以 启 动 读 操 作 */ EECR = (<<EERE); /* 自 数 据 寄 存 器 返 回 数 据 */ return EEDR; } 在 掉 电 休 眠 模 式 下 的 EEPROM 写 操 作 防 止 EEPROM 数 据 丢 失 若 程 序 执 行 掉 电 指 令 时 EEPROM 的 写 操 作 正 在 进 行, EEPROM 的 写 操 作 将 继 续, 并 在 指 定 的 写 访 问 时 间 之 前 完 成 但 写 操 作 结 束 后, 振 荡 器 还 将 继 续 运 行, 芯 片 并 非 处 于 完 全 的 掉 电 模 式 因 此 在 执 行 掉 电 指 令 之 前 应 结 束 EEPROM 的 写 操 作 若 电 源 电 压 过 低,CPU 和 EEPROM 有 可 能 工 作 不 正 常, 造 成 EEPROM 数 据 的 毁 坏 ( 丢 失 ) 这 种 情 况 在 使 用 独 立 的 EEPROM 器 件 时 也 会 遇 到 因 而 需 要 使 用 相 同 的 保 护 方 案 由 于 电 压 过 低 造 成 EEPROM 数 据 损 坏 有 两 种 可 能 : 一 是 电 压 低 于 EEPROM 写 操 作 所 需 要 的 最 低 电 压 ; 二 是 CPU 本 身 已 经 无 法 正 常 工 作 EEPROM 数 据 损 坏 的 问 题 可 以 通 过 以 下 方 法 解 决 : 当 电 压 过 低 时 保 持 AVR RESET 信 号 为 低 这 可 以 通 过 使 能 芯 片 的 掉 电 检 测 电 路 BOD 来 实 现 如 果 BOD 电 平 无 法 满 足 要 求 则 可 以 使 用 外 部 复 位 电 路 若 写 操 作 过 程 当 中 发 生 了 复 位, 只 要 电 压 足 够 高, 写 操 作 仍 将 正 常 结 束 I/O 存 储 器 ATmega8 的 I/O 空 间 定 义 见 P 27 2 ATmega8(L) ATmega8 所 有 的 I/O 及 外 设 都 被 放 置 于 I/O 空 间 所 有 的 I/O 位 置 都 可 以 通 过 IN 与 OUT 指 令 来 访 问, 在 32 个 通 用 工 作 寄 存 器 和 I/O 之 间 传 输 数 据 地 址 为 x - xf 的 I/O 寄 存 器 还 可 用 SBI 和 CBI 指 令 直 接 进 行 位 寻 址, 而 SBIS 和 SBIC 则 用 来 检 查 某 一 位 的 值 更 多 内 容 请 参 见 指 令 集 使 用 IN 和 OUT 指 令 时 地 址 必 须 在 x - x3f 之 间 如 果 要 象 SRAM 一 样 通 过 LD 和 ST 指 令 访 问 I/O 寄 存 器, 相 应 的 地 址 要 加 上 x2
ATmega8(L) 为 了 与 后 续 产 品 兼 容, 保 留 未 用 的 未 应 写 "", 而 保 留 的 I/O 寄 存 器 则 不 应 进 行 写 操 作 一 些 状 态 标 志 位 的 清 除 是 通 过 写 "" 来 实 现 的 要 注 意 的 是, 与 其 他 大 多 数 AVR 不 同, CBI 和 SBI 指 令 只 能 对 某 些 特 定 的 位 进 行 操 作, 因 而 可 以 用 于 包 含 这 些 状 态 标 志 的 寄 存 器 CBI 与 SBI 指 令 只 对 x 到 xf 的 寄 存 器 有 效 I/O 和 外 设 控 制 寄 存 器 在 后 续 其 他 章 节 进 行 介 绍 2
系 统 时 钟 及 时 钟 选 项 时 钟 系 统 及 其 分 布 Figure 为 AVR 的 主 要 时 钟 系 统 及 其 分 布 这 些 时 钟 并 不 需 要 同 时 工 作 为 了 降 低 功 耗, 可 以 通 过 使 用 不 同 的 睡 眠 模 式 来 禁 止 无 需 工 作 的 模 块 的 时 钟, 详 见 P 3 电 源 管 理 及 睡 眠 模 式 时 钟 系 统 详 见 Figure Figure. 时 钟 分 布 Asynchronous Timer/Counter General I/O Modules ADC CPU Core RAM Flash and EEPROM clk ADC clk I/O AVR Clock Control Unit clk CPU clk ASY clk FLASH Reset Logic Watchdog Timer Source Clock Watchdog Clock Clock Multiplexer Watchdog Oscillator Timer/Counter Oscillator External RC Oscillator External Clock Crystal Oscillator Low-Frequency Crystal Oscillator Calibrated RC Oscillator CPU 时 钟 - clk CPU I/O 时 钟 - clk I/O CPU 时 钟 与 操 作 AVR 内 核 的 子 系 统 相 连, 如 通 用 寄 存 器 文 件 状 态 寄 存 器 及 保 存 堆 栈 指 针 的 数 据 存 储 器 终 止 CPU 时 钟 将 使 内 核 停 止 工 作 和 计 算 I/O 时 钟 用 于 主 要 的 I/O 模 块, 如 定 时 器 / 计 数 器 SPI 和 USART I/O 时 钟 还 用 于 外 部 中 断 模 块 要 注 意 的 是 有 些 外 部 中 断 由 异 步 逻 辑 检 测, 因 此 即 使 I/O 时 钟 停 止 了 这 些 中 断 仍 然 可 以 得 到 监 控 此 外, USI 模 块 的 起 始 条 件 检 测 在 没 有 clk I/O 的 情 况 下 也 是 异 步 实 现 的, 使 得 这 个 功 能 在 任 何 睡 眠 模 式 下 都 可 以 正 常 工 作 Flash 时 钟 - clk FLASH Flash 时 钟 控 制 Flash 接 口 的 操 作 此 时 钟 通 常 与 CPU 时 钟 同 时 挂 起 或 激 活 22 ATmega8(L)
ATmega8(L) 异 步 定 时 器 时 钟 - clk ASY ADC 时 钟 - clk ADC 时 钟 源 异 步 定 时 器 时 钟 允 许 异 步 定 时 器 / 计 数 器 直 接 由 外 部 32 khz 时 钟 晶 体 驱 动 使 得 此 定 时 器 / 计 数 器 即 使 在 睡 眠 模 式 下 仍 然 可 以 为 系 统 提 供 一 个 实 时 时 钟 异 步 定 时 器 / 计 数 器 与 CPU 主 时 钟 使 用 相 同 的 XTAL 引 脚, 但 其 需 要 的 时 钟 频 率 是 振 荡 器 频 率 的 四 倍 因 此, 只 有 当 芯 片 使 用 内 部 振 荡 器 时 异 步 操 作 才 有 效 ADC 具 有 专 门 的 时 钟 这 样 可 以 在 ADC 工 作 的 时 候 停 止 CPU 和 I/O 时 钟 以 降 低 数 字 电 路 产 生 的 噪 声, 从 而 提 高 ADC 转 换 精 度 ATmega8 芯 片 有 如 下 几 种 通 过 Flash 熔 丝 位 进 行 选 择 的 时 钟 源 时 钟 输 入 到 AVR 时 钟 发 生 器, 再 分 配 到 相 应 的 模 块 Table 2. 时 钟 源 选 择 () 芯 片 时 钟 选 项 CKSEL3.. 外 部 晶 体 / 陶 瓷 振 荡 器 - 外 部 低 频 晶 振 外 部 RC 振 荡 器 - 标 定 的 内 部 RC 振 荡 器 - 外 部 时 钟 Note:. 对 于 所 有 的 熔 丝 位, 表 示 未 编 程, 表 示 已 编 程 不 同 的 时 钟 选 项 将 在 后 续 部 分 进 行 介 绍 当 CPU 自 掉 电 模 式 或 省 电 模 式 唤 醒 之 后, 被 选 择 的 时 钟 源 用 来 为 启 动 过 程 定 时, 保 证 振 荡 器 在 开 始 执 行 指 令 之 前 进 入 稳 定 状 态 当 CPU 从 复 位 开 始 工 作 时, 还 有 额 外 的 延 迟 时 间 以 保 证 在 MCU 开 始 正 常 工 作 之 前 电 源 达 到 稳 定 电 平 这 个 启 动 时 间 的 定 时 由 看 门 狗 振 荡 器 完 成 看 门 狗 溢 出 时 间 所 对 应 的 WDT 振 荡 器 周 期 数 列 于 Table 3 看 门 狗 振 荡 器 的 频 率 由 工 作 电 压 决 定, 详 见 ATmega8 典 型 特 性 芯 片 出 厂 时 CKSEL =, SUT = ( MHz 片 内 RC 振 荡 器, 电 源 缓 慢 上 升 ) Table 3. 看 门 狗 振 荡 器 周 期 数 典 型 的 溢 出 时 间 (V CC = 5.V) 典 型 的 溢 出 时 间 (V CC = 3.V) 时 钟 周 期 数 4. ms 4.3 ms 4K (4,96) 65 ms 69 ms 64K (65,536) 23
晶 体 振 荡 器 XTAL 与 XTAL2 分 别 为 用 作 片 内 振 荡 器 的 反 向 放 大 器 的 输 入 和 输 出, 如 Figure 所 示, 这 个 振 荡 器 可 以 使 用 石 英 晶 体, 也 可 以 使 用 陶 瓷 谐 振 器 熔 丝 位 CKOPT 用 来 选 择 这 两 种 放 大 器 模 式 的 其 中 之 一 当 CKOPT 被 编 程 时 振 荡 器 在 输 出 引 脚 产 生 满 幅 度 的 振 荡 这 种 模 式 适 合 于 噪 声 环 境, 以 及 需 要 通 过 XTAL2 驱 动 第 二 个 时 钟 缓 冲 器 的 情 况 而 且 这 种 模 式 的 频 率 范 围 比 较 宽 当 保 持 CKOPT 为 未 编 程 状 态 时, 振 荡 器 的 输 出 信 号 幅 度 比 较 小 其 优 点 是 大 大 降 低 了 功 耗, 但 是 频 率 范 围 比 较 窄, 而 且 不 能 驱 动 其 他 时 钟 缓 冲 器 对 于 谐 振 器, CKOPT 未 编 程 时 的 最 大 频 率 为 8 MHz, CKOPT 编 程 时 为 6 MHz C 和 C2 的 数 值 要 一 样, 不 管 使 用 的 是 晶 体 还 是 谐 振 器 最 佳 的 数 值 与 使 用 的 晶 体 或 谐 振 器 有 关, 还 与 杂 散 电 容 和 环 境 的 电 磁 噪 声 有 关 Table 4 给 出 了 针 对 晶 体 选 择 电 容 的 一 些 指 南 对 于 陶 瓷 谐 振 器, 应 该 使 用 厂 商 提 供 的 数 值 若 想 得 到 更 多 的 有 关 如 何 选 择 电 容 以 及 振 荡 器 如 何 工 作 的 信 息, 请 参 考 多 用 途 振 荡 器 应 用 手 册 Figure. 晶 体 振 荡 器 连 接 图 C2 C XTAL2 XTAL GND 振 荡 器 可 以 工 作 于 三 种 不 同 的 模 式, 每 一 种 都 有 一 个 优 化 的 频 率 范 围 工 作 模 式 通 过 熔 丝 位 CKSEL3.. 来 选 择, 如 Table 4 所 示 Table 4. 晶 体 振 荡 器 工 作 模 式 CKOPT CKSEL3.. 频 率 范 围 (MHz) Note:. 此 选 项 不 适 用 于 晶 体, 只 能 用 于 陶 瓷 谐 振 器 使 用 晶 体 时 电 容 C 和 C2 的 推 荐 范 围 (pf) ().4 -.9.9-3. 2-22 3. - 8. 2-22,,. 2-22 如 Table 5 所 示, 熔 丝 位 CKSEL 以 及 SUT.. 用 于 选 择 启 动 时 间 24 ATmega8(L)
ATmega8(L) Table 5. 晶 体 振 荡 器 时 钟 选 项 对 应 的 启 动 时 间 CKSEL SUT.. 掉 电 与 节 电 模 式 下 的 启 动 时 间 复 位 时 额 外 的 延 迟 时 间 (V CC = 5.V) 258 CK () 4. ms 258 CK () 65 ms 推 荐 用 法 Notes:. 这 些 选 项 只 能 用 于 工 作 频 率 不 太 接 近 于 最 大 频 率, 而 且 启 动 时 的 频 率 稳 定 性 对 于 应 用 而 言 不 重 要 的 情 况 不 适 用 于 晶 体 2. 这 些 选 项 是 为 陶 瓷 谐 振 器 设 计 的, 可 以 保 证 启 动 时 频 率 足 够 稳 定 若 工 作 频 率 不 太 接 近 于 最 大 频 率, 而 且 启 动 时 的 频 率 稳 定 性 对 于 应 用 而 言 不 重 要 时 也 适 用 于 晶 体 低 频 晶 体 振 荡 器 为 了 使 用 32.768 khz 钟 表 晶 体 作 为 器 件 的 时 钟 源, 必 须 将 熔 丝 位 CKSEL 设 置 为 以 选 择 低 频 晶 体 振 荡 器 晶 体 的 连 接 方 式 如 Figure 所 示 通 过 对 熔 丝 位 CKOPT 的 编 程, 用 户 可 以 使 能 XTAL 和 XTAL2 的 内 部 电 容, 从 而 去 除 外 部 电 容 内 部 电 容 的 标 称 数 值 为 36 pf 选 择 了 这 个 振 荡 器 之 后, 启 动 时 间 由 熔 丝 位 SUT 确 定, 如 Table 6 所 示 Table 6. 低 频 晶 体 振 荡 器 的 启 动 时 间 Note:. 这 些 选 项 只 能 用 于 启 动 时 的 频 率 稳 定 性 对 应 用 而 言 不 重 要 的 情 况 陶 瓷 谐 振 器, 电 源 快 速 上 升 陶 瓷 谐 振 器, 电 源 缓 慢 上 升 K CK (2) 陶 瓷 谐 振 器, BOD 使 能 K CK (2) 4. ms K CK (2) 65 ms 陶 瓷 谐 振 器, 电 源 快 速 上 升 陶 瓷 谐 振 器, 电 源 缓 慢 上 升 6K CK 石 英 振 荡 器,BOD 使 能 6K CK 4. ms 6K CK 65 ms SUT.. 掉 电 模 式 和 省 电 模 式 的 启 动 时 间 复 位 时 的 额 外 延 迟 时 间 (V CC = 5.V) 推 荐 用 法 石 英 振 荡 器, 电 源 快 速 上 升 石 英 振 荡 器, 电 源 慢 速 上 升 K CK () 4. ms 电 源 快 速 上 升, 或 是 BOD 使 能 K CK () 65 ms 电 源 缓 慢 上 升 32K CK 65 ms 启 动 时 频 率 已 经 稳 定 保 留 外 部 RC 振 荡 器 对 于 时 间 不 敏 感 的 应 用 可 以 使 用 Figure 2 对 于 时 间 不 敏 感 的 应 用 可 以 使 用 Figure 2 的 外 部 RC 振 荡 器 频 率 可 以 通 过 方 程 f = /(3RC) 进 行 粗 略 地 鼓 估 计 电 容 C 至 少 要 22 pf 通 过 编 程 熔 丝 位 CKOPT, 用 户 可 以 使 能 XTAL 和 GND 之 间 的 片 内 36 pf 电 容, 从 而 无 需 外 部 电 容 25
Figure 2. 外 部 RC 配 置 VCC R C NC XTAL2 XTAL GND 振 荡 器 可 以 工 作 于 四 个 不 同 的 模 式, 每 个 模 式 有 自 己 的 优 化 频 率 范 围 工 作 模 式 通 过 熔 丝 位 CKSEL3.. 选 取, 如 Table 7 所 示 Table 7. 外 部 RC 振 荡 器 工 作 模 式 CKSEL3.. 频 率 范 围 (MHz).9.9-3. 3. - 8. 8. - 2. 选 择 了 这 个 振 荡 器 之 后, 启 动 时 间 由 熔 丝 位 SUT 确 定, 如 Table 8 所 示 Table 8. 外 部 RC 振 荡 器 的 启 动 时 间 SUT.. 掉 电 模 式 和 省 电 模 式 的 启 动 时 间 复 位 时 的 额 外 延 迟 时 间 (V CC = 5.V) 推 荐 用 法 8 CK BOD 使 能 8 CK 4. ms 电 源 快 速 上 升 8 CK 65 ms 电 源 缓 慢 上 升 6 CK () 4. ms 电 源 快 速 上 升, 或 是 BOD 使 能 Note:. 这 些 选 项 只 能 用 于 工 作 频 率 不 太 接 近 于 最 大 频 率 时 的 情 况 26 ATmega8(L)
ATmega8(L) 标 定 的 片 内 RC 振 荡 器 标 定 的 片 内 RC 振 荡 器 提 供 了 固 定 的. 2. 4. 或 8. MHz 的 时 钟 这 些 频 率 都 是 5V 25 C 下 的 标 称 数 值 这 个 时 钟 也 可 以 作 为 系 统 时 钟, 只 要 按 照 Table 9 对 熔 丝 位 CKSEL 进 行 编 程 即 可 选 择 这 个 时 钟 ( 此 时 不 能 对 CKOPT 进 行 编 程 ) 之 后 就 无 需 外 部 器 件 了 复 位 时 硬 件 将 标 定 字 节 加 载 到 OSCCAL 寄 存 器, 自 动 完 成 对 RC 振 荡 器 的 标 定 在 5V, 25 C 和 频 率 为. MHz 时, 这 种 标 定 可 以 提 供 标 称 频 率 ± 3% 的 精 度 ; 使 用 www.atmel.com/avr 中 所 给 出 的 方 法, 可 在 任 何 电 压 任 何 温 度 下, 使 精 度 达 到 ± % 当 使 用 这 个 振 荡 器 作 为 系 统 时 钟 时, 看 门 狗 仍 然 使 用 自 己 的 看 门 狗 定 时 器 作 为 溢 出 复 位 的 依 据 更 多 的 有 关 标 定 数 据 的 信 息 请 参 见 P 2 标 定 字 节 Table 9. 片 内 标 定 的 RC 振 荡 器 工 作 模 式 CKSEL3.. Note:. 出 厂 时 的 设 置 选 择 了 这 个 振 荡 器 之 后, 启 动 时 间 由 熔 丝 位 SUT 确 定, 如 Table 所 示 PB6 (XTAL/TOSC) 与 PB7(XTAL2/TOSC2) 即 可 作 为 通 用 I/O 引 脚, 又 可 作 为 定 时 振 荡 器 引 脚 Note:. 出 厂 时 的 设 置 标 称 频 率 (MHz) (). 2. 4. 8. Table. 内 部 标 定 RC 振 荡 器 的 启 动 时 间 SUT.. 掉 电 模 式 与 省 电 模 式 的 启 动 时 间 复 位 时 的 额 外 延 迟 时 间 (V CC = 5.V) 推 荐 用 法 6 CK BOD 使 能 6 CK 4. ms 电 源 快 速 上 升 () 6 CK 65 ms 电 源 缓 慢 上 升 保 留 27
振 荡 器 标 定 寄 存 器 - OSCCAL Bit 7 6 5 4 3 2 CAL7 CAL6 CAL5 CAL4 CAL3 CAL2 CAL CAL OSCCAL 读 / 写 R/W R/W R/W R/W R/W R/W R/W R/W 初 始 值 标 定 数 据 Bits 7.. CAL7..: 振 荡 器 标 定 数 据 将 标 定 数 据 写 入 这 个 地 址 可 以 对 内 部 振 荡 器 进 行 调 节 以 消 除 由 于 生 产 工 艺 所 带 来 的 振 荡 器 频 率 偏 差 复 位 时 MHz 的 标 定 数 据 ( 标 识 数 据 的 高 字 节, 地 址 为 x) 自 动 加 载 到 OSCCAL 寄 存 器 如 果 需 要 内 部 RC 振 荡 器 工 作 于 其 他 频 率, 标 定 数 据 必 须 人 工 加 载 : 首 先 通 过 编 程 器 读 取 标 识 数 据, 然 后 将 标 定 数 据 保 存 到 Flash 或 EEPROM 之 中 这 些 数 据 可 以 通 过 软 件 读 取, 然 后 加 载 到 OSCCAL 寄 存 器 当 OSCCAL 为 零 时 振 荡 器 以 最 低 频 率 工 作 当 对 其 写 如 不 为 零 的 数 据 时 内 部 振 荡 器 的 频 率 将 增 长 写 入 xff 即 得 到 最 高 频 率 标 定 的 振 荡 器 用 来 为 访 问 EEPROM 和 Flash 定 时 有 写 EEPROM 和 Flash 的 操 作 时 不 要 将 频 率 标 定 到 超 过 标 称 频 率 的 %, 否 则 写 操 作 有 可 能 失 败 要 注 意 振 荡 器 只 对. 2. 4. 和 8. MHz 这 四 种 频 率 进 行 了 标 定, 其 他 频 率 则 无 法 保 证, 如 Table 所 示 Table. 内 部 RC 振 荡 器 频 率 范 围 OSCCAL 数 值 最 小 频 率, 标 称 频 率 的 百 分 比 (%) 最 大 频 率, 标 称 频 率 的 百 分 比 (%) x 5 x7f 75 5 xff 2 28 ATmega8(L)
ATmega8(L) 外 部 时 钟 为 了 从 外 部 时 钟 源 驱 动 芯 片, XTAL 必 须 如 Figure 3 所 示 的 进 行 连 接 同 时, 熔 丝 位 CKSEL 必 须 编 程 为 若 熔 丝 位 CKOPT 也 被 编 程, 用 户 就 可 以 使 用 内 部 的 XTAL 和 GND 之 间 的 36 pf 电 容 Figure 3. 外 部 时 钟 驱 动 配 置 图 EXTERNAL CLOCK SIGNAL 选 择 了 这 个 振 荡 器 之 后, 启 动 时 间 由 熔 丝 位 SUT 确 定, 如 Table 2 所 示 Table 2. 外 部 时 钟 的 启 动 时 间 SUT.. 掉 电 模 式 与 省 电 模 式 的 启 动 时 间 复 位 时 的 额 外 延 迟 时 间 (V CC = 5.V) 推 荐 用 法 6 CK BOD 使 能 6 CK 4. ms 电 源 快 速 上 升 6 CK 65 ms 电 源 缓 慢 上 升 保 留 为 了 保 证 MCU 能 够 稳 定 工 作, 不 能 突 然 改 变 外 部 时 钟 源 的 振 荡 频 率 工 作 频 率 突 变 超 过 2% 将 会 产 生 异 常 现 象 应 该 在 MCU 保 持 复 位 状 态 时 改 变 外 部 时 钟 的 振 荡 频 率 定 时 器 / 计 时 器 振 荡 器 对 于 拥 有 定 时 器 / 振 荡 器 引 脚 (TOSC 和 TOSC2) 的 AVR 微 处 理 器, 晶 体 可 以 直 接 与 这 两 个 引 脚 连 接, 无 需 外 部 电 容 此 振 荡 器 针 对 32.768 khz 的 钟 表 晶 体 作 了 优 化 不 建 议 在 TOSC 引 脚 输 入 振 荡 信 号 29
电 源 管 理 及 睡 眠 模 式 睡 眠 模 式 可 以 使 应 用 程 序 关 闭 MCU 中 没 有 使 用 的 模 块, 从 而 降 低 功 耗 AVR 具 有 不 同 的 睡 眠 模 式, 允 许 用 户 根 据 自 己 的 应 用 要 求 实 施 剪 裁 进 入 睡 眠 模 式 的 条 件 是 置 位 寄 存 器 MCUCR 的 SE, 然 后 执 行 SLEEP 指 令 具 体 哪 一 种 模 式 ( 空 闲 模 式 ADC 噪 声 抑 制 模 式 掉 电 模 式 省 电 模 式 及 Standby 模 式 ) 由 MCUCR 的 SM2 SM 和 SM 决 定, 如 Table 3 所 示 使 能 的 中 断 可 以 将 进 入 睡 眠 模 式 的 MCU 唤 醒 经 过 启 动 时 间, 外 加 4 个 时 钟 周 期 后, MCU 就 可 以 运 行 中 断 例 程 了 然 后 返 回 到 SLEEP 的 下 一 条 指 令 唤 醒 时 不 会 改 变 寄 存 器 文 件 和 SRAM 的 内 容 如 果 在 睡 眠 过 程 中 发 生 了 复 位, 则 MCU 唤 醒 后 从 中 断 向 量 开 始 执 行 注 意, 由 于 TOSC 与 XTAL 共 用 同 一 引 脚, 对 于 许 多 AVR MCU 中 有 的 扩 展 Standby 模 式 在 ATmega8 中 已 删 除 P 22Figure 介 绍 了 ATmega8 不 同 的 时 钟 系 统 及 其 分 布 此 图 在 选 择 合 适 的 睡 眠 模 式 时 非 常 有 用 MCU 控 制 寄 存 器 - MCUCR MCU 控 制 寄 存 器 包 含 了 电 源 管 理 的 控 制 位 Bit 7 6 5 4 3 2 SE SM2 SM SM ISC ISC ISC ISC MCUCR 读 / 写 R/W R/W R/W R/W R/W R/W R/W R/W 初 始 值 Bit 7 SE: 休 眠 使 能 为 了 使 MCU 在 执 行 SLEEP 指 令 后 进 入 休 眠 模 式, SE 必 须 置 位 为 了 确 保 进 入 休 眠 模 式 是 程 序 员 的 有 意 行 为, 建 议 仅 在 SLEEP 指 令 的 前 一 条 指 令 置 位 SE MCU 一 旦 唤 醒 立 即 清 除 SE Bits 6..4 SM2..: 休 眠 模 式 选 择 位 2 和 如 Table 3 所 示, 这 些 位 用 于 选 择 具 体 的 休 眠 模 式 Table 3. 休 眠 模 式 选 择 SM2 SM SM 休 眠 模 式 空 闲 模 式 ADC 噪 声 抑 制 模 式 掉 电 模 式 省 电 模 式 保 留 保 留 Standby () 模 式 Note:. 仅 在 使 用 外 部 晶 体 或 谐 振 器 时 Standby 模 式 才 可 用 3 ATmega8(L)
ATmega8(L) 空 闲 模 式 ADC 噪 声 抑 制 模 式 掉 电 模 式 省 电 模 式 Standby 模 式 当 SM2.. 为 时, SLEEP 指 令 将 使 MCU 进 入 空 闲 模 式 在 此 模 式 下, CPU 停 止 运 行, 而 SPI USART 模 拟 比 较 器 ADC 两 线 串 行 接 口 定 时 器 / 计 数 器 看 门 狗 和 中 断 系 统 继 续 工 作 这 个 睡 眠 模 式 只 停 止 了 clk CPU 和 clk FLASH, 其 他 时 钟 则 继 续 工 作 象 定 时 器 溢 出 与 USART 传 输 完 成 等 内 外 部 中 断 都 可 以 唤 醒 MCU 如 果 不 需 要 从 模 拟 比 较 器 中 断 唤 醒 MCU, 为 了 减 少 功 耗, 可 以 切 断 比 较 器 的 电 源 方 法 是 置 位 模 拟 比 较 器 控 制 和 状 态 寄 存 器 ACSR 的 ACD 如 果 ADC 使 能, 进 入 此 模 式 后 将 自 动 启 动 一 次 转 换 当 SM2.. 为 时, SLEEP 指 令 将 使 MCU 进 入 噪 声 抑 制 模 式 在 此 模 式 下, CPU 停 止 运 行, 而 ADC 外 部 中 断 两 线 接 口 地 址 配 置 定 时 器 / 计 数 器 2 和 看 门 狗 继 续 工 作 这 个 睡 眠 模 式 只 停 止 了 clk I/O clk CPU 和 clk FLASH, 其 他 时 钟 则 继 续 工 作 此 模 式 提 高 了 ADC 的 噪 声 环 境, 使 得 转 换 精 度 更 高 ADC 使 能 的 时 候, 进 入 此 模 式 将 自 动 启 动 一 次 AD 转 换 ADC 转 换 结 束 中 断 外 部 复 位 看 门 狗 复 位 BOD 复 位 两 线 接 口 地 址 匹 配 中 断 定 时 器 / 计 数 器 2 中 断 SPM/EEPROM 准 备 好 中 断 外 部 电 平 中 断 INT 或 INT, 或 外 部 中 断 INT2 可 以 将 MCU 从 ADC 噪 声 抑 制 模 式 唤 醒 当 SM2.. 为 时, SLEEP 指 令 将 使 MCU 进 入 掉 电 模 式 在 此 模 式 下, 外 部 晶 体 停 振, 而 外 部 中 断 两 线 接 口 地 址 匹 配 及 看 门 狗 ( 如 果 使 能 的 话 ) 继 续 工 作 只 有 外 部 复 位 看 门 狗 复 位 BOD 复 位 两 线 接 口 地 址 匹 配 中 断 外 部 电 平 中 断 INT 或 INT, 或 外 部 中 断 INT2 可 以 使 MCU 脱 离 掉 电 模 式 这 个 睡 眠 模 式 停 止 了 所 有 的 时 钟, 只 有 异 步 模 块 可 以 继 续 工 作 当 使 用 外 部 电 平 中 断 方 式 将 MCU 从 掉 电 模 式 唤 醒 时, 必 须 保 持 外 部 电 平 一 定 的 时 间 具 体 请 参 见 P 62 外 部 中 断 从 施 加 掉 电 唤 醒 条 件 到 真 正 唤 醒 有 一 个 延 迟 时 间, 此 时 间 用 于 时 钟 重 新 启 动 并 稳 定 下 来 唤 醒 周 期 与 由 熔 丝 位 CKSEL 定 义 的 复 位 周 期 是 一 样 的, 如 P 23 时 钟 源 当 SM2.. 为 时, SLEEP 指 令 将 使 MCU 进 入 省 电 模 式 这 一 模 式 与 掉 电 模 式 只 有 一 点 不 同 : 如 果 定 时 器 / 计 数 器 2 为 异 步 驱 动, 即 寄 存 器 ASSR 的 AS2 置 位, 则 定 时 器 / 计 数 器 2 在 睡 眠 时 继 续 运 行 除 了 掉 电 模 式 的 唤 醒 方 式, 定 时 器 / 计 数 器 2 的 溢 出 中 断 和 比 较 匹 配 中 断 也 可 以 将 MCU 从 休 眠 方 式 唤 醒, 只 要 TIMSK 使 能 了 这 些 中 断, 而 且 SREG 的 全 局 中 断 使 能 位 I 置 位 如 果 异 步 定 时 器 不 是 异 步 驱 动 的, 建 议 使 用 掉 电 模 式, 而 不 是 省 电 模 式 因 为 在 省 电 模 式 下, 若 AS2 为, 则 MCU 唤 醒 后 异 步 定 时 器 的 寄 存 器 数 值 是 没 有 定 义 的 这 个 睡 眠 模 式 停 止 了 除 clk ASY 以 外 所 有 的 时 钟, 只 有 异 步 模 块 可 以 继 续 工 作 当 SM2.. 为 时, SLEEP 指 令 将 使 MCU 进 入 Standby 模 式 这 一 模 式 与 掉 电 模 式 唯 一 的 不 同 之 处 在 于 振 荡 器 继 续 工 作 其 唤 醒 时 间 只 需 要 6 个 时 钟 周 期 Table 4. 在 不 同 睡 眠 模 式 下 活 动 的 时 钟 以 及 唤 醒 源 工 作 的 时 钟 振 荡 器 唤 醒 源 睡 眠 模 式 clk CPU clk FLASH clk IO clk ADC clk ASY 使 能 的 主 时 钟 使 能 的 定 时 器 时 钟 INT INT TWI 地 址 匹 配 定 时 器 2 SPM/ EEPROM 就 绪 空 闲 模 式 X X X X X (2) X X X X X X ADC 噪 声 抑 制 模 式 X X X X (2) X (3) X X X X ADC 其 他 I/O 3
Table 4. 在 不 同 睡 眠 模 式 下 活 动 的 时 钟 以 及 唤 醒 源 工 作 的 时 钟 振 荡 器 唤 醒 源 睡 眠 模 式 clk CPU clk FLASH clk IO clk ADC clk ASY 使 能 的 主 时 钟 使 能 的 定 时 器 时 钟 INT INT TWI 地 址 匹 配 定 时 器 2 SPM/ EEPROM 就 绪 ADC 其 他 I/O 掉 电 模 式 X (3) X 省 电 模 式 X (2) X (2) X (3) X X (2) Standby 模 () X X (3) X 式 Notes:. 时 钟 源 为 外 部 晶 体 或 谐 振 器 2. ASSR 的 AS2 置 位 3. 电 平 中 断 INT 与 INT 最 小 化 功 耗 试 图 降 低 AVR 控 制 系 统 的 功 耗 时 需 要 考 虑 几 个 问 题 一 般 来 说, 要 尽 可 能 利 用 睡 眠 模 式, 并 且 使 尽 可 能 少 的 模 块 继 续 工 作 不 需 要 的 功 能 必 须 禁 止 下 面 的 模 块 需 要 特 殊 考 虑 以 达 到 尽 可 能 低 的 功 耗 模 数 转 换 器 (ADC) 模 拟 比 较 器 使 能 时, ADC 在 睡 眠 模 式 下 继 续 工 作 为 了 降 低 功 耗, 在 进 入 睡 眠 模 式 之 前 需 要 禁 止 ADC 重 新 启 动 后 的 第 一 次 转 换 为 扩 展 的 转 换 具 体 请 参 照 P 83 模 数 转 换 器 在 空 闲 模 式 时, 如 果 没 有 使 用 模 拟 比 较 器, 可 以 将 其 关 闭 在 ADC 噪 声 抑 制 模 式 下 也 是 如 此 在 其 他 睡 眠 模 式 模 拟 比 较 器 是 自 动 关 闭 的 如 果 模 拟 比 较 器 使 用 了 内 部 电 压 基 准 源, 则 不 论 在 什 么 睡 眠 模 式 下 都 需 要 关 闭 它 否 则 内 部 电 压 基 准 源 将 一 直 使 能 请 参 见 P 8 模 拟 比 较 器 以 了 解 如 何 配 置 模 拟 比 较 器 32 ATmega8(L)
ATmega8(L) 掉 电 检 测 BOD 如 果 系 统 没 有 使 用 掉 电 检 测 器 BOD, 这 个 模 块 也 可 以 关 闭 如 果 熔 丝 位 BODEN 被 编 程, 从 而 使 能 了 BOD 功 能, 它 将 在 各 种 休 眠 模 式 下 继 续 工 作 在 深 层 次 的 休 眠 模 式 下, 这 个 电 流 将 占 总 电 流 的 很 大 比 重 请 参 看 P 37 掉 电 检 测 以 了 解 如 何 配 置 BOD 片 内 基 准 电 压 看 门 狗 定 时 器 端 口 引 脚 使 用 BOD 模 拟 比 较 器 和 ADC 时 可 能 需 要 内 部 电 压 基 准 源 若 这 些 模 块 都 禁 止 了, 则 基 准 源 也 可 以 禁 止 重 新 使 能 后 用 户 必 须 等 待 基 准 源 稳 定 之 后 才 可 以 使 用 它 如 果 基 准 源 在 休 眠 过 程 中 是 使 能 的, 其 输 出 立 即 可 以 使 用 请 参 见 P 39 片 内 基 准 电 压 以 了 解 基 准 源 启 动 时 间 的 细 节 如 果 系 统 无 需 使 用 看 门 狗, 这 个 模 块 也 可 以 关 闭 若 使 能, 则 在 任 何 休 眠 模 式 下 都 持 续 工 作, 从 而 消 耗 电 流 在 深 层 次 的 睡 眠 模 式 下, 这 个 电 流 将 占 总 电 流 的 很 大 比 重 请 参 看 P 4 看 门 狗 定 时 器 以 了 解 如 何 配 置 看 门 狗 定 时 器 进 入 休 眠 模 式 时, 所 有 的 端 口 引 脚 都 应 该 配 置 为 只 消 耗 最 小 的 功 耗 最 重 要 的 是 避 免 驱 动 电 阻 性 负 载 在 休 眠 模 式 下 I/O 时 钟 clk I/O 和 ADC 时 钟 clk ADC 都 被 停 止 了, 输 入 缓 冲 器 也 禁 止 了, 从 而 保 证 输 入 电 路 不 会 消 耗 电 流 在 某 些 情 况 下 输 入 逻 辑 是 使 能 的, 用 来 检 测 唤 醒 条 件 用 于 此 功 能 的 具 体 引 脚 请 参 见 P 52 数 字 输 入 使 能 和 睡 眠 模 式 如 果 输 入 缓 冲 器 是 使 能 的, 此 时 输 入 不 能 悬 空, 信 号 电 平 也 不 应 该 接 近 V CC /2, 否 则 输 入 缓 冲 器 会 消 耗 额 外 的 电 流 33
系 统 控 制 与 复 位 复 位 AVR 复 位 时 所 有 的 I/O 寄 存 器 都 被 设 置 为 初 始 值, 程 序 从 复 位 向 量 处 开 始 执 行 复 位 向 量 处 的 指 令 必 须 是 绝 对 跳 转 JMP 指 令, 以 使 程 序 跳 转 到 复 位 处 理 例 程 如 果 程 序 永 远 不 利 用 中 断 功 能, 中 断 向 量 可 以 由 一 般 的 程 序 代 码 所 覆 盖 这 个 处 理 方 法 同 样 适 用 于 当 复 位 向 量 位 于 应 用 程 序 区, 中 断 向 量 位 于 Boot 区 或 者 反 过 来 的 时 候 Figure 4 为 复 位 逻 辑 的 电 路 图 Table 5 则 定 义 了 复 位 电 路 的 电 气 参 数 复 位 源 有 效 时 I/O 端 口 立 即 复 位 为 初 始 值 此 时 不 要 求 任 何 时 钟 处 于 正 常 运 行 状 态 所 有 的 复 位 信 号 消 失 之 后, 芯 片 内 部 的 一 个 延 迟 计 数 器 被 激 活, 将 内 部 复 位 的 时 间 延 长 这 种 处 理 方 式 使 得 在 MCU 正 常 工 作 之 前 有 一 定 的 时 间 让 电 源 达 到 稳 定 的 电 平 延 迟 计 数 器 的 溢 出 时 间 通 过 熔 丝 位 SUT 与 CKSEL 设 定 延 迟 时 间 的 选 择 请 参 见 P 23 时 钟 源 复 位 源 ATmega8 有 4 个 复 位 源 : 上 电 复 位 电 源 电 压 低 于 上 电 复 位 门 限 V POT 时, MCU 复 位 外 部 复 位 引 脚 RESET 上 的 低 电 平 持 续 时 间 大 于 最 小 脉 冲 宽 度 时 MCU 复 位 看 门 狗 复 位 看 门 狗 使 能 并 且 看 门 狗 定 时 器 溢 出 时 复 位 发 生 掉 电 检 测 复 位 掉 电 检 测 复 位 功 能 使 能, 且 电 源 电 压 低 于 掉 电 检 测 复 位 门 限 V BOT 时 MCU 即 复 位 Figure 4. 复 位 逻 辑 DATA BUS MCU Control and Status Register (MCUCSR) PORF BORF EXTRF WDRF BODEN BODLEVEL Pull-up Resistor Brown-Out Reset Circuit SPIKE FILTER Watchdog Oscillator Clock Generator CK Delay Counters TIMEOUT CKSEL[3:] SUT[:] 34 ATmega8(L)
ATmega8(L) Table 5. 复 位 特 性 符 号 参 数 条 件 V POT 上 电 复 位 门 限 电 压 ( 电 压 由 低 到 高 上 升 ) ().4 2.3 V 上 电 复 位 门 限 电 压 ( 电 压 由 高 到 低 跌 落 ).3 2.3 V V RST RESET 门 限 电 压..9 V CC t RST RESET 最 小 脉 冲 宽 度.5 µs V BOT (2) 掉 电 检 测 复 位 门 限 电 压 BODLEVEL = 2.4 2.6 2.9 BODLEVEL = 3.7 4. 4.5 V t BOD 触 发 掉 电 检 测 复 位 的 低 电 平 的 BODLEVEL = 2 µs 最 小 持 续 时 间 BODLEVEL = 2 µs V HYST 掉 电 检 测 器 的 容 限 3 mv Notes:. 电 压 下 降 时, 只 有 电 压 低 于 V POT 时 复 位 才 会 发 生 2. 一 些 器 件 的 V BOT 可 能 比 标 称 的 最 小 工 作 电 压 还 要 低 这 些 器 件 在 生 产 测 试 过 程 中 进 行 了 V CC = V BOT 的 测 试, 保 证 在 V CC 下 降 到 处 理 器 无 法 正 常 工 作 之 前 产 生 掉 电 检 测 复 位 ATmega8L 的 测 试 条 件 为 BODLEVEL=,ATmega8 的 测 试 条 件 为 BODLEVEL= BODLEVEL= 不 适 用 于 ATmega8 最 小 值 典 型 值 最 大 值 单 位 上 电 复 位 上 电 复 位 (POR) 脉 冲 由 片 内 检 测 电 路 产 生 检 测 电 平 请 参 见 Table 5 无 论 何 时 V CC 低 于 检 测 电 平 POR 即 发 生 POR 电 路 可 以 用 来 触 发 启 动 复 位, 或 者 用 来 检 测 电 源 故 障 POR 电 路 保 证 器 件 在 上 电 时 复 位 V CC 达 到 上 电 门 限 电 压 后 触 发 延 迟 计 数 器 在 计 数 器 溢 出 之 前 器 件 一 直 保 持 为 复 位 状 态 当 V CC 下 降 时, 只 要 低 于 检 测 门 限,RESET 信 号 立 即 生 效 Figure 5. MCU 启 动 过 程, RESET 连 接 到 V CC VCC V POT RESET V RST TIME-OUT t TOUT INTERNAL RESET 35
Figure 6. MCU 启 动 过 程, RESET 由 外 电 路 控 制 V CC V POT RESET V RST TIME-OUT t TOUT INTERNAL RESET 36 ATmega8(L)
ATmega8(L) 外 部 复 位 外 部 复 位 由 外 加 于 RESET 引 脚 的 低 电 平 产 生 当 复 位 低 电 平 持 续 时 间 大 于 最 小 脉 冲 宽 度 时 ( 参 见 Table 5) 即 触 发 复 位 过 程, 即 使 此 时 并 没 有 时 钟 信 号 在 运 行 当 外 加 信 号 达 到 复 位 门 限 电 压 V RST ( 上 升 沿 ) 时, t TOUT 延 时 周 期 开 始 延 时 结 束 后 MCU 即 启 动 Figure 7. 工 作 过 程 中 发 生 外 部 复 位 CC 掉 电 检 测 ATmega8 具 有 片 内 BOD(Brown-out Detection) 电 路, 通 过 与 固 定 的 触 发 电 平 的 对 比 来 检 测 工 作 过 程 中 V CC 的 变 化 此 触 发 电 平 通 过 熔 丝 位 BODLEVEL 来 设 定, 2.7V (BODLEVEL 未 编 程 ), 4.V (BODLEVEL 已 编 程 ) BOD 的 触 发 电 平 具 有 迟 滞 功 能 以 消 除 电 源 尖 峰 的 影 响 这 个 迟 滞 功 能 可 以 解 释 为 V BOT+ = V BOT + V HYST /2 以 及 V BOT- = V BOT - V HYST /2 BOD 电 路 的 开 关 由 熔 丝 位 BODEN 控 制 当 BOD 使 能 后 (BODEN 被 编 程 ), 一 旦 V CC 下 降 到 触 发 电 平 以 下 (V BOT-, Figure 8), BOD 复 位 立 即 被 激 发 当 V CC 上 升 到 触 发 电 平 以 上 时 (V BOT+,Figure 8), 延 时 计 数 器 开 始 计 数, 一 旦 超 过 溢 出 时 间 t TOUT,MCU 即 恢 复 工 作 如 果 V CC 一 直 低 于 触 发 电 平 并 保 持 如 Table 5 所 示 的 时 间 t BOD, BOD 电 路 将 只 检 测 电 压 跌 落 Figure 8. 工 作 过 程 中 发 生 掉 电 检 测 复 位 V CC V BOT- V BOT+ RESET TIME-OUT t TOUT INTERNAL RESET 37
看 门 狗 复 位 看 门 狗 定 时 器 溢 出 时 将 产 生 持 续 时 间 为 个 CK 周 期 的 复 位 脉 冲 在 脉 冲 的 下 降 沿, 延 时 定 时 器 开 始 对 t TOUT 记 数 请 参 见 看 门 狗 定 时 器 的 具 体 操 作 过 程 Figure 9. 工 作 过 程 中 发 生 看 门 狗 复 位 CC CK MCU 控 制 和 状 态 寄 存 器 - MCUCSR MCU 控 制 和 状 态 寄 存 器 提 供 了 有 关 引 起 MCU 复 位 的 复 位 源 的 信 息 Bit 7 6 5 4 3 2 WDRF BORF EXTRF PORF MCUCSR 读 / 写 R R R R R/W R/W R/W R/W 初 始 值 见 位 说 明 Bit 7..4 Res: 保 留 这 几 位 保 留, 读 操 作 始 终 为 " Bit 3 WDRF: 看 门 狗 复 位 标 志 看 门 狗 复 位 发 生 时 置 位 上 电 复 位 将 使 其 清 零, 也 可 以 通 过 写 来 清 除 Bit 2 BORF: 掉 电 检 测 复 位 标 志 掉 电 检 测 复 位 发 生 时 置 位 上 电 复 位 将 使 其 清 零, 也 可 以 通 过 写 来 清 除 Bit EXTRF: 外 部 复 位 标 志 外 部 复 位 发 生 时 置 位 上 电 复 位 将 使 其 清 零, 也 可 以 通 过 写 来 清 除 Bit PORF: 上 电 复 位 标 志 上 电 复 位 发 生 时 置 位 只 能 通 过 写 来 清 除 为 了 使 用 这 些 复 位 标 志 来 识 别 复 位 条 件, 用 户 应 该 尽 早 读 取 此 寄 存 器 的 数 据, 然 后 将 其 复 位 如 果 在 其 他 复 位 发 生 之 前 将 此 寄 存 器 复 位, 则 后 续 复 位 源 可 以 通 过 检 查 复 位 标 志 来 了 解 38 ATmega8(L)
ATmega8(L) 片 内 基 准 电 压 ATmega8 具 有 片 内 能 隙 基 准 源, 用 于 掉 电 检 测, 或 者 是 作 为 模 拟 比 较 器 或 ADC 的 输 入 ADC 的 2.56V 基 准 电 压 由 此 片 内 能 隙 基 准 源 产 生 基 准 电 压 使 能 信 号 和 启 动 时 间 电 压 基 准 的 启 动 时 间 可 能 影 响 其 工 作 方 式 启 动 时 间 列 于 Table 6 为 了 降 低 功 耗, 可 以 控 制 基 准 源 仅 在 如 下 情 况 打 开 :. BOD 使 能 ( 熔 丝 位 BODEN 被 编 程 ) 2. 能 隙 基 准 源 连 接 到 模 拟 比 较 器 (ACSR 寄 存 器 的 ACBG 置 位 ) 3. ADC 使 能 因 此, 当 BOD 被 禁 止 时, 置 位 ACBG 或 使 能 ADC 后 要 启 动 基 准 源 为 了 降 低 掉 电 模 式 的 功 耗, 用 户 可 以 禁 止 上 述 三 种 条 件, 并 在 进 入 掉 电 模 式 之 前 关 闭 基 准 源 Table 6. 内 部 电 压 基 准 源 的 特 性 符 号 参 数 最 小 值 典 型 值 最 大 值 单 位 V BG 能 隙 基 准 源 电 压.5.23.4 V t BG 能 隙 基 准 源 启 动 时 间 4 7 µs I BG 能 隙 基 准 源 功 耗 µa 39
看 门 狗 定 时 器 看 门 狗 定 时 器 由 独 立 的 MHz 片 内 振 荡 器 驱 动 这 是 V CC = 5V 时 的 典 型 值 请 参 见 特 性 数 据 以 了 解 其 他 V CC 电 平 下 的 典 型 值 通 过 设 置 看 门 狗 定 时 器 的 预 分 频 器 可 以 调 节 看 门 狗 复 位 的 时 间 间 隔, 如 P 4Table 7 所 示 看 门 狗 复 位 指 令 WDR 用 来 复 位 看 门 狗 定 时 器 此 外, 禁 止 看 门 狗 定 时 器 或 发 生 复 位 时 定 时 器 也 被 复 位 复 位 时 间 有 8 个 选 项 如 果 没 有 及 时 复 位 定 时 器, 一 旦 时 间 超 过 复 位 周 期, ATmega8 就 复 位, 并 执 行 复 位 向 量 指 向 的 程 序 具 体 的 看 门 狗 复 位 时 序 在 P 38 有 说 明 为 了 防 止 无 意 之 间 禁 止 看 门 狗 定 时 器, 当 看 门 狗 禁 用 时, 其 后 必 须 加 入 一 个 特 定 的 关 闭 序 列, 详 见 看 门 狗 定 时 器 控 制 寄 存 器 说 明 Figure 2. 看 门 狗 定 时 器 WATCHDOG OSCILLATOR 看 门 狗 定 时 器 控 制 寄 存 器 - WDTCR Bit 7 6 5 4 3 2 WDCE WDE WDP2 WDP WDP WDTCR 读 / 写 R R R R/W R/W R/W R/W R/W 初 始 值 Bits 7..5 Res: 保 留 保 留 位, 读 操 作 返 回 值 为 零 Bit 4 WDCE: 看 门 狗 修 改 使 能 清 零 WDE 时 必 须 先 置 位 WDCE, 否 则 不 能 禁 止 看 门 狗 一 旦 置 位, 硬 件 将 在 紧 接 的 4 个 时 钟 周 期 之 后 将 其 清 零 请 参 考 有 关 WDE 的 说 明 来 禁 止 看 门 狗 工 作 于 安 全 级 别 和 2 时 也 必 须 置 位 WDCE 以 修 改 预 分 频 器 的 数 据, 详 见 代 码 例 程 4 ATmega8(L)
ATmega8(L) Bit 3 WDE: 看 门 狗 使 能 WDE 为 " 时, 看 门 狗 使 能, 否 则 看 门 狗 将 被 禁 止 只 有 在 WDCE 为 " 时 WDE 才 能 清 零 以 下 为 关 闭 看 门 狗 的 步 骤 :. 在 同 一 个 指 令 内 对 WDCE 和 WDE 写 ", 即 使 WDE 已 经 为 " 2. 在 紧 接 的 4 个 时 钟 周 期 之 内 对 WDE 写 " Bits 2.. WDP2, WDP, WDP: 看 门 狗 定 时 器 预 分 频 器 2,, 和 WDP2 WDP 和 WDP 决 定 看 门 狗 定 时 器 的 预 分 频 器, 其 预 分 频 值 及 相 应 的 溢 出 周 期 如 Table 7 所 示 Table 7. 看 门 狗 定 时 器 预 分 频 器 选 项 WDP2 WDP WDP WDT 振 荡 器 周 期 V CC = 3.V 时 典 型 的 溢 出 周 期 V CC = 5.V 时 典 型 的 溢 出 周 期 6K (6,384) 7. ms 6.3 ms 32K (32,768) 34.3 ms 32.5 ms 64K (65,536) 68.5 ms 65 ms 28K (3,72).4 s.3 s 256K (262,44).27 s.26 s 52K (524,288).55 s.52 s,24k (,48,576). s. s 2,48K (2,97,52) 2.2 s 2. s 下 面 的 例 子 分 别 用 汇 编 和 C 实 现 了 关 闭 WDT 的 操 作 在 此 假 定 中 断 处 于 用 户 控 制 之 下 ( 比 如 禁 止 全 局 中 断 ), 因 而 在 执 行 下 面 程 序 时 中 断 不 会 发 生 4
改 变 看 门 狗 定 时 器 配 置 的 时 间 序 列 改 变 配 置 的 序 列 根 据 不 同 的 安 全 级 别 略 有 不 同 下 面 将 逐 一 说 明 汇 编 代 码 例 程 WDT_off: ; 复 位 WDT wdr ; 置 位 WDCE 和 WDE in r6, WDTCR ori r6, (<<WDCE) (<<WDE) out WDTCR, r6 ; 关 闭 WDT ldi r6, (<<WDE) out WDTCR, r6 ret C 代 码 例 程 void WDT_off(void) { /* 复 位 WDT */ _WDR() /* 置 位 WDCE 和 WDE */ WDTCR = (<<WDCE) (<<WDE); /* 关 闭 WDT */ WDTCR = x; } 安 全 级 别 (WDTON 熔 丝 位 未 编 程 ) 安 全 级 别 2(WDTON 熔 丝 位 已 编 程 ) 在 这 个 模 式 下, 看 门 狗 定 时 器 的 初 始 状 态 是 禁 止 的, 可 以 没 有 限 制 地 通 过 置 位 WDE 来 使 能 它 改 变 定 时 器 溢 出 周 期 及 禁 止 ( 已 经 使 能 的 ) 看 门 狗 定 时 器 时 需 要 执 行 一 个 特 定 的 时 间 序 列 :. 在 同 一 个 指 令 内 对 WDCE 和 WDE 写 ", 即 使 WDE 已 经 为 " 2. 在 紧 接 的 4 个 时 钟 周 期 之 内 同 时 对 WDE 及 WDP 写 入 合 适 的 数 据, 而 WDCE 则 写 " 在 这 个 模 式 下, 看 门 狗 定 时 器 总 是 使 能 的, WDE 的 读 返 回 值 为 " 改 变 定 时 器 溢 出 周 期 需 要 执 行 一 个 特 定 的 时 间 序 列 :. 在 同 一 个 指 令 内 对 WDCE 和 WDE 写 " 虽 然 WDE 总 是 为 置 位 状 态, 也 必 须 写 " 以 启 动 时 序 在 紧 接 的 4 个 时 钟 周 期 之 内 同 时 对 WDCE 写 ", 以 及 为 WDP 写 入 合 适 的 数 据 WDE 的 数 值 可 以 任 意 42 ATmega8(L)
ATmega8(L) 中 断 本 节 说 明 ATmega8 的 中 断 处 理 更 一 般 的 AVR 中 断 处 理 请 参 见 P 2 复 位 与 中 断 处 理 ATmega8 的 中 断 向 量 Table 8. 复 位 和 中 断 向 量 向 量 号 程 序 (2) 地 址 中 断 源 中 断 定 义 x () RESET 外 部 引 脚, 上 电 复 位, 掉 电 检 测 复 位, 看 门 狗 复 位 2 x INT 外 部 中 断 请 求 3 x2 INT 外 部 中 断 请 求 4 x3 TIMER2 COMP 定 时 器 / 计 数 器 2 比 较 匹 配 5 x4 TIMER2 OVF 定 时 器 / 计 数 器 2 溢 出 6 x5 TIMER CAPT 定 时 器 / 计 数 器 捕 捉 事 件 7 x6 TIMER COMPA 定 时 器 / 计 数 器 比 较 匹 配 A 8 x7 TIMER COMPB 定 时 器 / 计 数 器 比 较 匹 配 B 9 x8 TIMER OVF 定 时 器 / 计 数 器 溢 出 x9 TIMER OVF 定 时 器 / 计 数 器 溢 出 xa SPI, STC SPI 串 行 传 输 结 束 2 xb USART, RXC USART, Rx 结 束 3 xc USART, UDRE USART 数 据 寄 存 器 空 4 xd USART, TXC USART, Tx 结 束 5 xe ADC ADC 转 换 结 束 6 xf EE_RDY EEPROM 就 绪 7 x ANA_COMP 模 拟 比 较 器 8 x TWI 两 线 串 行 接 口 9 x2 SPM_RDY 保 存 程 序 存 储 器 内 容 就 绪 Notes:. 熔 丝 位 BOOTRST 被 编 程 时,MCU 复 位 后 程 序 跳 转 到 Boot Loader 请 参 见 P 96 支 持 引 导 装 入 程 序 - 在 写 的 同 时 可 以 读 (RWW, Read-While-Write) 的 自 我 编 程 能 力 2. 当 寄 存 器 GICR 的 IVSEL 置 位 时, 中 断 向 量 转 移 到 Boot 区 的 起 始 地 址 此 时 各 个 中 断 向 量 的 实 际 地 址 为 表 中 地 址 与 Boot 区 起 始 地 址 之 和 Table 9 给 出 了 不 同 的 BOOTRST/IVSEL 设 置 下 的 复 位 和 中 断 向 量 的 位 置 如 果 程 序 永 远 不 使 能 中 断, 中 断 向 量 就 没 有 意 义 用 户 可 以 在 此 直 接 写 程 序 同 样, 如 果 复 位 向 量 位 于 应 用 区, 而 其 他 中 断 向 量 位 于 Boot 区, 则 复 位 向 量 之 后 可 以 直 接 写 程 序 反 过 来 亦 是 如 此 Table 9. 复 位 和 中 断 向 量 位 置 的 确 定 BOOTRST () IVSEL 复 位 地 址 中 断 向 量 起 始 地 址 x x x Boot 区 复 位 地 址 + x Boot 区 复 位 地 址 x Boot 区 复 位 地 址 Boot 区 复 位 地 址 + x 43
Note:. Boot 区 复 位 地 址 列 于 P 27Table 82 对 于 熔 丝 位 BOOTRST, 表 示 未 编 程, 表 示 已 编 程 ATmega8 典 型 的 复 位 和 中 断 设 置 如 下 : 地 址 符 号 代 码 说 明 x rjmp RESET ; 复 位 中 断 向 量 x rjmp EXT_INT ; IRQ 中 断 向 量 x2 rjmp EXT_INT ; IRQ 中 断 向 量 x3 rjmp TIM2_COMP ; Timer2 比 较 中 断 向 量 x4 rjmp TIM2_OVF ; Timer2 溢 出 中 断 向 量 x5 rjmp TIM_CAPT ; Timer 捕 捉 中 断 向 量 x6 rjmp TIM_COMPA ; Timer 比 较 A 中 断 向 量 x7 rjmp TIM_COMPB ; Timer 比 较 B 中 断 向 量 x8 rjmp TIM_OVF ; Timer 溢 出 中 断 向 量 x9 rjmp TIM_OVF ; Timer 溢 出 中 断 向 量 xa rjmp SPI_STC ; SPI 传 输 结 束 中 断 向 量 xb rjmp USART_RXC ; USART RX 结 束 中 断 向 量 xc rjmp USART_UDRE ; UDR 空 中 断 向 量 xd rjmp USART_TXC ; USART TX 结 束 中 断 向 量 xe rjmp ADC ; ADC 转 换 结 束 中 断 向 量 xf rjmp EE_RDY ; EEPROM 就 绪 中 断 向 量 x rjmp ANA_COMP ; 模 拟 比 较 器 中 断 向 量 x rjmp TWSI ; 两 线 串 行 接 口 中 断 向 量 x2 rjmp EXT_INT2 ; IRQ2 中 断 向 量 x3 rjmp TIM_COMP ; Timer 比 较 中 断 向 量 x4 rjmp SPM_RDY ; SPM 就 绪 中 断 向 量 ; x5 RESET: ldi r6,high(ramend) ; 主 程 序 x6 out SPH,r6 ; 设 置 堆 栈 指 针 为 RAM 的 顶 部 x7 ldi r6,low(ramend) x8 out SPL,r6 x9 sei ; 使 能 中 断 x2 <instr> xxx......... 44 ATmega8(L)
ATmega8(L) 当 熔 丝 位 BOOTRST 未 编 程,Boot 区 为 2K 字 节, 且 寄 存 器 GICR 的 IVSEL 置 位 时, 典 型 的 复 位 和 中 断 设 置 如 下 : 地 址 符 号 代 码 说 明 $ rjmp RESET ; 复 位 中 断 向 量 ; $ RESET:ldi r6,high(ramend); 主 程 序 $2 out SPH,r6 ; 设 置 堆 栈 指 针 为 RAM 的 顶 部 $3 ldi r6,low(ramend) $4 out SPL,r6 $5 sei ; 使 能 中 断 $6 <instr> xxx ;.org $c $c rjmp EXT_INT ; IRQ 中 断 向 量 $c2 rjmp EXT_INT ; IRQ 中 断 向 量......... ; $c2 rjmp SPM_RDY ; SPM 就 绪 中 断 向 量 当 熔 丝 位 BOOTRST 已 编 程, 且 Boot 区 为 2K 字 节 时, 典 型 的 复 位 和 中 断 设 置 如 下 : 丝 位 BOOTRST 已 编 程, 且 Boot 区 为 2K 字 节 时, 典 型 的 复 位 和 中 断 设 置 如 下 : 地 址 符 号 代 码 说 明.org x x rjmp EXT_INT ; IRQ 中 断 向 量 x2 rjmp EXT_INT ; IRQ 中 断 向 量......... ; x4 rjmp SPM_RDY ; SPM 就 绪 中 断 向 量 ;.org $c $c rjmp RESET ; 复 位 中 断 向 量 ; $c RESET:ldi r6,high(ramend); 主 程 序 $c2 out SPH,r6 ; 设 置 堆 栈 指 针 为 RAM 的 顶 部 $c3 ldi r6,low(ramend) $c4 out SPL,r6 $c5 sei ; 使 能 中 断 $c6 <instr> xxx 45
当 熔 丝 位 BOOTRST 已 编 程,Boot 区 为 2K 字 节, 且 寄 存 器 GICR 的 IVSEL 置 位 时, 典 型 的 复 位 和 中 断 设 置 如 下 : 地 址 符 号 代 码 说 明 ;.org $c $c rjmp RESET ; Reset 中 断 向 量 $c rjmp EXT_INT ; IRQ 中 断 向 量 $c2 rjmp EXT_INT ; IRQ 中 断 向 量......... ; $c2 rjmp SPM_RDY ; SPM 就 绪 中 断 向 量 $c3 RESET: ldi r6,high(ramend); 主 程 序 $c4 out SPH,r6 ; 设 置 堆 栈 指 针 为 RAM 的 顶 部 $c5 ldi r6,low(ramend) $c6 out SPL,r6 $c7 sei ; 使 能 中 断 $c8 <instr> xxx 在 应 用 区 和 Boot 区 之 间 移 动 中 断 通 用 中 断 控 制 寄 存 器 - GICR 通 用 中 断 控 制 寄 存 器 决 定 中 断 向 量 表 的 放 置 地 址 Bit 7 6 5 4 3 2 INT INT IVSEL IVCE GICR 读 / 写 R/W R/W R R R R R/W R/W 初 始 值 Bit IVSEL: 中 断 向 量 选 择 当 IVSEL 为 " 时, 中 断 向 量 位 于 Flash 存 储 器 的 起 始 地 址 ; 当 IVSEL 为 " 时, 中 断 向 量 转 移 到 Boot 区 的 起 始 地 址 实 际 的 Boot 区 起 始 地 址 由 熔 丝 位 BOOTSZ 确 定 具 体 请 参 考 P 96 支 持 引 导 装 入 程 序 - 在 写 的 同 时 可 以 读 (RWW, Read-While-Write) 的 自 我 编 程 能 力 为 了 防 止 无 意 识 地 改 变 中 断 向 量 表, 修 改 IVSEL 时 需 要 遵 照 如 下 过 程 :. 置 位 中 断 向 量 修 改 使 能 位 IVCE 2. 在 紧 接 的 4 个 时 钟 周 期 里 将 需 要 的 数 据 写 入 IVSEL, 同 时 对 IVCE 写 执 行 上 述 序 列 时 中 断 自 动 被 禁 止 其 实, 在 置 位 IVCE 时 中 断 就 被 禁 止 了, 并 一 直 保 持 到 写 IVSEL 操 作 之 后 的 下 一 条 语 句 如 果 没 有 IVSEL 写 操 作, 则 中 断 在 置 位 IVCE 之 后 的 4 个 时 钟 周 期 保 持 禁 止 需 要 注 意 的 是, 虽 然 中 断 被 自 动 禁 止, 但 状 态 寄 存 器 的 位 I 的 值 并 不 受 此 操 作 的 影 响 注 意 : 若 中 断 向 量 位 于 Boot 区, 且 Boot 锁 定 位 BLB2 被 编 程, 则 执 行 应 用 区 的 程 序 时 中 断 被 禁 止 ; 若 中 断 向 量 位 于 应 用 区, 且 Boot 锁 定 位 BLB2 被 编 程, 则 执 行 Boot 区 的 程 序 时 中 断 被 禁 止 有 关 Boot 锁 定 位 的 细 节 请 参 见 P 96 支 持 引 导 装 入 程 序 - 在 写 的 同 时 可 以 读 (RWW, Read- While-Write) 的 自 我 编 程 能 力 46 ATmega8(L)