|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
译文:mega128(L)AVR单片机16位定时器1 |
作者:青青子木 栏目:单片机 |
16位定时计数器 1. 16位定时、计数器(定时计数器1、定时计数器3) 16位定时计数器可以用于精确事件定时,波形发生,信号时序测量的方面。它的主要特性 是: l 真16位设计(也就是可以16PWM) l 三个独立的输出比较单元 l 双缓冲的输出比较寄存器 l 一个输入捕捉单元 l 输入捕捉具有噪声滤除功能 l 自动重装入功能 l PWM功能 l 可变的PWM周期 l 频率发生器 l 外部事件计数器 l 10个独立中断源 (TOV1,OCF1A,OCF1B,OCF1C,ICF1,TOV3,OCF3A,OCF3B,OCF3C,ICF3) 1. 1在ATMEGA103兼容模式中的约束 注意在ATMEGA103兼容模式中只有一个16位定时计数器有效(Timer1/Counter1)。另外还要 注意,在这个模式中Timer1/Counter1只有两个比较寄存器(A、B) 2. 简介 在这章中所提及的寄存器绝大部分拥有相同的结构。通过改变后面的字母n可以选择不同的 定时计数器,通过改变字母x可以改变不同的输出比较单元通道。在程序中必须指明具体的 寄存器或位。例如,TCNT1就是访问定时计数器的内容,依次类推。 图46给出一个16位定时计数器的简单框图,具体IO位置见图2, 2. 1寄存器 定时计数器(TCNTn),输出比较寄存器(OCRnA/B/C)和输入捕捉寄存器(ICRn)都是 16位寄存器,访问16位寄存器必须采用一些特殊的步骤。这些过程将在“访问16位寄存器” 一节介绍。对于控制寄存器(TCCRnA//B/C)这些8位寄存器,没有CPU访问限制。所有的中 断请求都在定时中断标志寄存器(TIFR)和扩展定时中断标志寄存器(ETIFR)中标出。每个 中断也都可以通过定时中断屏蔽寄存器(TIMSK)和扩展定时中断屏蔽寄存器(ETIMSK)分别予 以屏蔽。由于TIMSK和ETIMSK通其他的定时器单元共享,所有没有列出它的具体性能。 定时/计数器可以使用经由分频器的内部时钟,也可以使用由Tn引进的外部时钟。时钟选 择逻辑单元决定那一种时钟和那种边沿用于定时/计数器。如果没有时钟源选定,定时/计数 器处于停止状态。时钟选择逻辑的输出指定为定时器时钟(CLKTn)。 具有双缓冲的输出比较寄存器(OCRnA/B/C/)在所有时间里一直与定时/计数器的内容比 较。比较内容可以用波形发生器在比较输出引脚(OcnA/B/C)上产生PWM或可变频率输出。 具体参见“输出比较单元”一节。输出比较相同事件还可以使比较相同标志(OCFnA/B/C) 置位,它可以生成输出比较中断请求。 通过外部输入捕捉引脚(ICPn)和模拟比较器所触发(边沿触发)的事件,输入捕捉寄 存器可以捕捉定时/计数器的内容。输入捕捉单元含有数字滤波器可以减小捕捉到噪声尖峰 的机会。 定时/计数器的最大值可以有许多方法设定,如通过OCRnA寄存器和ICRnA寄存器,也可以 设定成一个固定值。如果在PWM模式中使用OCRnA作为最大值,OCRnA就不能用在生成PWM输出 中。由于这种双缓冲的方式,可让最大值在运行中随时改变。如果只要固定的最大值,可以 使用ICRnA代替。以使OCRnA可以用于PWM输出。 2. 2 常用定义 下面的定义广泛地应用于整个文档中 底 定时/计数器为0000H称之为底 最大 定时/计数器为0xfff(65535)是称之为最大 顶 定时/计数器设定最大值为顶,它可以是固定值如0x00ff,0x001f,0x003f,也可 以由寄存器OCRnA、ICRnA设定。具体以使用模式而定。 2.3 兼容性 此16定时/计数器对于以前的AVR1的16定时/计数器,进行了改进和提高。它完全兼容以前的 特性: l 所有16定时/计数器包括的寄存器和中断,包括定时中断寄存器 l 所有16定时/计数器中寄存器中的位地址,包括定时中断寄存器 l 中断向量 下面的位发生了名称改变,但功能还是一样的。 PWMn0改为WGMn0 PWMn1改为WGMn1 CTCn 改为WGMn2 下面是增加的寄存器 定时/计数控制寄存器 C(RCCRnC) 输出比较寄存器 C(OCRnCH、OCRnCL合成OCRnC) 下面是增加的位 COM1C1:0 位添加至TCCRnA FOCnA ,FOCnB和FOCnC添加到新的寄存器C 增加了有关C的输出比较中断标志和屏蔽单元。 16位定时/计数器的性能提高,在一些特别的应用可能影响兼容性。 3. 1 16位寄存器的访问 AVRCPU可以通过8位数据总线访问象TCNTn、OCRnA/B/BC和ICRn这样的16位寄存器。这些寄存 器必须以两次字节访问来读写操作。每个16位寄存器都有一个8位暂寄存器,它用于高位地 址的访问。同样,暂存寄存器由定时单元中的所有16定时器共享。对寄存器低8位访问会触 发整个16位寄存器的读写操作。当CPU写16位寄存器的低位时,暂存寄存器中内容和要写到 低位的数据在同一时钟写如16位寄存器。CPU读16位寄存器的低位时,16位寄存器的高位内 容会与低位数据同一时钟复制到暂存寄存器中。 不是所有的16位寄存器访问都要借助暂存寄存器,16位寄存器OCRnA/B/C。 对于16位写操作,高字节必须在低字节前写入;对于16位读操作,低字节必须在高字节前读 出。 下面的例子说明如何访问16位寄存器,假设期间没有中断修改暂存寄存器,同样的原则也可 用于OCRnA/B/C、ICRn等16位寄存器的访问。注意使用“C”语言时的访问方法。 Assembly Code Examples(1) ... ; Set TCNTn to 0x01FF ldi r17,0x01 ldi r16,0xFF out TCNTnH,r17 out TCNTnL,r16 ; Read TCNTn into r17:r16 in r16,TCNTnL in r17,TCNTnH ... C Code Examples(1) unsigned int i; ... /* Set TCNTn to 0x01FF */ TCNTn = 0x1FF; /* Read TCNTn into i */ i = TCNTn; 在汇编的例子中TCNTn的返回值在r16:r17中,要特别注意的是,访问16位寄存器是一个自 动连续的操作。在两条指令间有中断发生,并且这个中断也要访问16位寄存器导致暂存寄存 器内容改变的话。那这次访问的结果就可能时错误的。所在进行16位地址访问的时候,要关 闭中断。 下面的例子指出如何自动读取TCNTn,同样的方法也适用于OCRnA//B/C、ICRn。 Assembly Code Example(1) TIM16_ReadTCNTn: ; Save GLOBAL interrupt flag in r18,SREG ; Disable interrupts cli ; Read TCNTn into r17:r16 in r16,TCNTnL in r17,TCNTnH ; Restore GLOBAL interrupt flag out SREG,r18 ret C Code Example(1) unsigned int TIM16_ReadTCNTn( void ) { unsigned CHAR sreg; unsigned int i; /* Save GLOBAL interrupt flag */ sreg = SREG; /* Disable interrupts */ _CLI(); /* Read TCNTn into i */ i = TCNTn; /* Restore GLOBAL interrupt flag */ SREG = sreg; return i; } 下面例子说明如何自动写TCNTn寄存器,方法也适用于OCRnA/B/C、ICRn Assembly Code Example(1) TIM16_WriteTCNTn: ; Save GLOBAL interrupt flag in r18,SREG ; Disable interrupts cli ; Set TCNTn to r17:r16 out TCNTnH,r17 out TCNTnL,r16 ; Restore GLOBAL interrupt flag out SREG,r18 ret C Code Example(1) void TIM16_WriteTCNTn( unsigned int i ) { unsigned CHAR sreg; unsigned int i; /* Save GLOBAL interrupt flag */ sreg = SREG; /* Disable interrupts */ _CLI(); /* Set TCNTn to i */ TCNTn = i; /* Restore GLOBAL interrupt flag */ SREG = sreg; 3.2 高字节暂存寄存器的重复使用 如果写多于一个的16位寄存器,它们的高位内容相同。那么高位只需要写一次。 4. 定时/计数器的时钟源 定时/计数器可以被内部或外部的时钟源驱动,时钟控制逻辑可以选择时钟源的类型,它由 定时/计数器 控制寄存器B中的时钟选择位(CSn2:0)决定。关于时钟源和分频器可参看 “定时/计数器1,定时/计数器3的时钟源与预分频器”一节。 5. 计数器单元 16位定时/计数器的主要部分是一个可编程16位加/减计数器单元。图47给出此计数器的框图 和周围的控制环境。 图 47 『图片请对照ATMEL的datasheet(参见doc2467.pdf)』 |
2楼: | >>参与讨论 |
作者: dragontao 于 2003/3/19 21:00:00 发布:
GOOD 很好的技术资料 |
3楼: | >>参与讨论 |
作者: 双龙老耿 于 2003/3/19 21:37:00 发布:
很好,整个ATMEGA128什么时候全译好! http://www.sl.ccom.cn |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |