赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 单片机与嵌入式

首页 > 专业技术 > 单片机与嵌入式 > ATmega128单片机的结构
ATmega128单片机的结构

ATmega128单片机是基于AVR RISC结构的8位低功耗CMOS微处理器,数据吞吐率达1MIPS/MHz。ATmega128单片机内核采用Harvard结构,具有独立的数据和程序总线,CPU在执行一条指令同时读取下一条指令,实现了指令的单时钟周期运行。ATmega128单片机有32个通用工作寄存器,所有的寄存器都直接与ALU相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。寄存器中有6个寄存器可以用作3个16位的间接地址寄存器指针,实现高效的地址运算,其中一个还可以作为程序存储器查询表的地址指针,这3个16位寄存器为X、Y、Z寄存器。
程序存储器空间分为引导程序区和应用程序区,都有专门的锁定位以实现读和读/写保护。在中断和调用子程序时返回地址程序计数器(PC)保存于堆栈之中,堆栈位于调用数据SRAM,故此深度仅受限于SRAM大小。中断模块由I/O空间中控制寄存器和状态寄存器的全局中断使能位组成,每个中断都具有一个中断向量,由中断向量组成的中断向量表位于程序存储器的最前端。中断向量地址低的中断具有高优先级。

1. ATmega128的性能特点:

1)工作电压:4.5~5.5V(ATmega128L 2.7~5.5V)
2)系统时钟:0~16MHz(ATmega128L 0~8MHz)
3)133条指令:大多数指令可在1个周期内完成
4)128KB Flash,寿命10000次写/擦除周期,具有独立锁定位和可选启动代码
5)4KB EEPROM:寿命100000次写/擦除周期
6)4KB SRAM
7)JTAG接口:对Flash、EEPROM、熔丝位和锁定位编程
8)2个8位定时器/计数器:带独立的预分频器和比较器
9)2个16位定时器/计数器:带预分频器、比较和捕捉功能
10)RTC实时时钟:独立的预分频器
11)2通道8位PWM,6路分辨率可编程(2~16位)PWM
12)8通道10位ADC
13)模拟比较器
14)2通道USART
15)SPI:主机/从机模式
16)TWI:兼容I2C
17)Watchdog
18)上电复位及可编程的掉电检测
19)6种省电模式:空闲、ADC噪声抑制、省电、掉电、Standby以及扩展Standby
20)TQFP64/MLF

2. 特殊功能引脚:

RESET:复位输入脚,超过最小门限时间的低电平将引起系统复位
AVCC:端口F以及ADC转换器的电源,一般与VCC相连,使用ADC时应通过低通滤波器与VCC连接
AREF:ADC的模拟基准输入引脚
PEN:SPI串行下载的使能引脚。在上电复位时保持PEN为低电平将使器件进入SPI串行下载模式。

3. 编程方式:

1)程序存储器为在线可编程ISP Flas,可通过SPI接口、通用编程器,或引导程序多次编程
2)引导程序可以使用任何接口来下载应用程序到应用Flash存储器
3)在更新应用Flash存储器时引导Flash区的程序继续运行,实现RWW操作

4. ATmega128的内部存储器:

1)Flash:程序存储器
ATmega128单片机具有128KB的在线编程Flash,至少可以擦写10000次。因为所有AVR指令为16位或32位,故Flash组织成64KBX16的形式。因为程序计数器(PC)为16位,因此可寻址空间为64K。Flash程序区分为引导程序区和应用程序区两个区,可利用SPI或JTAG接口实现对Flash的串行下载。
2)SRAM:数据存储器
ATmega128单片机有SRAM,在普通模式和ATmega103兼容模式两种情况配置有差异。在ATmega103兼容模式下,起始的32个地址为寄存器文件,然后是64个I/O存储器,最后是4000K为的内部数据,共4096字节。而在普通模式下,起始的32字节为寄存器文件,然后是64个I/O寄存器,接着是160个扩展的I/O存储器,最后是4096字节内部数据,共4352字节。对于扩展的I/O空间$60~$FF,只能使用ST、STS、STD和LD、LDS、LDD指令。
当ATmega128单片机工作于ATmega103兼容模式下时,扩展的I/O无法访问。
ATmega128单片机还可以访问直到64KB的外部数据SRAM,其起始地址紧跟在内部SRAM之后,所以普通模式下只能有61184B,ATmega103兼容模式下只能有61440B字节。访问外部SRAM使用与访问内部SRAM相同的指令,但硬件上会产生读/写锁存信号(PG0和PG1),而访问内部时则无效。若要访问外部SRAM,则必须置位MCUCR的SRE。
数据寻址模式分直接寻址、带偏移量的间接寻址、间接寻址、预减的间接寻址以及后加的间接寻址5种。寄存器R26~R31为间接寻址的指针寄存器。直接寻址访问整个数据空间,带偏移量的间接寻址模式寻址到X、Z指针给定地址附近的63个地址,带预减和后加的间接寻址模式要用到X、Y、Z指针。
3)EEPROM:数据存储器
ATmega128单片机包含4KB的EEPROM,它是一个独立的数据空间,可以按字节读写。寿命至少为100000次擦除。EEPROM的访问由地址寄存器、数据寄存器和控制寄存器决定。
当执行EEPROM读操作时,CPU会停止工作4个周期,然后再执行后续指令;当执行EEPRON写操作时,会停止工作2个周期,然后再执行后续指令。在电源滤波时间常数比较大的电路中,上电/掉电时电源变化缓慢,CPU会工作于低于晶振要求的电压,为防止EEPROM的数据丢失,可以采用使能芯片的掉电检测电路BOD或使用外部复位电路的方法,而为了防止无意识的EEPROM写操作,需要执行一个特定的写序列。
与EEPROM读写有关的寄存器主要包括EEPROM地址寄存器EEARH和EEARL、数据寄存器EEDR及控制寄存器EECR。
I/O存储器:ATmega128单片机的所有I/O和外设都放在I/O空间。
所有的I/O地址都可以通过LD、LDS、LDD和ST、STS、STD指令来访问,在32个通用寄存器和I/O之间传输数据;地址为$00~$1F的I/O寄存器还可用SBI和CBI指令直接进行位寻址,而SBIS和SBIC则用来检查单个位置位。当使用IN和OUT指令时,地址必须在$00~$3F之间。
如果要像操作SRAM一样通过LD和ST指令访问I/O寄存器,相应的地址要加上20。为了与后续的产品兼容,保留未用的位应写0,而保留的I/O寄存器则不应进行写操作。
一些状态标志位的清除是通过写1来实现。CBI和SBI指令可以操作I/O寄存器所以位,并给置位的位回写1,因此会清除这些标志。CBI和SBI指令只对$00~$IF之间的寄存器有效。

5.外部存储器接口:

外部存储器接口非常适合于存储器器件互连,如外部SRAM和Flash、LCD、A/D、D/A等。外部存储器接口的控制位于3个寄存器当中,MCU控制寄存器MCUCR、外部存储器控制寄存器A(XMCRA)以及外部存储器控制寄存器B(XMCRB)。

6. 时钟系统:

ATmega128单片机时钟系统主要包括CPU时钟、I/O时钟、Flash时钟及ADC时钟4类。
CPU时钟与操作ATmega128单片机内核的子系统相连,如通用工作寄存器、状态寄存器以及保存堆栈指针的数据寄存器。
I/O时钟用于主要的I/O模块,如定时器/计数器、SPI和USART等。I/O时钟还可以用于外部中断模块,但是有些外部中断由异步逻辑检测,即使I/O时钟停止了,这些中断仍然可以得到监控。此外,TWI模块的地址识别功能,在没有I/O时钟的情况下也是异步实现的,这就使得这个功能在任何省电模式下都可以正常工作。
Flash时钟控制Flash接口的操作,此时钟通常与CPU时钟是同步的。异步定时器时钟允许异步定时器/计数器直接由外部32kHz时钟晶体驱动,使得此定时器/计数器即使在省电模式下仍然可以为系统提供一个实时时钟。
ADC有专门的时钟,这样可以在ADC工作时停止CPU和I/O时钟以降低数字电路产生的噪声,从而提高ADC的精度。
ATmega128单片机有几种时钟源选项,可通过熔丝位进行配置。

7.省电模式:

ATmega128的省电模式有6种,可以通过软件选择:
1)空闲模式:CPU停止运行,SRAM、T/C、SPI、USART、模拟比较器、ADC、TWI、WDT及中断系统继续工作。该模式下只停止了CPU时钟和Flash时钟,其他时钟则继续工作,内部中断和外部中断都可以唤醒MCU。如果不需要从模拟比较器中断唤醒MCU,为了减小功耗,可以切断比较器的电源,方法是置位模拟比较器控制和状态寄存器ACSR的位ACD。如果ADC使能,进入此模式后将自动启动一次转换。
2)ADC噪声抑制:CPU停止运行,而ADC、外部中断、TWI地址配置、T/C0和WDT继续工作。该模式下只停止了CPU时钟、Flash时钟和I/O时钟,使得ADC转换精度更高。ADC使能时,进入此模式将自动启动一次AD转换。ADC转换结束中断、外部复位、WDT复位、BOD复位、TWI接口地址匹配中断、T/C0中断、SPM/EEPROM准备好中断、外部中断INT7~INT4或INT3~INT0都可以将MCU从此模式唤醒。
3)掉电模式:外部晶振停止,而外部中断、TWI接口地址匹配及WDT(如果使能)继续工作,寄存器内容保持。该模式停止了所以时钟,只有异步模块可以继续工作。外部复位、BOD复位、TWI接口地址匹配中断、外部电平中断INT7~INT4或外部中断INT3~INT0可以使MCU脱离掉电模式。当使用外部电平中断方式将MCU从掉电模式唤醒时,必须保持外部电平一定时间。从施加掉电唤醒条件到真正唤醒有一个延迟时间,此时间用于时钟重新启动并稳定下来,唤醒周期与由熔丝位CKSEL定义的复位周期是一样的
4)省电模式:此模式停止了除异步定时器外的所有时钟。如果定时器/计数器0为异步驱动,即寄存器ASSR的AS0置位,则此时继续运行。除了掉电模式唤醒方式,定时器/计数器0的溢出中断和比较匹配中断也可以将MCU唤醒,只要TIMSK使能这些中断,而且SREG的全局中断使能位I置位。如果定时器不是异步驱动的,建议使用掉电模式。
5)Standby模式:与掉电模式唯一不同的是振荡器继续工作,这样可以快速启动,唤醒时间需要6个周期。
6)扩展Standby模式:允许振荡器和异步定时器继续工作。

8. I/O端口:

ATmega128单片机的I/O端口作为通用数字I/O使用时,每一端口都有读、修改和写的功能,即用SBI或CBI指令改变某些引脚的方向、端口电平或禁止/使能上拉电阻时,不会无意地改变其他引脚的相关信息。输出缓冲器具有对称的驱动能力,可以直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻,并有保护二极管与VCC和地相连。
ATmega128单片机的每一I/O端口都有三个存储器地址:数据寄存器PORTx、数据方向寄存器DDRx和端口输入引脚PINx,PORTx和DDRx为读/写寄存器,PINx为只读寄存器。DDRx用来选择引脚方向,为1配置为输出,否则为输入。当引脚为输入时,若对应PORTx为1,则上拉电阻使能。当引脚配置为输出时,若对应PORTx为1则输出高电平,否则输出低电平。复位时,各引脚为三态。
DDxn PORTxn PUD(in SFIOR) I/O 上拉电阻 说明
0 0 x 输入 No 高阻态Hi-Z
0 1 0 输入 Yes 被外电路拉低时将输出电流
0 1 1 输入 No 高阻态Hi-Z
1 0 x 输出 No 输出低电平(吸收电流)
1 1 x 输出 No 输出高电平(输出电流)
当寄存器SFIOR的上拉禁止位PUD置位时,所有端口的全部引脚的上拉电阻都被禁止。多数引脚作为GPIO是与第二功能复用的,使能某些引脚的第二功能,不会影响其他引脚用于GPIO。
未用引脚,建议给这些引脚赋予一个确定电平,最简单的方式是使能内部上拉电阻,但复位时上拉电阻被禁止,如果对此时的功耗也有要求,可以使用外部上拉或下拉电阻。不推荐直接将未用引脚与VCC或GND连接,避免偶然作为输出是出现冲击电流。
ATmega128单片机有A、B、C、D、E、F、G共7个端口,除G只有5个I/O口,其他皆有8个口。数据寄存器、数据方向寄存器和端口输入引脚的命名分别为PORTA、PORTB、PORTC、PORTD、PORTE、PORTF、PORTG、DDRA、DDRB、DDRC、DDRD、DDRE、DDRF、DDRG、PINA、、PINB、PINC、PIND、PINE、PINF、PING。

9. I/O端口的第二功能:

ATmega128单片机的大多数I/O端口除了一般的I/O功能外,还具有第二功能。

1)端口A的第二功能:用于接外部存储器的低字节地址及数据口。

2)端口B的第二功能:用于定时器/计数器输出及SPI接口。

PB7

OC2/OC1C(T/C2的输出比较和PWM输出,或者是T/C1的输出比较和PWM输出C)

PB6

OC1B(T/C1的输出比较和PWM输出B)

PB5

OC1A(T/C1的输出比较和PWM输出A)

PB4

OC0(T/C0的输出比较和PWM输出)

PB3

MISO(SPI总线的主机输入/从机输出信号)

PB2

MOSI(SPI总线的主机输出/从机输入信号)

PB1

SCK(SPI总线的串行时钟)

PB0

SS-(SPI总线的从机选择引脚,低电平有效)

当PB7~PB4作为T/C输出比较或PWM输出时,对应的DDBn必须设置为1。PB3作为MISO功能使用,主机模式时DDB3设置不影响功能,从机模式时数据方向由DDB3控制;设为输入后,上拉电阻由PORTB3控制。PB2作为MOSI功能使用,从机模式时DDB2设置不影响功能,主机模式时数据方向由DDB2控制;设为输入后,上拉电阻由PORTB2控制。PB1作为SCK功能使用,从机模式时DDB1设置不影响功能,主机模式时数据方向由DDB1控制;设为输入后,上拉电阻由PORTB1控制。PB0作为SS功能使用,从机模式时DDB0设置不影响功能,主机模式时数据方向由DDB0控制;设为输入后,上拉电阻由PORTB0控制。

3)端口C的第二功能:在用于接外部存储器的低字节地址及数据口。
在ATmega103兼容模式下,端口C为输出口,其第二功能为外部存储器接口的地址高字节A8~A15。

4)端口D的第二功能:如下表。

PD7

T2(T/C2的时钟输入)

PD6

T1(T/C1的时钟输入)

PD5

XCK1(USART1的外部时钟输入/输出)

PD4

ICP1(T/C1输入捕捉的触发引脚)

PD3

INT3/TXD1(外部中断3的输入引脚,或是UART1发送引脚)

PD2

INT2/RXD1(外部中断2的输入引脚,或是UART1接收引脚)

PD1

INT1/SDA(外部中断1的输入引脚,或是TWI的串行数据)

PD0

INT0/SCL(外部中断0的输入引脚,或是TWI的串行时钟)

PD5可作为USART1的外部输入/输出时钟,由DDD4控制时钟为输入(0)还是输出(1),只有当USART1工作于同步模式时XCK1才有效。使能了USART1的发送器后,PD3被强制设为输出,PD2被强制设为输入,不受DDD3和DDD2的影响,但PORTD2仍然控制PD2的上拉电阻。当寄存器TWCR的TWEN置位时,使能TWI,PD1和PD0与端口脱离而成为TWI的SDA、SCL引脚,引脚还配置一个尖峰滤波器以抑制50ns以下的尖峰信号,引脚由具有斜率限制功能的开漏驱动器驱动。

5)端口E的第二功能:如下表。

PE7

INT7/IC3(外部中断7的输入引脚,或是T/C3输入捕捉的触发引脚)

PE6

INT6/T3(外部中断6的输入引脚,或是T/C3的时钟输入)

PE5

INT5/OC3C(外部中断5的输入引脚,或是T/C3的输出比较和PWM输出C引脚)

PE4

INT4/OC3B(外部中断4的输入引脚,或是T/C3的输出比较和PWM输出B引脚)

PE3

AIN1/OC3A(模拟比较器负输入端,或是T/C3的输出比较和PWM输出A引脚)

PE2

AIN0/XCK0(模拟比较器正输入端,或是USART0的外部输入/输出时钟)

PE1

PD0/TXD0(编程数据输出,或是USART0的发送引脚)

PE0

PD1/RXD0(编程数据输入,或是USART0的接收引脚)

PE5、PE4、PE3作为T/C3的输出比较C、B和A的输出引脚,需要配置DDE5、DDE4和DDE3为输出。PE2可作为USART0的外部输入/输出时钟,由DDE2控制时钟为输入(0)还是输出(1),只有当USART0工作于同步模式时XCK0才有效。在串行下载程序时,PE0用来输入数据,PE1用来输出数据。使能USART0接收器后,DDE0的设置不影响功能,但PORTE0仍然控制着上拉电阻。

6)端口F的第二功能:ADC输入及JTAG接口。

如果端口F的一些引脚配置为输出,在A/D转换过程中不要改变输出引脚的电平,否则可能会损坏转换结果。在ATmega103兼容模式下,端口F只能作为输入。若使能了JTAG接口,即使在复位阶段PF7(TDI)、PF5(TMS)和PF4(TCK)的上拉电阻仍然有效

PF7

ADC7/TDI(ADC输入通道7,或是JTAG测试数据输入引脚)

PF6

ADC6/TDO(ADC输入通道6,或是JTAG测试数据输出引脚)

PF5

ADC5/TMS(ADC输入通道5,或是JTAG测试模式选择引脚)

PF4

ADC4/TCK(ADC输入通道4,或是JTAG测试时钟引脚)

PF3

ADC3(ADC输入通道3)

PF2

ADC2(ADC输入通道2)

PF1

ADC1(ADC输入通道1)

PF0

ADC0(ADC输入通道0)

使能JTAG接口后,PF7、PF6、PF5和PF4不能再用作GPIO。

7)端口G的第二功能:如下表。

在ATmega103兼容模式下,端口G只有下面的第二功能,而不能用作GPIO端口。

PG4

TOSC1(RTC振荡器,T/C0)

PG3

TOSC2(RTC振荡器,T/C0)

PG2

ALE(外部存储器地址锁存使能信号)

PG1

RD-(外部存储器读信号)

PG0

WR-(外部寄存器写信号)

当寄存器ASSR的AS0置位时,使能T/C0的异步时钟,PG4、PG3从端口脱离,成为反相振荡器放大器的输入和输出,此时可以外接晶振。

10.特殊功能I/O寄存器SFIOR:

位定义如表。

SFIOR位

Bit

功能描述

TSM

7

T/C同步模式标志位:0,立即同时开始计数;1,数据保持直到被更新

ACME

3

模拟比较器多路复用器使能标志:0,AIN1接比较器负极输入端;1,ADC多路复用器为模拟比较器选择负极输入

PUD

2

禁止上拉电阻标志位:0,不操作;1,端口上拉电阻被禁止

PSR0

1

T/C0预分频器复位:0,不操作;1,T/C0的预分频器复位

PSR321

0

T/C3、2、1的预分频器复位:0,不操作;1,预分频器复位,对3个都有影响

11. 中断向量:

ATmega128单片机有多种中断源,每个中断和复位在程序空间都有一个独立的中断向量,所以中断事件都有使能位,当使能位置位,且状态寄存器的全局中断使能位I置位时,中断可以发生。
中断向量为中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址。ATmega128单片机有35个中断向量入口地址,形成中断向量表:

向量号

程序地址

中断源

中断定义

1

$0000

RESET

外部引脚上电复位,掉电检测,WDT复位,JTAG复位

2

$0002

INT0

外部中断请求0

3

$0004

INT1

外部中断请求1

4

$0005

INT2

外部中断请求2

5

$0006

INT3

外部中断请求3

6

$000A

INT4

外部中断请求4

7

$000C

INT5

外部中断请求5

8

$000E

INT6

外部中断请求6

9

$0010

INT7

外部中断请求7

10

$0012

TIMER2 COMP

定时器/计数器2比较匹配

11

$0014

TIMER2 OVF

定时器/计数器2溢出

12

$0016

TIMER1 CAPT

定时器/计数器1捕捉事件

13

$0018

TIMER1 COMPA

定时器/计数器1比较匹配A

14

$001A

TIMER1 COMPB

定时器/计数器1比较匹配B

15

$001C

TIMER1 OVF

定时器/计数器1溢出

16

$001E

TIMER0 COMP

定时器/计数器0比较匹配

17

$0020

TIMER0 OVF

定时器/计数器0溢出

18

$0022

SPI,STC

SPI串行传输结束

19

$0024

USART0,Rx

USART0,Rx结束

20

$0026

USART0,UDRE

USART0数据寄存器空

21

$0028

USART0,Tx

USART0,Tx结束

22

$002A

ADC

ADC转换结束

23

$002C

EE READY

EEPROM就绪

24

$002E

ANALOG COMP

模拟比较器

25

$0030

TIMER1 COMPC

定时器/计数器1比较匹配C

26

$0032

TIMER3 CAPT

定时器/计数器3捕捉事件

27

$0034

TIMER3 COMPA

定时器/计数器3比较匹配A

28

$0036

TIMER3 COMPB

定时器/计数器3比较匹配B

29

$0038

TIMER3 COMPC

定时器/计数器3比较匹配C

30

$003A

TIMER3 OVF

定时器/计数器3溢出

31

$003C

USART1,Rx

USART1,Rx结束

32

$003E

USART1,UDRE

USART1数据寄存器空

33

$0040

USART1,Tx

USART1,Tx结束

34

$0042

TWI

两线串行接口

35

$0044

SPM READY

保存程序存储器内容就绪

在中断向量表中,中断向量地址越低,优先级越高。地址为$0030~$0044的中断在ATmega103兼容模式中不存在。必须先使能中断标志位,才可以通过中断向量来响应中断。
ATmega128单片机可以通过对熔丝位BOOTRST编程及MCU控制寄存器的IVSEL位的设置,来修改系统复位地址和中断向量的初始地址。

BOOTRST

IVSEL

复位地址

中断向量起始地址

1

0

$0000

$0002

1

1

$0000

Boot复位地址+$0002

0

0

Boot区复位地址

$0002

0

1

Boot区复位地址

Boot复位地址+$0002

其中BOOTRST熔丝位决定芯片上电启动或复位时,第一条执行指令的地址,而MCUCR的IVSEL位决定中断向量是位于应用区还是Boot区。MCUCR中与中断相关的位:

MCUCR位名

Bit

描述

IVSEL

1

中断向量位置选择:0,位于Flash起始地址;1,位于Boot区起始地址

IVCE

0

中断向量修改使能:0,不操作;1,修改中断向量使能,禁止中断

12. 外部中断:

ATmega128单片机的外部中断通过INT7~INT0触发,即使引脚INT7~INT0配置为输出,只要电平发生了合适变化,中断也会触发,这样可以用来产生软件中断。通过设置外部中断控制寄存器EICRA(INT3~INT0)和EICRB(INT7~INT4),中断可以由下降沿、上升沿,或者低电平触发。当外部中断使能并且配置为电平触发,只要引脚电平为低中断就会产生。若要求INT7~INT4在信号下降沿或上升沿触发,I/O时钟必须工作;而INT3~INT0的中断条件检测是异步的,可以用来将器件从省电模式唤醒。
与外部中断操作有关的寄存器主要包括外部中断控制控制寄存器EICRA/EICRB、外部中断屏蔽寄存器EIMSK及外部中断标志寄存器EIFR。
EICRA寄存器每两位组合用于控制相应外部中断INT3~INT0的敏感电平。位定义为:

ISC31

ISC30

ISC21

ISC20

ISC11

ISC10

ISC01

ISC00

其中:00,低电平中断;01,保留;10,下降沿产生异步中断;11,上升沿产生异步中断。
EICRB寄存器每两位组合用于控制相应外部中断INT7~INT4的敏感电平。位定义为:

ISC71

ISC70

ISC61

ISC60

ISC51

ISC50

ISC41

ISC40

其中:00,低电平中断;01,任意逻辑电平变换都将引起中断;10,两次采样时发现发生下降沿就会产生中断;11,两次采样时发现发生上升沿就会产生中断。
外部中断屏蔽寄存器EIMSK控制相应外部中断禁止或使能。位定义为:

INT7

INT6

INT5

INT4

INT3

INT2

INT1

INT0

其中:0,禁止相应外部中断请求;1,当SREG的I置位时,使能相应的外部中断请求。
外部中断标志寄存器EIFR,用来查询外部中断发生的位置。位定义为:

INT7

INT6

INT5

INT4

INT3

INT2

INT1

INT0

其中:0,未触发中断请求;1,当触发中断请求时,相应的中断标志置位。

13. 定时器/计数器:

ATmega128单片机具有2个包含独立的预分频器和比较器功能的8位定时器/计数器,2个具有预分频器、比较功能和捕捉功能的16位定时器/计数器,并且具有独立预分频器的实时时钟计数器。同时含有2路8位PWM,6路分辨率可编程(2~16位)的PWM。

1)T/C0:8位定时器/计数器。

T/C0的结构分为4个单元,分别是预分频单元、计数器单元、输出比较单元和比较匹配单元。与T/C0操作有关的寄存器主要包括T/C0控制寄存器TCCR0、T/C0寄存器TCNT0、输出比较寄存器OCR0、异步状态寄存器ASSR、中断屏蔽寄存器TIMASK及中断标志寄存器TIFR:
T/C0控制寄存器TCCR0:功能如下表。

TCCR0位

Bit

功能描述

FOC0

7

强制输出比较标志位:0,不操作;1,强制波形发生器立即进行比较操作

WGM01

3

波形产生模式标志位:00,普通模式,TOP为0xFF;01,相位修正的PWM模式,TOP为0xFF;10,CTC模式,TOP为OCR0;11,快速PWM模式,TOP为0xFF。

WGM00

6

COM01

5

 

比较匹配输出模式标志位,分3种情况。非PWM模式:00,正常端口操作,OC0未连接;01,比较匹配发生器,OC0取反;10,比较匹配发生时OC0清零;11,比较匹配发生时,OC0置位。快速PWM模式:00,正常的端口操作,OC0未连接;01,保留;10,比较匹配发生时OC0清零,计数到TOP时OC0置位;11,比较匹配发生时OC0置位,计数到TOP时OC0清零。相位修正PWM模式:00,正常端口操作,OC0未连接;01,保留;10,在升序计数时发生比较匹配将清零OC0,在降序计数时发生比较匹配将置位OC0;11,在升序计数时发生比较匹配将置位OC0,在降序计数时发生比较匹配将清零OC0。

COM00

4

CS02~CS00

2~0

时钟选择标志位:000,无时钟,T/C不工作;001,T0S;010,T0S/8;011,T0S/32;100,T0S/64;101,T0S/128;110,T0S/256;111,T0S/1024。

T/C0寄存器TCNT0:计数器的8位数据读写寄存器,对其的写访问将在下一个时钟阻止比较匹配。
输出比较寄存器OCR0:包含一个8位数据,不间断地与计数器数值TCNT0进行比较,匹配事件可以用来产生输出中断,或者用来在OC0引脚上产生波形。
异步状态寄存器ASSR:功能如下表。

ASSR位

Bit

功能描述

AS0

3

异步T/C0驱动标志位:0,由I/O时钟驱动;1,由连接TOSC1引脚的晶振驱动

TCN0UB

2

T/C0更新标志位:0,TCNT0可以写入新值;1,TCNT0更新中

OCR0UB

1

T/C输出比较寄存器0更新标志位:0,OCR0可以写入新值;1,OCR0更新中

TCR0UB

0

T/C控制寄存器0更新标志位:0,TCCR0可以写入新值;1,TCCR0更新中

与定时器/计数器0相关的中断屏蔽寄存器:

TIMSK位

Bit

描述

OCIE0

1

T/C0输出比较匹配中断使能标志位:0,不操作;1,使能T/C0输出比较匹配中断

TOIE0

0

T/C0溢出中断使能标志位:0,不操作;1,使能T/C0溢出中断

与定时器/计数器0相关的中断标志寄存器:

TIFR位

Bit

描述

OCF0

1

输出比较标志0:0,T/C0与OCR0的值不匹配;1,T/C0与OCR0的值不匹配

TOV0

0

T/C0溢出标志:0,T/C0未溢出;1,T/C0溢出,PWM模式中表示T/C0在00改变计数方向

各模块的功能及控制:
a)预分频器:可选预分频由TCCR0寄存器的CS02~CS00控制。若置位ASSR寄存器的AS0,T/C0将由引脚TOSC1和TOSC2异步驱动,使其可以作为实时时钟。置位SFIOR寄存器的PSR0,将复位预分频器,从而允许用户从可预测的预分频器开始工作。
b)计数器:根据不同的工作模式,计数器针对由预分频器提供的时钟实现清零、加1或减1操作。计数序列存放TCNT0中,在每一个定时器时钟加1,当达到TOP值,TIFR寄存器中的TOV0置位,如果此时TIMSK寄存器中的TOIE0为1(允许T0溢出中断),且全局中断允许,就产生溢出中断。中断程序可以对TCNT0和OCR0进行操作,对定时器进行调整。
c)输出比较器:输出比较单元持续对TCNT0和OCR0寄存器进行比较,一旦二者相等,比较器就给出匹配信号,并在匹配发生的下一个定时器周期里输出比较标志OCF0置位。若OCIE0=1,还将引发输出比较中断,执行中断将自动实现对OCF0的清零操作。
d)比较匹配输出:比较匹配模式控制位COM01/00控制OC0引脚的输出源,还确定下一次比较匹配发生时的输出比较OC0状态。当输出比较单元输出匹配信号,TIFR寄存器中的OCF0置位,如果此时TIMSK中的OCIE0为1(允许T0比较匹配中断),并且全局中断允许,就产生比较匹配中断。中断程序中可以对TCNT0和OCR0进行操作,调整定时器。
定时器/计数器的工作模式:
a)普通模式:WGM01/00=00,为最简单的工作模式。此模式下,计数器不停累加,计到最大值TOP=0xFF后简单地返回最小值0x00,并重新开始。在TCNT0变为0的同一个定时器时钟内,TOV0置位,定时器中断例程能够自动清零TOV0。普通模式下,用户可以随时写入新的计数器值,输出比较单元可以用来产生中断。不推荐在普通模式下利用输出产生波形,因为会占用太多的CPU时间。
b)CTC模式:WGM01/00=10,OCR0寄存器定义了计数器的最大值,当TCNT0=OCR0时计数器清零。这个模式可以控制比较匹配输出的频率,简化了外部事件计数的操作。为了在CTC模式下得到波形输出,可以设置OC0在每次比较匹配发生时改变逻辑电平,还要将其端口设置为输出。

此模式下的频率为:  atmege,  其中N表示预分频器的分频因子。
在中断服务程序中可以更新TOP值。在无预分频(或低预分频)时,将TOP更改为接近BOTTOM的数值时,有可能使写入的OCR0小于当前的TCNT0,这将丢失一次比较匹配,而且计数器要计数到最大值0xFF然后再从0x00开始计数到OCR0。
c)相位修正PWM模式:WGM01/00=01,基于双斜线操作,为用户提供了一个获得高精度相位修正PWM波形的方法。计数器重复地从BOTTOM计数到Max,然后又从Max倒退回到BOTTOM。此模式还分为两种比较输出模式,一种是普通比较输出模式,当计数器往Max计数时发生了TCNT0与OCR0匹配,OC0将清零;而在计数器往BOTTOM计数时若发生了TCN0与OCR0匹配时,OC0将置位。另一种是反向比较输出模式,当计数器往Max计数时发生了TCNT0与OCR0匹配,OC0将置位;而在计数器往BOTTOM计数时若发生了TCN0与OCR0匹配时,OC0将清零。双斜线操作有对称性,十分适合于电机控制,但获得的最大频率比单斜线要小。相位修正PWM模式的精度固定为8比特,计数器不断累加直到Max,然后开始减计数。在一个定时器周期内,TCNT0的值等于Max。
此模式下的频率为:atmega128, 其中N表示预分频器的分频因子。
d)快速PWM模式:WGM01/00=11,是一种单斜线操作,可用来产生高频PWM波形。计数器从BOTTOM计数到Max,然后立即回到BOTTOM重新开始。此模式还分为两种比较输出模式,一种普通比较输出模式,输出比较引脚OC0在TCN0与OCR0匹配时清零,在BOTTOM时置位;另一种是反向比较输出模式,输出比较引脚OC0在TCN0与OCR0匹配时置位,在BOTTOM时清零。工作于快速PWM模式时,计数器的数值一直增加到Max,然后在后面的一个时钟周期清零。由于使用了单斜线方式,快速PWM模式的工作频率比使用双斜线的的相位修正PWM模式高一倍,十分适合于功率调节、整流和DAC应用,频率高可以减小电感和电容的尺寸。
此模式下的频率为:atmega128, 其中N表示预分频器的分频因子。

2)T/C2:8位定时器/计数器。

T/C2的结构分为4个单元,分别是预分频单元、计数器单元、输出比较单元和比较匹配单元。与T/C2操作有关的寄存器主要包括T/C0控制寄存器TCCR2、T/C0寄存器TCNT2、输出比较寄存器OCR2、中断屏蔽寄存器TIMASK及中断标志寄存器TIFR:
T/C2控制寄存器TCCR0:功能如下表。

TCCR2位

Bit

功能描述

FOC2

7

强制输出比较标志位:0,不操作;1,强制波形发生器立即进行比较操作

WGM21

3

波形产生模式标志位:00,普通模式,TOP为0xFF;01,相位修正的PWM模式,TOP为0xFF;10,CTC模式,TOP为OCR2;11,快速PWM模式,TOP为0xFF。

WGM20

6

COM21

5

 

比较匹配输出模式标志位,分3种情况。非PWM模式:00,正常端口操作,OC2未连接;01,比较匹配发生器,OC2取反;10,比较匹配发生时OC2清零;11,比较匹配发生时,OC2置位。快速PWM模式:00,正常的端口操作,OC2未连接;01,保留;10,比较匹配发生时OC2清零,计数到TOP时OC2置位;11,比较匹配发生时OC2置位,计数到TOP时OC2清零。相位修正PWM模式:00,正常端口操作,OC2未连接;01,保留;10,在升序计数时发生比较匹配将清零OC2,在降序计数时发生比较匹配将置位OC2;11,在升序计数时发生比较匹配将置位OC2,在降序计数时发生比较匹配将清零OC2。

COM20

4

CS22~CS20

2~0

时钟源选择标志位:000,无时钟,T/C不工作;001,T2S;010,T2S/8;011,T2S/64;100,T2S/256;101,T2S/1024;110,T2引脚外部时钟,下降沿驱动;111,T2引脚外部时钟,上升沿驱动。

T/C2寄存器TCNT2:计数器的8位数据读写寄存器,对其的写访问将在下一个时钟阻止比较匹配。
输出比较寄存器OCR2:包含一个8位数据,不间断地与计数器数值TCNT2进行比较,匹配事件可以用来产生输出中断,或者用来在OC2引脚上产生波形。
与定时器/计数器2相关的中断屏蔽寄存器:

TIMSK位

Bit

描述

OCIE2

7

T/C2输出比较匹配中断使能标志位:0,不操作;1,使能T/C2输出比较匹配中断

TOIE2

6

T/C2溢出中断使能标志位:0,不操作;1,使能T/C2溢出中断

与定时器/计数器2相关的中断标志寄存器:

TIFR位

Bit

描述

OCF2

7

输出比较标志2:0,T/C2与OCR2的值不匹配;1,T/C2与OCR2的值不匹配

TOV2

6

T/C2溢出标志:0,T/C2未溢出;1,T/C2溢出,PWM模式中表示T/C2在00改变计数方向

各模块的功能及控制:
a)预分频器:可选预分频由TCCR1寄存器的CS22~CS20控制。通过复位预分频器可以同步T/C与程序运行,但要注意是否另一个T/C也在使用这个分频器。由T2引脚提供的外部时钟源可以用作T/C时钟,这是通过同步逻辑在每个系统时钟周期对其采样在送到边沿检测器来实现,因此T2上电平的变化需要延时2.5~3.5个系统时钟周期才能使计数器更新。为了保证正确采样,外部时钟脉冲的最高频率不要大于系统时钟频率f/2.5。外部时钟源不送入预分频器。
b)计数器:根据不同的工作模式,计数器针对由预分频器提供的时钟实现清零、加1或减1操作。计数序列存放TCNT2中,在每一个定时器时钟加1,当达到TOP值,TIFR寄存器中的TOV2置位,如果此时TIMSK寄存器中的TOIE2为1(允许T2溢出中断),且全局中断允许,就产生溢出中断。中断程序可以对TCNT2和OCR2进行操作,对定时器进行调整。
c)输出比较器:输出比较单元持续对TCNT2和OCR2寄存器进行比较,一旦二者相等,比较器就给出匹配信号,并在匹配发生的下一个定时器周期里输出比较标志OCF2置位。若OCIE2=1,还将引发输出比较中断,执行中断将自动实现对OCF2的清零操作。
d)比较匹配输出:比较匹配模式控制位COM21/20控制OC2引脚的输出源,还确定下一次比较匹配发生时的输出比较OC2状态。当输出比较单元输出匹配信号,TIFR寄存器中的OCF2置位,如果此时TIMSK中的OCIE2为1(允许T2比较匹配中断),并且全局中断允许,就产生比较匹配中断。中断程序中可以对TCNT2和OCR2进行操作,调整定时器。
定时器/计数器的工作模式:
a)普通模式:WGM21/20=00,为最简单的工作模式。此模式下,计数器不停累加,计到最大值TOP=0xFF后简单地返回最小值0x00,并重新开始。在TCNT2变为0的同一个定时器时钟内,TOV2置位,定时器中断例程能够自动清零TOV2。普通模式下,用户可以随时写入新的计数器值,输出比较单元可以用来产生中断。不推荐在普通模式下利用输出产生波形,因为会占用太多的CPU时间。
b)CTC模式:WGM21/20=10,OCR0寄存器定义了计数器的最大值,当TCNT2=OCR2时计数器清零。这个模式可以控制比较匹配输出的频率,简化了外部事件计数的操作。为了在CTC模式下得到波形输出,可以设置OC2在每次比较匹配发生时改变逻辑电平,还要将其端口设置为输出。
此模式下的频率为:  atmega128,  其中N表示预分频器的分频因子。
在中断服务程序中可以更新TOP值。在无预分频(或低预分频)时,将TOP更改为接近BOTTOM的数值时,有可能使写入的OCR2小于当前的TCNT2,这将丢失一次比较匹配,而且计数器要计数到最大值0xFF然后再从0x00开始计数到OCR2。
c)相位修正PWM模式:WGM21/20=01,基于双斜线操作,为用户提供了一个获得高精度相位修正PWM波形的方法。计数器重复地从BOTTOM计数到Max,然后又从Max倒退回到BOTTOM。此模式还分为两种比较输出模式,一种是普通比较输出模式,当计数器往Max计数时发生了TCNT2与OCR2匹配,OC2将清零;而在计数器往BOTTOM计数时若发生了TCN2与OCR2匹配时,OC2将置位。另一种是反向比较输出模式,当计数器往Max计数时发生了TCNT2与OCR2匹配,OC2将置位;而在计数器往BOTTOM计数时若发生了TCN2与OCR2匹配时,OC2将清零。双斜线操作有对称性,十分适合于电机控制,但获得的最大频率比单斜线要小。相位修正PWM模式的精度固定为8比特,计数器不断累加直到Max,然后开始减计数。在一个定时器周期内,TCNT2的值等于Max。 此模式下的频率为:, 其中N表示预分频器的分频因子。
d)快速PWM模式:WGM21/20=11,是一种单斜线操作,可用来产生高频PWM波形。计数器从BOTTOM计数到Max,然后立即回到BOTTOM重新开始。此模式还分为两种比较输出模式,一种普通比较输出模式,输出比较引脚OC2在TCN2与OCR2匹配时清零,在BOTTOM时置位;另一种是反向比较输出模式,输出比较引脚OC2在TCN2与OCR2匹配时置位,在BOTTOM时清零。工作于快速PWM模式时,计数器的数值一直增加到Max,然后在后面的一个时钟周期清零。由于使用了单斜线方式,快速PWM模式的工作频率比使用双斜线的的相位修正PWM模式高一倍,十分适合于功率调节、整流和DAC应用,频率高可以减小电感和电容的尺寸。
此模式下的频率为:, 其中N表示预分频器的分频因子。

3)16位定时器/计数器T/C1和T/C3:

16位定时器/计数器可以分为5个单元,分别为预分频器、计数器单元、输入捕捉单元、输出比较单元和比较匹配输出单元。
与16位定时器/计数器操作有关的寄存器主要包括16位定时器/计数器1和3控制寄存器A、B和C(TCCR1A、TCCR1B、TCCR1C、TCCR3A、TCCR3B、TCCR3C),16位定时器/计数器1和3寄存器(TCNT1H、TCNT1L、TCNT3H、TCNT3L),16位定时器/计数器1和3输出比较寄存器A、B和C(OCR1AH、OCR1AL、OCR1BH、OCR1BL、OCR1CH、OCR1CL、OCR3AH、OCR3AL、OCR3BH、OCR3BL、OCR3CH、OCR3CL),16位定时器/计数器1和3输入捕捉寄存器(ICR1H、ICR1L、ICR3H、ICR3L),屏蔽中断寄存器TIMSK,扩展中断屏蔽寄存器(ETIMSK),中断标志寄存器(TIFR)及扩展中断标志寄存器(ETIFR)。
TCCRnA控制寄存器:

TCCRnA位

Bit

功能描述

COMnA1

7

比较输出模式标志位,COMnA1/COMnA0、COMnB1/COMnB0、COMnC1/COMnC0分别控制OCnA、OCnB、OCnC:
非PWM模式:00,普通端口操作,OCnA、OCnB、OCnC未连接;01,比较匹配时,OCnA、OCnB、OCnC电平取反;10,比较匹配时清零,OCnA、OCnB、OCnC输出低电平;11,比较匹配时置位,OCnA、OCnB、OCnC输出高电平。
‚快速PWM模式:00,普通端口操作,OCnA、OCnB、OCnC未连接;01,WGMn3=0,普通端口操作,OCnA、OCnB、OCnC未连接;01,WGMn3=1,比较匹配时OCnA电平取反、OCnB、OCnC保留;10,比较匹配时清零OCnA、OCnB、OCnC,在TOP时OCnA、OCnB、OCnC置位;11,比较匹配时置位OCnA、OCnB、OCnC,在TOP时清零。
ƒ相位修正PWM模式:00,普通端口操作,OCnA、OCnB、OCnC未连接;01,WGMn3=0,普通端口操作,OCnA、OCnB、OCnC未连接;01,WGMn3=1,比较匹配时OCnA电平取反、OCnB、OCnC保留;10,升序计数时比较匹配清零OCnA、OCnB、OCnC,降序计数时比较匹配置位OCnA、OCnB、OCnC;11,升序计数时比较匹配置位OCnA、OCnB、OCnC,降序计数时比较匹配清零OCnA、OCnB、OCnC。

COMnA0

6

COMnB1

5

COMnB0

4

COMnC1

3

 

COMnC0

2

WGMn1

1

波形发生模式标志位,这2位与TCCRnB寄存器的WGMn3、WGMn2结合,用于确定波形发生器的工作模式。

WGMN0

0

TCCRnB控制寄存器:

TCCRnB位

Bit

功能描述

ICNCn

7

输入捕捉噪声抑制器使能标志位:0,不操作;1,使能输入捕捉噪声抑制

ICESn

6

输入捕捉触发沿选择标志:0,下降沿触发输入捕捉;1,上升沿触发输入捕捉

RES

5

保留

WGMn3

4

波形发生模式标志位,这2位与TCCRnA寄存器的WGMn1、WGMn0结合,用于确定波形发生器的工作模式。

WGMn2

3

CSn2~CSn0

2~0

时钟源选择标志位:000,无时钟,T/C不工作;001,T0S;010,TnS/8;011,TnS/64;100,TnS/256;101,TnS/1024;110,Tn引脚外部时钟,下降沿驱动;111,Tn引脚外部时钟,上升沿驱动。

WGMn3、WGMn2、WGMn1、WGMn0用于确定波形发生器的工作模式:0000,普通模式,TOP为0xFFFF;0001,8位相位修正PWM模式,TOP为0x00FF;0010,9位相位修正PWM模式,TOP为0x01FF;0011,10位相位修正PWM模式,TOP为0x03FF;0100,CTC模式,TOP为OCRnA;0101,8位快速PWM模式,TOP为0x00FF;0110,9位快速PWM模式,TOP为0x01FF;0111,10位快速PWM模式,TOP为0x03FF;1000,相位与频率修正PWM模式,TOP为ICRn;1001,相位与频率修正PWM模式,TOP为OCRnA;1010,相位修正PWM模式,TOP为ICRn;1011,相位修正PWM模式,TOP为OCRnA;1100,CTC模式,TOP为ICRn;1101,保留;1110,快速PWM模式,TOP为ICRn;1111:快速PWM模式,TOP为OCRnA。
TCCRnC控制寄存器:

TCCRnC位

Bit

功能描述

FOCnA

7

输入捕捉噪声抑制器使能标志位:0,不操作;1,强制波形发生器输出比较通道A匹配

FOCnB

6

输入捕捉噪声抑制器使能标志位:0,不操作;1,强制波形发生器输出比较通道B匹配

FOCnC

5

输入捕捉噪声抑制器使能标志位:0,不操作;1,强制波形发生器输出比较通道C匹配

RES4~RES0

4~0

保留,写TCCRnC时,这几位必须写入0

TCNTnH和TCNTnL寄存器:是数据寄存器的高8位和低8位,可以通过读写这16位寄存器实现对计数器的读写访问。
OCRnAH和OCRnAL寄存器:是输出比较寄存器A的高8位和低8位,该寄存器中的16位数据与TCNTn寄存器中的计数值进行连续的比较,一旦数据匹配,将产生一个输出比较中断,或改变OCnA的输出逻辑电平。
OCRnBH和OCRnBL寄存器:是输出比较寄存器B的高8位和低8位,该寄存器中的16位数据与TCNTn寄存器中的计数值进行连续的比较,一旦数据匹配,将产生一个输出比较中断,或改变OCnB的输出逻辑电平。
OCRnCH和OCRnCL寄存器:是输出比较寄存器C的高8位和低8位,该寄存器中的16位数据与TCNTn寄存器中的计数值进行连续的比较,一旦数据匹配,将产生一个输出比较中断,或改变OCnC的输出逻辑电平。
ICRnH和ICRnL寄存器:是输入捕捉寄存器ICPn的高8位和低8位,当外部引脚ICPn有输入捕捉触发信号产生时,计数器TCNTn中的值写入ICRn中。ICRn中的设定值可作为计数器的TOP值。
与16位定时器/计数器1和3相关的中断屏蔽寄存器:

TIMSK位

Bit

描述

TICIE1

5

T/C1输入捕捉使能标志位:0,不操作;1,使能T/C1输入捕捉中断(配合状态寄存器的I位为1)

OCIE1A

4

T/C1输出比较A匹配中断使能标志位:0,不操作;1,使能T/C1输出比较A匹配中断

与16位定时器/计数器1和3相关的扩展中断屏蔽寄存器:

ETIMSK

Bit

描述

RES

7,6

保留,当写ETIMSK时,这两位必须写入0

TICIE3

5

T/C3输入捕捉中断使能标志位:0,不操作;1,使能T/C1输入捕捉中断(配合状态寄存器的I位为1)

OCIE3A

4

T/C3输出比较A匹配中断使能标志位:0,不操作;1,使能T/C3输出比较A匹配中断

OCIE3B

3

T/C3输出比较B匹配中断使能标志位:0,不操作;1,使能T/C3输出比较B匹配中断

TOIE3

2

T/C3溢出中断使能:0,不操作;1,使能T/C3溢出中断

OCIE3C

1

T/C3输出比较C匹配中断使能标志位:0,不操作;1,使能T/C3输出比较C匹配中断

OCIE1C

1

T/C1输出比较C匹配中断使能标志位:0,不操作;1,使能T/C1输出比较C匹配中断

与定时器/计数器1相关的中断标志寄存器:

TIFR位

Bit

描述

ICF1

5

T/C1输入捕捉标志位:0,执行输入捕捉中断服务程序时ICF1自动清零;1,外部引脚ICP1出现捕捉事件时ICF1置位

OCF1A

4

T/C1输出比较A匹配标志位:0,执行强制输出比较匹配A中断服务程序,OCF1A自动清零;1,TCNT1与OCR1A匹配成功,OCR1A置位

OCF1B

3

T/C1输出比较B匹配标志位:0,执行强制输出比较匹配B中断服务程序,OCF1B自动清零;1,TCNT1与OCR1B匹配成功,OCR1B置位

TOV1

2

T/C1溢出标志。普通模式和CTC模式:0,T/C1未溢出;1,T/C1溢出。PWM模式:0,执行溢出中断服务程序时OCF1A自动清零;1,TOV1标志位置位。

与定时器/计数器1和3相关的扩展中断标志寄存器:

ETIFR位

Bit

描述

RES

6,7

保留,当写ETIFR时,这两位必须写入0

ICF3

5

T/C3输入捕捉标志位:0,执行输入捕捉中断服务程序时ICF3自动清零;1,外部引脚ICP3出现捕捉事件时ICF3置位

OCF3A

4

T/C3输出比较A匹配标志位:0,执行强制输出比较匹配A中断服务程序,OCF3A自动清零;1,TCNT3与OCR3A匹配成功,OCR3A置位

OCF3B

3

T/C3输出比较B匹配标志位:0,执行强制输出比较匹配B中断服务程序,OCF3B自动清零;1,TCNT3与OCR3B匹配成功,OCR3B置位

TOV3

2

T/C3溢出标志。普通模式和CTC模式:0,T/C3未溢出;1,T/C3溢出。PWM模式:0,执行溢出中断服务程序时OCF3B自动清零;1,TOV3标志位置位。

OCF3C

1

T/C3输出比较C匹配标志位:0,执行强制输出比较匹配C中断服务程序,OCF3C自动清零;1,TCNT3与OCR3C匹配成功,OCR3C置位

OCF1C

0

T/C1输出比较C匹配标志位:0,执行强制输出比较匹配C中断服务程序,OCF1C自动清零;1,TCNT1与OCR1C匹配成功,OCR1C置位

各模块的功能及控制:
a)预分频器:T/C1、T/C2与T/C3共用一个预分频模块,虽然设置的寄存器不同和外部时钟源提供引脚不同,但设置方式和功能相同。祥见T/C2的预分频器功能介绍。
b)计数器:主要部分是可编程的16位双向计数器。CPU通过临时寄存器TEMP间接访问TCNTnH和TCNTnL寄存器,使CPU可以在一个时钟周期内通过8位数据总线完成对16位计数器的读/写操作。根据模式不同,在每一个时钟到来,计数器进行清零、加1或减1操作。CPU写操作比计数器清零和其他操作的优先级都高。
c)输入捕捉单元:外部事件发生的触发信号由引脚ICPn输入,也可通过模拟比较器单元来实现。T/C的输入捕获外部事件,并为其赋时间标记以说明此时间的发生时刻。使用输入捕捉中断时,中断程序应尽可能早的读取ICRn寄存器,避免被新值覆盖,在任何输入捕捉工作模式下都不推荐在操作过程中改变TOP值。测量外部信号的占空比时,要求每次捕捉后都要改变触发沿,因此读取ICRn后必须尽快改变敏感的信号边沿,改变边沿后,ICFn必须清零(在对应的1/O位置写1)。若仅测量频率,且使用了中断,则不需对ICFn进行软件清零。
d)输出比较单元:16位比较器持续比较TCNTn和OCRnx的内容,一旦相等,比较器立即产生一个匹配信号,然后OCFnx在下一个定时器时钟置位。如果此时OCIEnx=1,将引发输出比较中断,中断执行时OCFnx标志自动清零,或者通过软件在其相应的I/O位置写入1也可以清零。根据WGMn3~WGMn0与COMnx1、GOMnx0的不同设置,波形发生器用匹配信号生成不同的波形。
e)比较匹配输出单元:比较匹配模式控制位COMnx1/0控制OCnx引脚的输出源,还确定下一次比较匹配发生时的输出比较OCnx的状态。只要COMnx1/0不全为零,波形发生器的输出比较功能就会重载OCnx的通用I/O口功能,但引脚的方向仍旧受控数据方向寄存器DDR,OCnx引脚输出有效信号之前,必须通过数据方向寄存器的DDR-OCnx位将此脚设置为输出。
16位定时器/计数器的工作模式:
a)普通模式:WGMn3~n0=0000,为最简单的工作模式。此模式下,计数器不停累加,计到最大值TOP=0xFFFF后简单地返回最小值0x0000,并重新开始。在TCNTn变为0的同一个定时器时钟内,TOVn置位,定时器中断例程能够自动清零TOVn。普通模式下,用户可以随时写入新的计数器值,输出比较单元可以用来产生中断。不推荐在普通模式下利用输出产生波形,因为会占用太多的CPU时间。
b)CTC模式:WGMn3~n0=0100/1100,OCRnA/ICRn定义了计数器的TOP值,当计数器的数值TCNTn等于OCRnA或ICRn时,计数器清零。这个模式可以很容易控制比较匹配输出的频率,简化了外部事件计数的操作。为了在CTC模式下得到波形输出,可以设置OCnA在每次比较匹配发生时改变逻辑电平,还要将其端口设置为输出。
此模式下的频率为:  ,  其中N表示预分频器的分频因子。
能产生的最大频率为定时器时钟频率的1/2。
利用OCFnA或ICFn标志可以在计数器值达到TOP时产生中断,在中断服务程序中可以更新TOP值。在中断服务程序中可以更新TOP值。在无预分频(或低预分频)时,将TOP更改为接近BOTTOM的数值时,有可能使写入的OCR2小于当前的TCNT2,这将丢失一次比较匹配,而且计数器要计数到最大值0xFF然后再从0x00开始计数到OCR2。为了避免这种情况,可使用快速PWM模式,该模式使用OCRnA定义TOP值WGMn3~n0=1111,此时OCRnA为双缓冲。
c)相位修正PWM模式:WGMn3~n0=0001/0010/0011/1010/1011,为用户提供了一个获得高精度的相位准确的PWM波形的方法,此模式基于双斜坡操作,。计数器重复地从BOTTOM计数到TOP,然后又从TOP倒退回到BOTTOM。此模式还分为两种比较输出模式,一种是普通比较输出模式,当计数器往TOP计数时发生了TCNTn与OCRnx匹配,OCnx将清零;而在计数器往BOTTOM计数时若发生了TCNTn与OCRnx匹配时,OCnx将置位。另一种是反向比较输出模式,当计数器往TOP计数时发生了TCNTn与OCRnx匹配,OCnx将置位;而在计数器往BOTTOM计数时若发生了TCNTn与OCRnx匹配时,OCnx将清零。双斜坡操作有对称性,十分适合于电机控制,但获得的最大频率比单斜坡要小。相位修正PWM模式的精度为8、9或10比特,或由ICRn或OCRnA定义最小分辨率为2比特(设为0x0003),最大分辨率为16比特(TOP)。
PWM分辨率位数可以计算:
工作于相位修正PWM模式时,比较单元可以在OCnx引脚输出PWM波形,设置COMnx1/COMnx0=10可以产生普通PWM,设置COMnx1/COMnx0=11可以产生反向PWM。同时还要将OCnx的数据方向DDR-OCnx设为输出。OCRnx和TCNTn比较匹配发生时,OCnx寄存器将产生相应的清零或置位操作,从而产生PWM波形。
此模式下的频率为:, 其中N表示预分频器的分频因子。
d)快速PWM模式:WGMn3~n0=0101/0110/0111/1110/1111,是一种单斜坡操作,可用来产生高频PWM波形。计数器从BOTTOM计数到TOP,然后立即回到BOTTOM重新开始。此模式还分为两种比较输出模式,一种是普通比较输出模式,当计数器发生了TCNTn与OCRnx匹配,OCnx将清零。另一种是反向比较输出模式,当计数器发生了TCNTn与OCRnx匹配,OCnx将置位。由于使用了单斜线方式,快速PWM模式的工作频率比使用双斜坡的的相位修正PWM模式高一倍,十分适合于功率调节、整流和DAC应用,频率高可以减小电感和电容的尺寸。快速PWM模式的精度为8、9或10比特,或由ICRn或OCRnA定义最小分辨率为2比特(设为0x0003),最大分辨率为16比特(TOP)。
PWM分辨率位数可以计算:
工作于相位修正PWM模式时,比较单元可以在OCnx引脚输出PWM波形,设置COMnx1/COMnx0=10可以产生普通PWM,设置COMnx1/COMnx0=11可以产生反向PWM。同时还要将OCnx的数据方向DDR-OCnx设为输出。OCRnx和TCNTn比较匹配发生时,OCnx寄存器将产生相应的清零或置位操作,从而产生PWM波形。

此模式下的频率为:, 其中N表示预分频器的分频因子。
e)相位和频率修正PWM模式:WGMn3~n0=1000/1001,可以产生高精度的相位和频率都准确的PWM波形,也属于双斜坡操作。计数器重复地从BOTTOM计到TOP,然后又从TOP倒退回到BOTTOM。此模式也分为两种比较输出模式,一种是普通比较输出模式,当计数器往TOP计数时发生了TCNTn与OCRnx匹配,OCnx将清零;而在计数器往BOTTOM计数时若发生了TCNTn与OCRnx匹配时,OCnx将置位。另一种是反向比较输出模式,当计数器往TOP计数时发生了TCNTn与OCRnx匹配,OCnx将置位;而在计数器往BOTTOM计数时若发生了TCNTn与OCRnx匹配时,OCnx将清零。相频修正PWM模式的分辨率可由ICRn或OCRnA定义,最小分辨率为2比特(设为0x0003),最大分辨率为16比特(TOP)。
PWM分辨率位数可以计算:
工作于相频修正PWM模式时,比较单元可以在OCnx引脚输出PWM波形,设置COMnx1/COMnx0=10可以产生普通PWM,设置COMnx1/COMnx0=11可以产生反向PWM。同时还要将OCnx的数据方向DDR-OCnx设为输出。OCRnx和TCNTn比较匹配发生时,OCnx寄存器将产生相应的清零或置位操作,从而产生PWM波形。
此模式下的频率为:, 其中N表示预分频器的分频因子。
输出比较调制器OCM:
ATmega128单片机具有输出比较调制器,调制器使用16位T/C1的输出比较单元及8位T/C2的输出比较单元作为输出。(ATmega103兼容模式下无效)
输出比较单元OC1C与OC2共用端口PB7,当其中之一使能,输出比较单元(OC1C与OC2)覆盖PORTB7寄存器功能;当OC1C与OC2同时使能时,调制器自动使能。当调制器使能后,调制类型(逻辑AND或OR)由PORTB7寄存器决定。由COMnx1、COMnx0设置的DDRB7控制端口方向。

14. 熔丝位:

熔丝位是AVR单片机比较独到的特性,每一型号的AVR单片机内部都有一些特定含义的熔丝位,其特性表现为多次擦写的EEPROM。用户通过配置这些熔丝位,可以固定地设置AVR单片机的一些特性、参数以及I/O配置,也包对片内运行代码的锁定(加密)。
ATmega128单片机手册中,对熔丝位使用Programmed(已编程)和Unprogrammed(未编程)定义熔丝位的状态,Unprogrammed表示熔丝状态为1,Programmed表示熔丝状态为0。配置熔丝位的过程实际上是使熔丝位从未编程(1)变为已编程(0)。
新的ATmega128单片机在使用前应首先查看熔丝位的配置情况,再根据实际需要进行配置,并将各个熔丝位的记录下来备案。在使用编程工具软件时,要弄清楚√表示熔丝位状态是0还是1。
ATmega128单片机加密后,仅仅是不能读取芯片内部Flash和EEPROM中的数据,熔丝位的状态仍然可以读取,但不能修改配置。芯片擦除命令是将Flash和EEPROM中的数据清除,并同时将两位锁定位状态配置成11,处于无锁定状态,但芯片擦除命令并不改变其他熔丝位的状态。
在芯片无锁定状态下,下载运行代码和数据,配置相关的熔丝位,最后配置芯片的锁定位。芯片被锁定后,如果发现熔丝位配置不对,必须使用芯片擦除命令,清除芯片中的数据,并解除锁定,然后重新下载运行代码和数据,修改配置相关的熔丝位,最后再次配置芯片的锁定位。
使用ISP串行方式下载编程时,应配置SPIEN熔丝位为0。芯片出厂时,SPIEN位的状态默认为0,表示允许ISP串行方式下载数据,如果该位处于未编程(1)状态,ISP串行方式下载数据被禁止,此时只能通过并行方式或JTAG编程方式才能将SPIEN的状态重新设置为0,开放ISP。通常情况下,应保持SPIEN的状态为0。注意,在硬件设计时,ISP接口与其并接的器件进行必要的隔离,如使用串接电阻或断路跳线等。
当系统中不使用JTAG接口下载编程或实时在线仿真调试,且JTAG接口的引脚需要作为I/O口使用时,必须设置熔丝位JTAGEN为1.芯片出厂时JTAGEN的状态默认为0,表示允许JTAG接口,此时外部引脚不能作为I/O口使用。当JTAGEN的状态设置为1后,JTAG接口被禁止,此时只能通过并行方式或ISP编程方式才能将JTAG重新设置为0,开放JTAG。
一般情况下,不要设置熔丝位把RESET引脚定义为I/O使用,这样会造成ISP的下载编程无法进行,因为在进入ISP方式编程前,需要将RESET引脚拉低,使芯片先进入复位状态。
需要注意ATmega128单片机熔丝位CKSEL的配置,出厂时状态默认为使用内部8MHz的RC振荡器作为系统的时钟源。如果使用了外部振荡器作为时钟源,要首先正确配置CKSEL熔丝位,否则整个系统的定时都会有问题。如果没有使用外部振荡器,却误把CKDEL熔丝位配置成使用外部振荡器,就无法用ISP编程方式对芯片操作了,只有取下芯片使用并行编程方式或JTAG方式来解救了。也可以尝试在芯片的晶振引脚上人为加入不同类型的振荡时钟信号,试着用ISP对芯片操作,一旦成功,就立即将CKDEL配置成使用内部8MHz的RC振荡器作为系统的时钟源。
ATmega128单片机重要熔丝位的定义:
1)M103C:配置ATmega128单片机是以ATmega103兼容方式运行还是以ATmega128本身的方式运行,出厂时M103C默认为0,即以ATmega103兼容方式运行。
2)CLKSEL3~CLKSEL0:用于选择系统的时钟源,有5种。出厂时,CLKSEL3~CLKSEL0和SUT1、SUT0分别是0001和10,即使用内部8MHz的RC振荡器,使用最长的启动延时,保证了无论外部振荡器是否工作,都可以进行最初的ISP下载。

熔丝位
CLKSEL3~CLKSEL0

工作频率范围
MHz

 

熔丝位
CLKSEL3~CLKSEL0

工作频率范围
MHz

0101

≤0.9

 

0111

3.0~8.0

0110

0.9~3.0

 

1000

8.0~12.0

3)JTAGEN:如果不使用JTAG接口,应置为1,即禁止JTAG,引脚用于I/O口。
4)SPIEN:SPI方式下载数据和程序允许,默认状态为0,及允许。
5)WDTON:看门狗定时器开启。默认为1,即禁止看门狗定时器的开启。如果该位设置为0,看门狗定时器就会始终打开,而不能被内部程序控制。
6)EESAVE:执行擦除命令时是否保留EEPROM中的内容,默认为1,即EEPROM中的内容同Flash中的内容一同擦除。如果设为0,对程序进行下载前的擦除命令只会对Flash代码区有效,而对EEPROM无效,对希望系统程序更新时保留EEPROM数据时很有效。
7)BOOTRST:决定芯片上电启动时,第一条指令的地址。默认状态为1,表示启动从0x0000开始执行;如果BOOTRST设为0,则启动时从BOOTLOADER区的起始地址处开始执行。BOOTLOADER区的大小由BOOTSZ1和BOOTSZ0决定,因此首地址也随之变化。
8)BOOTSZ1/BOOTSZ0:这两位确定了BOOTLOADER区的大小以及起始的首地址。默认状态为00,表示BOOTLOADER区为4069字,起始地址为0xF000。

BOOT
SZ1

BOOT
SZ2

Boot区大小

页数

应用Flash区

BootLoader Flash区

应用区
结束地址

Boot复位地址(BootLoader起始地址)

1

1

512字

4

$0000~$FDFF

$FE00~
$FFFF

$FDFF

$FE00

1

0

1024字

8

$0000~$FBFF

$FC00~
$FFFF

$FBFF

$FC00

0

1

2048字

16

$0000~$F7FF

$FB00~
$FFFF

$F7FF

$FB00

0

0

4069字

32

$0000~$EFFF

$F000~
$FFFF

$EFFF

$F000

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659