logo资料库

ATmega16中文手册.pdf

第1页 / 共330页
第2页 / 共330页
第3页 / 共330页
第4页 / 共330页
第5页 / 共330页
第6页 / 共330页
第7页 / 共330页
第8页 / 共330页
资料共330页,剩余部分请下载后查看
产品特性
引脚配置
声明
综述
方框图
引脚说明
VCC
GND
端口A(PA7..PA0)
端口B(PB7..PB0)
端口C(PC7..PC0)
端口D(PD7..PD0)
RESET
XTAL1
XTAL2
AVCC
AREF
代码例子
AVR CPU内核
介绍
结构综述
ALU-算术逻辑单元
状态寄存器
通用寄存器文件
X、Y、Z寄存器
堆栈指针
指令执行时序
复位与中断处理
中断响应时间
AVR ATmega16的存 储器
系统内可编程的Flash程 序存储器
SRAM数据存储器
数据存储器访问时间
EEPROM数据存储器
EEPROM读/写访问
EEPROM地址寄存器-EEARH 和EEARL
EEPROM数据寄存器 -EEDR
EEPROM控制寄存器-EECR
在掉电休眠模式下的EEPROM 写操作
防止EEPROM数据丢失
I/O存储器
系统时钟及时钟选项
时钟系统及其分布
CPU时钟-clkCPU
I/O时钟-clkI/O
Flash时钟-clkFLASH
异步定时器时钟-clkASY
ADC时钟-clkADC
时钟源
缺省时钟源
晶体振荡器
低频晶体振荡器
外部RC振荡器
标定的片内RC振荡器
振荡器标定寄存器-OSCCAL
外部时钟
定时器/计时器振荡器
电源管理及睡眠模式
MCU控制寄存器-MCUCR
空闲模式
ADC噪声抑制模式
掉电模式
省电模式
Standby模式
扩展Standby模式
最小化功耗
模数转换器
模拟比较器
掉电检测BOD
片内基准电压
看门狗定时器
端口引脚
JTAG接口与片上调试系统
系统控制和复位
复位AVR
复位源
上电复位
外部复位
掉电检测
看门狗复位
MCU控制和状态寄存器- MCUCSR
片内基准电压
基准电压使能信号和启动时间
看门狗定时器
看门狗定时器控制寄存器- WDTCR
中断
ATmega16的中断向量
在应用区和Boot区之间移动中 断向量
通用中断控制寄存器-GICR
I/O端口
介绍
作为通用数字I/O的端口
配置引脚
读取引脚上的数据
数字输入使能和休眠模式
未连接引脚的处理
端口的第二功能
特殊功能I/O寄存器-SFIOR
端口A的第二功能
端口B的第二功能
端口C的第二功能
端口D的第二功能
I/O端口寄存器的说明
端口A数据寄存器-PORTA
端口A数据方向寄存器-DDRA
端口A输入引脚地址-PINA
端口B数据寄存器-PORTB
端口B数据方向寄存器-DDRB
端口B输入引脚地址-PINB
端口C数据寄存器-PORTC
端口C数据方向寄存器-DDRC
端口C输入引脚地址-PINC
端口D数据寄存器-PORTD
端口D数据方向寄存器-DDRD
端口D输入引脚地址-PIND
外部中断
MCU控制寄存器-MCUCR
MCU控制与状态寄存器- MCUCSR
通用中断控制寄存器-GICR
通用中断标志寄存器-GIFR
具有PWM功能的8位 定时器/计时器0
综述
寄存器
定义
T/C时钟源
计数器单元
输出比较单元
强制输出比较
写TCNT0操作将阻止比较匹配
使用输出比较单元
比较匹配输出单元
比较输出模式和波形产生
工作模式
普通模式
CTC(比较匹配时清零定时器) 模式
快速PWM模式
相位修正PWM模式
T/C时序图
8位定时器/计数器寄存器 的说明
T/C控制寄存器-TCCR0
T/C寄存器-TCNT0
输出比较寄存器-OCR0
T/C中断屏蔽寄存器-TIMSK
T/C 中断标志寄存器-TIFR
T/C0与T/C1的预分频 器
内部时钟源
分频器复位
外部时钟源
特殊功能IO寄存器-SFIOR
16位定时器/计数器
综述
寄存器
定义
兼容性
访问16位寄存器
临时寄存器的重用
T/C时钟源
计数器单元
输入捕捉单元
输入捕捉触发源
噪声抑制器
输入捕捉单元的使用
输出比较单元
强制输出比较
写TCNT1操作阻止比较匹配
使用输出比较单元
比较匹配输出单元
比较输出模式和波形产生
工作模式
普通模式
CTC(比较匹配时清零定时器) 模式
快速PWM模式
相位修正PWM模式
相位与频率修正PWM模式
定时器/计数器时序图
16位定时器/计数器寄存 器的说明
T/C1控制寄存器A-TCCR1A
T/C1控制寄存器B-TCCR1B
T/C1-TCNT1H与TCNT1L
输出比较寄存器1A-OCR1AH 与 OCR1AL
输出比较寄存器1B-OCR1BH 与OCR1BL
输入捕捉寄存器1-ICR1H与 ICR1L
T/C1中断屏蔽寄存器-TIMSK
T/C中断标志寄存器-TIFR
8位有PWM与异步操 作的定时器/计数器2
综述
寄存器
定义
T/C的时钟源
计数器单元
输出比较单元
强制输出比较
写TCNT2操作阻止比较匹配
使用输出比较单元
比较匹配输出单元
比较输出模式和波形产生
工作模式
普通模式
CTC(比较匹配时清除定时器) 模式
快速PWM模式
相位修正PWM模式
T/C时序图
8位T/C寄存器说明
T/C控制寄存器-TCCR2
定时器/计数器寄存器-TCNT2
输出比较寄存器-OCR2
定时器/计数器的异步操作
异步状态寄存器-ASSR
定时器/计数器2的异步操作
定时器/计数器中断屏蔽寄存器 -TIMSK
定时器/计数器 中断标志寄存器 -TIFR
定时器/计数器预分频器
特殊功能 IO寄存器-SFIOR
串行外设接口-SPI
SS引脚的功能
从机模式
主机模式
SPI控制寄存器-SPCR
SPI状态寄存器-SPSR
SPI数据寄存器-SPDR
数据模式
USART
综述
AVR USART和AVR UART- 兼容性
时钟产生
片内时钟产生-波特率发生器
倍速工作模式 (U2X)
外部时钟
同步时钟操作
帧格式
校验位的计算
USART的初始化
发送5到8位数据位的帧
发送9位数据位的帧
传送标志位与中断
奇偶校验产生电路
禁止发送器
数据接收-USART接收器
以5到8个数据位的方式接收数 据帧
以9个数据位的方式接收帧
接收结束标志及中断
接收器错误标志
奇偶校验器
禁止接收器
刷新接收缓冲器
异步数据接收
恢复异步时钟
恢复异步数据
异步工作范围
多处理器通讯模式
使用MPCM
访问UBRRH/UCSRC寄存 器
写访问
读访问
USART寄存器描述
USART I/O数据寄存器-UDR
USART控制和状态寄存器A- UCSRA
USART控制和状态寄存器B- UCSRB
USART控制和状态寄存器C- UCSRC
USART波特率寄存器-UBRRL 和UBRRH
波特率设置的例子
两线串行接口TWI
特点
两线串行接口总线定义
TWI词汇
电气连接
数据传输和帧格式
传输数据(位)
START/STOP状态
地址数据包格式
数据包格式
将地址包和数据包组合为一个完 整的传输过程
多主机总线系统,仲裁和同 步
TWI模块综述
SCL和SDA引脚
比特率发生器单元
总线接口单元
地址匹配单元
控制单元
TWI寄存器说明
TWI比特率寄存器-TWBR
TWI控制寄存器-TWCR
TWI状态寄存器-TWSR
TWI数据寄存器-TWDR
TWI(从机) 地址寄存器- TWAR
使用TWI
数据传输模式
主机发送模式
主机接收模式
从机接收模式
从机发送模式
其他状态
将几个TWI模式组合到一起
多主机系统和仲裁
模拟比较器
特殊功能IO寄存器-SFIOR
模拟比较器控制和状态寄存器- ACSR
模拟比较器多工输入
模数转换器
特点
操作
启动一次转换
预分频及ADC转换时序
差分增益信道
改变通道或基准源
ADC输入通道
ADC基准电压源
ADC噪声抑制器
模拟输入电路
模拟噪声抑制技术
偏置补偿方案
ADC精度定义
ADC转换结果
ADC多工选择寄存器-ADMUX
ADC控制和状态寄存器A- ADCSRA
ADC数据寄存器-ADCL及 ADCH
ADLAR = 0
ADLAR = 1
特殊功能IO寄存器-SFIOR
JTAG接口和片上调试 系统OCD(On-chip Debug)
特点
综述
测试访问端口-TAP
TAP控制器
使用边界扫描链
使用片上调试系统
片上调试专用的JTAG指 令
PRIVATE0; $8
PRIVATE1; $9
PRIVATE2; $A
PRIVATE3; $B
I/O存储器里与片上调试相 关的寄存器
片上调试寄存器-OCDR
利用JTAG的可编程能力
参考文献
IEEE 1149.1 (JTAG) 边界扫描
特点
系统概述
数据寄存器
旁路寄存器
器件识别寄存器
复位寄存器
边界扫描链
用于边界扫描的JTAG指 令
EXTEST; $0
IDCODE; $1
SAMPLE_PRELOAD; $2
AVR_RESET; $C
BYPASS; $F
I/O存储器中与边界扫描相 关的寄存器
MCU控制与状态寄存器- MCUCSR
边界扫描链
扫描数字端口引脚
边界扫描和TWI
扫描RESET引脚
扫描时钟引脚
扫描模拟比较器
扫描ADC
ATmega16边界扫描次序
边界扫描描述语言文件
支持引导装入程序-在 写的同时可以读 (RWW, Read-While- Write)的自我编程能力
特点
应用程序Flash区以及引导 程序Flash区
应用程序区
引导程序区(Boot Loader Section) -BLS
RWW Flash区及非RWW Flash区
RWW区
非RWW区-NRWW
引导程序区锁定位
进入引导程序
保存程序存储器控制寄存器- SPMCR
在自编程时访问Flash
Flash的自编程
通过SPM执行页擦除
装载临时缓冲器(页加载)
执行页写操作
利用SPM中断
在更新BLS时需要考虑的问题
在自编程时防止读取RWW区
通过SPM设置引导程序锁定位
写EEPROM将阻止写 SPMCR
以软件方式读取熔丝位和锁定位
防止Flash的内容崩溃
使用SPM时的Flash编程时间
一个简单的引导程序汇编代码
ATmega16引导程序参数
存储器编程
程序及数据存储器锁定位
熔丝位
锁存熔丝位的数据
标识字节
标定字节
并行编程参数,引脚映射及 命令
信号名称
并行编程
进入编程模式
进行高效编程需要考虑的问题
芯片擦除
对Flash进行编程
对EEPROM进行编程
读取Flash
读取EEPROM
对熔丝位的低位进行编程
对熔丝位的高位进行编程
对锁定位进行编程
读取熔丝位和锁定位
读取标识字节
读取标定字节
并行编程特性
SPI串行下载
SPI 串行编程引脚映射
SPI串行编程算法
Flash的数据轮询
EEPROM的数据轮询
SPI串行编程特性
通过JTAG接口进行编程
与编程相关的JTAG指令
AVR_RESET ($C)
PROG_ENABLE ($4)
PROG_COMMANDS ($5)
PROG_PAGELOAD ($6)
PROG_PAGEREAD ($7)
数据寄存器
复位寄存器
编程使能寄存器
编程命令寄存器
虚拟Flash页面加载寄存器
虚拟Flash页面读取寄存器
编程算法
进入编程模式
退出编程模式
执行芯片擦除操作
对Flash进行编程
读取Flash
对EEPROM进行编程
读取EEPROM
对熔丝位进行编程
对锁定位进行编程
读取熔丝位和锁定位
读取标识字节
读取标定字节
电气特性
绝对极限值*
直流特性
外部时钟驱动波形
外部时钟驱动
两线串行接口特性
SPI时序特性
交流特性-初始数据
ATmega16典型特性
工作电流
空闲模式电流
掉电模式电流
省电模式电流
Standby模式电流
引脚上拉
驱动能力
引脚门限及滞后
Bod门限值与模拟比较器偏移量
内部振荡器速率
外围设备耗电流
寄存器概述
指令集概述
定货信息
封装信息
44A
40P6
44M1
勘误表
ATmega16(L) Rev. H.
ATmega16(L) Rev. G.
ATmega16的数据手册 变更日志
从版本Rev. 2466F-02/03 到版本Rev. 2466G-10/03 的改动
从版本Rev. 2466E-10/02 到版本Rev. 2466F-02/03 的改动
从版本Rev. 2466D-09/02 到版本Rev. 2466E-10/02 的改动
从版本Rev. 2466C-03/02 到版本Rev. 2466D-09/02 的改动
从版本Rev. 2466B-09/01 到版本Rev. 2466C-03/02 的改动
产品特性 • 高性能、低功耗的 8 位 AVR® 微处理器 • 先进的 RISC 结构 – 131 条指令 – 大多数指令执行时间为单个时钟周期 – 32 个 8 位通用工作寄存器 – 全静态工作 – 工作于 16 MHz 时性能高达 16 MIPS – 只需两个时钟周期的硬件乘法器 • 非易失性程序和数据存储器 – 16K 字节的系统内可编程 Flash 擦写寿命 : 10,000 次 – 具有独立锁定位的可选 Boot 代码区 通过片上 Boot 程序实现系统内编程 真正的同时读写操作 – 512 字节的 EEPROM 擦写寿命 : 100,000 次 – 1K 字节的片内 SRAM – 可以对锁定位进行编程以实现用户程序的加密 • JTAG 接口 ( 与 IEEE 1149.1 标准兼容 ) – 符合 JTAG 标准的边界扫描功能 – 支持扩展的片内调试功能 – 通过 JTAG 接口实现对 Flash、 EEPROM、熔丝位和锁定位的编程 • 外设特点 – 两个具有独立预分频器和比较器功能的 8 位定时器 / 计数器 – 一个具有预分频器、比较功能和捕捉功能的 16 位定时器 / 计数器 – 具有独立振荡器的实时计数器 RTC – 四通道 PWM – 8 路 10 位 ADC 8 个单端通道 TQFP 封装的 7 个差分通道 2 个具有可编程增益 (1x, 10x, 或 200x)的差分通道 – 面向字节的两线接口 – 两个可编程的串行 USART – 可工作于主机 / 从机模式的 SPI 串行接口 – 具有独立片内振荡器的可编程看门狗定时器 – 片内模拟比较器 • 特殊的处理器特点 – 上电复位以及可编程的掉电检测 – 片内经过标定的 RC 振荡器 – 片内 / 片外中断源 – 6 种睡眠模式 : 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式、Standby 模式以及 – 32 个可编程的 I/O 口 – 40 引脚 PDIP 封装 , 44 引脚 TQFP 封装 , 与 44 引脚 MLF 封装 扩展的 Standby 模式 • I/O 和封装 • 工作电压 : • 速度等级 – ATmega16L:2.7 - 5.5V – ATmega16:4.5 - 5.5V – 0 - 8 MHz ATmega16L – 0 - 16 MHz ATmega16 – 正常模式 : 1.1 mA – 空闲模式 : 0.35 mA – 掉电模式 : < 1 µA • ATmega16L 在 1 MHz, 3V, 25°C 时的功耗 具有 16KB 系统 内可编程 Flash 的 8 位 微控制器 ATmega16 ATmega16L 本文是英文数据手册的中文 翻译,其目的是方便中国用 户的阅读。它无法自动跟随 原稿的更新,同时也可能存 在翻译上的错误。读者应该 以英文原稿为参考以获得更 准确的信息。 2466G–AVR–10/03
引脚配置 Figure 1. ATmega16 的引脚 PDIP (XCK/T0) PB0 (T1) PB1 (INT2/AIN0) PB2 (OC0/AIN1) PB3 (SS) PB4 (MOSI) PB5 (MISO) PB6 (SCK) PB7 RESET VCC GND XTAL2 XTAL1 (RXD) PD0 (TXD) PD1 (INT0) PD2 (INT1) PD3 (OC1B) PD4 (OC1A) PD5 (ICP1) PD6 PA0 (ADC0) PA1 (ADC1) PA2 (ADC2) PA3 (ADC3) PA4 (ADC4) PA5 (ADC5) PA6 (ADC6) PA7 (ADC7) AREF GND AVCC PC7 (TOSC2) PC6 (TOSC1) PC5 (TDI) PC4 (TDO) PC3 (TMS) PC2 (TCK) PC1 (SDA) PC0 (SCL) PD7 (OC2) TQFP/MLF ) 0 C O 1 N A I / ) 2 T N I / 0 N A I ) S S / ) 0 T K C X ( ) 1 T ( ( ( ( 4 B P 3 B P 2 B P 1 B P 0 B P D N G C C V ) 0 C D A ) 1 C D A ) 2 C D A ) 3 C D A ( ( ( ( 0 A P 1 A P 2 A P 3 A P (MOSI) PB5 (MISO) PB6 (SCK) PB7 RESET VCC GND XTAL2 XTAL1 (RXD) PD0 (TXD) PD1 (INT0) PD2 PA4 (ADC4) PA5 (ADC5) PA6 (ADC6) PA7 (ADC7) AREF GND AVCC PC7 (TOSC2) PC6 (TOSC1) PC5 (TDI) PC4 (TDO) 3 D P 4 D P 5 D P 6 D P 7 D P C C V D N G ) 1 T N I ( ) ) B 1 C O A 1 C O ) 1 P C I ( ) 2 C O ( 0 C P 1 C P 2 C P 3 C P ) L C S ( ) ) ) A D S ( K C T ( S M T ( 声明 本数据手册的典型值来源于对器件的仿真,以及其他基于相同产生工艺的 AVR 微控制器 的标定特性。本器件经过特性化之后将给出实际的最大值和最小值。 ( ( 2 ATmega16(L) 2466G–AVR–10/03
ATmega16(L) 综述 方框图 ATmega16 是基于增强的 AVR RISC 结构的低功耗 8 位 CMOS 微控制器。由于其先进的指 令集以及单时钟周期指令执行时间,ATmega16 的数据吞吐率高达 1 MIPS/MHz,从而可 以缓减系统在功耗和处理速度之间的矛盾。 Figure 2. 结构框图 VCC PA0 - PA7 PC0 - PC7 PORTA DRIVERS/BUFFERS PORTC DRIVERS/BUFFERS GND PORTA DIGITAL INTERFACE PORTC DIGITAL INTERFACE AVCC AREF MUX & ADC ADC INTERFACE TWI PROGRAM COUNTER STACK POINTER TIMERS/ COUNTERS OSCILLATOR PROGRAM FLASH SRAM INTERNAL OSCILLATOR XTAL1 XTAL2 RESET WATCHDOG TIMER OSCILLATOR INTERNAL CALIBRATED OSCILLATOR MCU CTRL. & TIMING INTERRUPT UNIT EEPROM USART INSTRUCTION REGISTER INSTRUCTION DECODER CONTROL LINES GENERAL PURPOSE REGISTERS X Y Z ALU AVR CPU STATUS REGISTER PROGRAMMING LOGIC SPI + - COMP. INTERFACE PORTB DIGITAL INTERFACE PORTD DIGITAL INTERFACE PORTB DRIVERS/BUFFERS PORTD DRIVERS/BUFFERS PB0 - PB7 PD0 - PD7 2466G–AVR–10/03 3
AVR 内核具有丰富的指令集和 32 个通用工作寄存器。所有的寄存器都直接与算逻单元 (ALU) 相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结 构大大提高了代码效率,并且具有比普通的 CISC 微控制器最高至 10 倍的数据吞吐率。 ATmega16 有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW), 512 字节 EEPROM,1K 字节 SRAM,32 个通用 I/O 口线,32 个通用工作寄存器,用于边 界扫描的 JTAG 接口,支持片内调试与编程,三个具有比较模式的灵活的定时器 / 计数器 (T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具 有可选差分输入级可编程增益 (TQFP 封装 ) 的 ADC ,具有片内振荡器的可编程看门狗定 时器,一个 SPI 串行端口,以及六个可以通过软件进行选择的省电模式。 工作于空闲模式 时 CPU 停止工作,而 USART、两线接口、 A/D 转换器、 SRAM、 T/C、 SPI 端口以及 中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之 外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其 余功能模块处于休眠状态; ADC 噪声抑制模式时终止 CPU 和除了异步定时器与 ADC 以 外所有 I/O 模块的工作,以降低 ADC 转换时的开关噪声; Standby 模式下只有晶体或谐 振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速 启动能力;扩展 Standby 模式下则允许振荡器和异步定时器继续工作。 本芯片是以 Atmel 高密度非易失性存储器技术生产的。片内 ISP Flash 允许程序存储器通 过 ISP 串行接口,或者通用编程器进行编程,也可以通过运行于 AVR 内核之中的引导程 序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(Application Flash Memory)。在更新应用Flash存储区时引导Flash区(Boot Flash Memory)的程序继续 运行,实现了 RWW 操作。 通过将 8 位 RISC CPU 与系统内可编程的 Flash 集成在一个 芯片内, ATmega16 成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而 低成本的解决方案。 ATmega16 具有一整套的编程与系统开发工具,包括:C 语言 编译器、宏汇编、 程序调试 器 / 软件仿真器、仿真器及评估板。 数字电路的电源 地 端口 A 做为 A/D 转换器的模拟输入端。 端口 A 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特 性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉 低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 A 处于高阻状态。 端口 B 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特 性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉 低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 B 处于高阻状态。 端口 B 也可以用做其他不同的特殊功能,请参见 P56。 端口 C 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特 性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉 低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 C 处于高阻状态。如果 JTAG接口使能,即使复位出现引脚 PC5(TDI)、 PC3(TMS)与 PC2(TCK)的上拉电阻被激 活。 端口 C 也可以用做其他不同的特殊功能,请参见 P59。 引脚说明 VCC GND 端口 A(PA7..PA0) 端口 B(PB7..PB0) 端口 C(PC7..PC0) 4 ATmega16(L) 2466G–AVR–10/03
端口 D(PD7..PD0) RESET XTAL1 XTAL2 AVCC AREF 代码例子 ATmega16(L) 端口 D 为 8 位双向 I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特 性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路 拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口 D 处于高阻状态。 端口 D 也可以用做其他不同的特殊功能,请参见 P61。 复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。门限时间见 P36Table 15。持续时间小于门限间的脉冲不能保证可靠复位。 反向振荡放大器与片内时钟操作电路的输入端。 反向振荡放大器的输出端。 AVCC是端口A与A/D转换器的电源。不使用ADC时,该引脚应直接与VCC连接。使用ADC 时应通过一个低通滤波器与 VCC 连接。 A/D 的模拟基准输入引脚。 本数据手册包含了一些简单的代码例子以说明如何使用芯片各个不同的功能模块。这些 例子都假定在编译之前已经包含了正确的头文件。有些 C 编译器在头文件里并没有包含 位定义,而且各个 C 编译器对中断处理有自己不同的处理方式。请注意查阅相关文档以 获取具体的信息。 2466G–AVR–10/03 5
AVR CPU 内核 介绍 结构综述 本节从总体上讨论 AVR 内核的结构。CPU 的主要任务是保证程序的正确执行。因此它必 须能够访问存储器、执行运算、控制外设以及处理中断。 Figure 3. AVR 结构的方框图 Flash Program Memory Instruction Register Instruction Decoder Control Lines Data Bus 8-bit Program Counter Status and Control i g n s s e r d d A t c e r i D i g n s s e r d d A t c e r i d n I Interrupt Unit SPI Unit Watchdog Timer Analog Comparator I/O Module1 I/O Module 2 I/O Module n 32 x 8 General Purpose Registrers ALU Data SRAM EEPROM I/O Lines 为了获得最高的性能以及并行性, AVR 采用了 Harvard 结构,具有独立的数据和程序总 线。程序存储器里的指令通过一级流水线运行。 CPU 在执行一条指令的同时读取下一条 指令 ( 在本文称为预取 )。这个概念实现了指令的单时钟周期运行。程序存储器是可以在 线编程的 FLASH。 快速访问寄存器文件包括 32 个 8 位通用工作寄存器,访问时间为一个时钟周期。从而实 现了单时钟周期的 ALU 操作。在典型的 ALU 操作中,两个位于寄存器文件中的操作数同 时被访问,然后执行运算,结果再被送回到寄存器文件。整个过程仅需一个时钟周期。 寄存器文件里有 6 个寄存器可以用作 3 个 16 位的间接寻址寄存器指针以寻址数据空间, 实现高效的地址运算。其中一个指针还可以作为程序存储器查询表的地址指针。这些附加 的功能寄存器即为 16 位的 X、 Y、 Z 寄存器。 ALU支持寄存器之间以及寄存器和常数之间的算术和逻辑运算。ALU也可以执行单寄存器 操作。运算完成之后状态寄存器的内容得到更新以反映操作结果。 程序流程通过有 / 无条件的跳转指令和调用指令来控制,从而直接寻址整个地址空间。大 多数指令长度为 16 位,亦即每个程序存储器地址都包含一条 16 位或 32 位的指令。 程序存储器空间分为两个区:引导程序区 (Boot 区 ) 和应用程序区。这两个区都有专门的 锁定位以实现读和读 / 写保护。用于写应用程序区的 SPM 指令必须位于引导程序区。 在中断和调用子程序时返回地址的程序计数器 (PC) 保存于堆栈之中。堆栈位于通用数据 SRAM,因此其深度仅受限于 SRAM 的大小。在复位例程里用户首先要初始化堆栈指针 6 ATmega16(L) 2466G–AVR–10/03
ATmega16(L) SP。这个指针位于 I/O 空间,可以进行读写访问。数据 SRAM 可以通过 5 种不同的寻址模 式进行访问。 AVR 存储器空间为线性的平面结构。 AVR有一个灵活的中断模块。控制寄存器位于I/O空间。状态寄存器里有全局中断使能位。 每个中断在中断向量表里都有独立的中断向量。各个中断的优先级与其在中断向量表的 位置有关,中断向量地址越低,优先级越高。 I/O 存储器空间包含 64 个可以直接寻址的地址,作为 CPU 外设的控制寄存器、SPI,以及 其他 I/O 功能。映射到数据空间即为寄存器文件之后的地址 0x20 - 0x5F。 AVR ALU 与 32 个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间 的 ALU 运算只需要一个时钟周期。 ALU 操作分为 3 类:算术、逻辑和位操作。此外还提 供了支持无 / 有符号数和分数乘法的乘法器。具体请参见指令集。 状态寄存器包含了最近执行的算术指令的结果信息。这些信息可以用来改变程序流程以 实现条件操作。如指令集所述,所有 ALU 运算都将影响状态寄存器的内容。这样,在许 多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。 在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作 需要软件来处理。 AVR 中断寄存器 SREG 定义如下: Bit 3 V R/W 2 N R/W 1 Z R/W 0 C R/W SREG 7 I 6 T R/W 5 H R/W 4 S R/W 读 / 写 初始值 R/W 0 0 0 0 0 0 0 0 ALU- 算术逻辑单元 状态寄存器 • 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: 负数标志 表明算术或逻辑操作结果为负。详见指令集的说明。 2466G–AVR–10/03 7
• Bit 1 – Z: 零标志 表明算术或逻辑操作结果为零。详见指令集的说明。 • Bit 0 – C: 进位标志 表明算术或逻辑操作发生了进位。详见指令集的说明。 8 ATmega16(L) 2466G–AVR–10/03
分享到:
收藏