2018-10-14 AVR定时器---- 硬件结构,工作模式

https://blog.csdn.net/u013457167/article/details/43058309

=========================================================

arduino共有3个定时器,分别为timer0,timer1,timer2。

其中timer1是16位,timer0和timer2是8位。

arduino中delay语句与timer??关联,读时间与timer??关联,

arduino的自带库与timer??关联。


timer0共有4种工作模式,分别是:

----普通模式,匹配后清零计数器模式,快速PWM模式,相位矫正PWM模式

timer1共有5种工作模式,分别是:

----普通模式,匹配后清零计数器模式,快速PWM模式,相位矫正PWM模式,相位和频率矫正PWM模式

timer2共有4种工作模式,分别是:

----普通模式,匹配后清零计数器模式,快速PWM模式,相位矫正PWM模式


timer0 的硬件架构是 ??

timer1 的硬件架构是      

----频率(内部的或外部的)输入,

----频率分频,

----配置不同寄存器的不同位:

------------  (OCRnA),(OCRnB),

-----------  预设的计数器目标值(TCNTn),(TOP),(BOTTOM),(Fixed TOP Value),

------------  (OCRnA),(OCRnB),

------------  (TCCRnA),(TCCRnB),其中有WGM00,WGM01,WGM02,

------------ (OCnA),(OCnB)

------------- (TOVn),

timer2的硬件架构是??


==========================

timer号码                                预分频 

可能的选项  1    ()      ()     8     ()       32       64      128       256       ()      1024

timer0         1    ()      ()     8     ()       ---       64       -----       256       ()      1024 

timer1         1     ()     ()     8     ()       ---       64       -----       256       ()      1024

timer2         1     ()     ()      8     ()       32       64       128       256       ()      1024


=========================================================


Timer 1 是16位定时器, 一共有5种工作类型 ,15种工作模式

8位定时器 T0相对简单,

8位定时器 T2有异步工作模式,用于RTC应用   (可以利用溢出中断和比较匹配中断作定时功能) 




1普通模式 

WGM1=0 

 发生于TOP时 ,TOV1溢出中断

    1 采用内部计数时钟     用于 ICP捕捉输入场合---测量脉宽/红外解码 

        (捕捉输入功能可以工作在多种模式下,而不单单只是普通模式) 

    2 采用外部计数脉冲输入  用于 计数,测频 




  2 CTC模式 [比较匹配时清零定时器模式] 

WGM1=4,12

      1 用于输出50%占空比的方波信号 

      2 用于产生准确的连续定时信号 

      WGM1=4时, 最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断 

      WGM1=12时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 

      注:WGM=15时,也能实现从OC1A输出方波,而且具备双缓冲功能 

      计算公式: fOCn=fclk_IO/(2*N*(1+TOP)) 

     变量N 代表预分频因子(1、8、32,64、256,1024)。       



  3 快速PWM模式 

WGM1=5,6,7,14,15  

    单斜波计数,用于输出高频率的PWM信号(比双斜波的高一倍频率) 

    都有TOV1溢出中断,发生于TOP时 

    比较匹配后可以产生OCF1x比较匹配中断. 

       WGM1=5时, 最大值为0x00FF, 8位分辨率 

       WGM1=6时, 最大值为0x01FF, 9位分辨率 

       WGM1=7时, 最大值为0x03FF,10位分辨率  

      WGM1=14时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲) 

      WGM1=15时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波) 

      改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值 

    注意,即使OCR1A/B设为0x0000,也会输出一个定时器时钟周期的窄脉冲,而不是一直为低电平 

    计算公式:fPWM=fclk_IO/(N*(1+TOP)) 



  4 相位修正PWM模式

 WGM1=1,2,3,10,11 

    双斜波计数,用于输出高精度的,相位准确的,对称的PWM信号 

    都有TOV1溢出中断,但发生在BOOTOM时 

    比较匹配后可以产生OCF1x比较匹配中断. 

       WGM1=1时, 最大值为0x00FF, 8位分辨率 

       WGM1=2时, 最大值为0x01FF, 9位分辨率 

       WGM1=3时, 最大值为0x03FF,10位分辨率  

      WGM1=10时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲) 

      WGM1=11时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波) 

    改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值 

    可以输出0%~100%占空比的PWM信号 

    若要在T/C 运行时改变TOP 值,最好用相位与频率修正模式代替相位修正模式。若TOP保持不变,那么这两种工作模式实际没有区别 

    计算公式:fPWM=fclk_IO/(2*N*TOP) 



  5 相位与频率修正PWM模式 

WGM1=8,9  

    双斜波计数,用于输出高精度的、相位与频率都准确的PWM波形 

    都有TOV1溢出中断,但发生在BOOTOM时 

    比较匹配后可以产生OCF1x比较匹配中断. 

      WGM1=8时,最大值由ICF1设定, TOP时产生ICF1输入捕捉中断 (单缓冲) 

      WGM1=9时,最大值由OCR1A设定,TOP时产生OCF1A比较匹配中断(双缓冲,但OC1A将没有PWM能力,最多只能输出方波) 

    相频修正修正PWM 模式与相位修正PWM 模式的主要区别在于OCR1x 寄存器的更新时间 

    改变TOP值时必须保证新的TOP值不小于所有比较寄存器的数值 

    可以输出0%~100%占空比的PWM信号 

    使用固定TOP 值时最好使用ICR1 寄存器定义TOP。这样OCR1A 就可以用于在OC1A输出PWM 波。 

    但是,如果PWM 基频不断变化(通过改变TOP值), OCR1A的双缓冲特性使其更适合于这个应用。 

    计算公式:fPWM=fclk_IO/(2*N*TOP) 



时钟源 

    T/C 的时钟源可以有多种选择,由CS12:0控制,分别用于高速(低分频)/长时间(高分频)/外部计数场合 

    一个16位定时器,在8MHz系统时钟驱动下,可以实现uS级的高速定时和长达8秒的超长定时, 

    CS12 CS11 CS10 说明 

        0    0    0  无时钟源     (T/C 停止) 

        0    0    1  clkIO/1    ( 无预分频)  

        0    1    0  clkIO/8    ( 来自预分频器) 

        0    1    1  clkIO/64   ( 来自预分频器) 

        1    0    0  clkIO/256  ( 来自预分频器)  

        1    0    1  clkIO/1024 ( 来自预分频器) 

        1    1    0  外部T1 引脚,下降沿驱动 

        1    1    1  外部T1 引脚,上升沿驱动 



  分频器复位 

    在高预分频应用时,    通过复位预分频器来同步T/C 与程序运行,可以减少误差。 

    但是必须注意另一个T/C是否也在使用这一预分频器,因为预分频器复位将会影响所有与其连接的T/C。 



  外部时钟源 

    由于使用了引脚同步逻辑,建议外部时钟的最高频率不要大于fclk_IO/2.5。 

    外部时钟源不送入预分频器 

    选择使用外部时钟源后,即使T1引脚被定义为输出,其T1引脚上的逻辑信号电平变化仍然会驱动T/C1 计数,这个特性允许用户通过软件来控制计数。 



输入捕捉单元 

    T/C 的输入捕捉单元可用来捕获外部事件,并为其赋予时间标记以说明此时间的发生时刻。 

    外部事件发生的触发信号由引脚ICP1 输入,也可通过模拟比较器单元来实现。 

    时间标记可用来计算频率、占空比及信号的其它特征,以及为事件创建日志。 


    输入捕捉单元可以工作在多种工作模式下 

    (使用ICR1定义TOP的(WGM1=12,14,10,8)波形产生模式时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。) 

    在任何输入捕捉工作模式下都不推荐在操作过程中改变TOP值 


    当引脚ICP1 上的逻辑电平( 事件) 发生了变化,或模拟比较器输出ACO 电平发生了变化,并且这个电平变化为边沿检测器所证实,输入捕捉即被激发: 

    16位的TCNT1 数据被拷贝到输入捕捉寄存器ICR1,同时输入捕捉标志位ICF1 置位。 

    如果此时ICIE1 = 1,输入捕捉标志将产生输入捕捉中断。 

    中断执行时ICF1 自动清零,或者也可通过软件在其对应的I/O 位置写入逻辑"1” 清零。 


    注意,改变触发源有可能造成一次输入捕捉。因此在改变触发源后必须对输入捕捉标志执行一次清零操作以避免出现错误的结果 


    除去使用ICR1定义TOP的波形产生模式外, T/C中的噪声抑制器与边沿检测器总是使能的。 

    (其实就是永远使能??) 

    使能噪声抑制器后,在边沿检测器前会加入额外的逻辑电路并引入4个系统时钟周期的延迟. 

    噪声抑制器使用的是系统时钟,因而不受预分频器的影响 


    使用输入捕捉中断时,中断程序应尽可能早的读取ICR1 寄存器 

    如果处理器在下一次事件出现之前没有读取ICR1 的数据, ICR1 就会被新值覆盖,从而无法得到正确的捕捉结果。


    测量外部信号的占空比时要求每次捕捉后都要改变触发沿。 

    因此读取ICR1 后必须尽快改变敏感的信号边沿。改变边沿后,ICF1 必须由软件清零( 在对应的I/O 位置写"1”)。 

    若仅需测量频率,且使用了中断发生,则不需对ICF1 进行软件清零。



输出比较单元 

    16位比较器持续比较TCNT1与OCR1x的内容,一旦发现它们相等,比较器立即产生一个匹配信号。 

    然后OCF1x 在下一个定时器时钟置位。 

    如果此时OCIE1x = 1, OCF1x 置位将引发输出比较中断。 

    (就是说输出比较可以工作在所有工作模式下,但PWM模式下更好用,功能更强) 


    输出比较单元A(OCR1A) 的一个特质是定义T/C 的TOP 值( 即计数器的分辨率)。 

    TOP 值还用来定义通过波形发生器产生的波形的周期。 


    由于在任意模式下写TCNT1 都将在下一个定时器时钟周期里阻止比较匹配,在使用输出比较时改变TCNT1就会有风险,不管T/C是否在运行 

    这个特性可以用来将OCR1x初始化为与TCNT1 相同的数值而不触发中断。 

  强制输出比较(FOC) 

    工作于非PWM 模式时,可以通过对强制输出比较位FOC1x 写”1” 的方式来产生比较匹配。 

    强制比较匹配不会置位 OCF1x 标志,也不会重载/ 清零定时器, 

    但是OC1x 引脚将被更新,好象真的发生了比较匹配一样(COMx1:0 决定OC1x 是置位、清零,还是交替变化)。 



比较匹配输出单元 

    比较匹配模式控制位COM1x1:0 具有双重功能。 

    1 波形发生器利用COM1x1:0 来确定下一次比较匹配发生时的输出比较OC1x 状态; 

    2 COM1x1:0 还控制OC1x 引脚输出的来源。 

    只要COM1x1:0 不全为零,波形发生器的输出比较功能就会重载OC1x 的通用I/O 口功能。 

    但是OC1x 引脚的方向仍旧受控于数据方向寄存器 (DDR)。 

    从OC1x 引脚输出有效信号之前必须通过数据方向寄存器的DDR_OC1x 将此引脚设置为输出。 


    波形发生器利用COM1x1:0 的方法在普通模式、CTC 模式和PWM 模式下有所区别。 

    对于所有的模式,设置COM1x1:0=0 表明比较匹配发生时波形发生器不会操作OC1x寄存器 



访问16位寄存器 

    写16 位寄存器时,应先写入该寄存器的高位字节. 

        usigned int k; 

        k=0x1234; 

        TCNT1H=(unsigned char)(k>>8); 

        TCNT1L=(unsigned char) k; 

    而读16 位寄存器时应 先读取该寄存器的低位 字节. 

        usigned int k; 

        k=TCNT1L; 

        k+=(unsigned int)(TCNT1H<<8); 

    使用“C” 语言时,编译器会自动处理16位操作. 

        usigned int k; 

        k=0x1234; 

        TCNT=k; 

        k=TCNT1; 

*/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容