浅谈ATmega 16单片机的T/C0控制寄存器和T/C1控制寄存器

控制/MCU

1883人已加入

描述

  T/C0相关

  1.TCCR0——T/C0控制寄存器

  FOC0 WGM00 COM01 COM00 WGM01 CS02 CS01 CS00

  位7——FOC0:强制输出比较位。

  FOC0仅在WGM[01:00]设置为非PWM模式时才有效。为了保证与未来器件的兼容性,在使用PWM时,写TCCR0要对其清零。对其写1后,将立即进行比较操作。比较匹配输出引脚OC0将按照COM[01:00]的设置输出相应的电平。要注意FOC0类似一个锁存信号,真正对强制输出比较起作用的是COM[01:00]的设置。FOC0不会引发任何中断,也不会在利用OCR0作为TOP的CTC模式下对进行清零的操作。读FOC0的返回值永远为0。

控制寄存器

  位6,位3——WGM[01:00]:波形产生模式

  这两位控制的计数序列、计数器的最大值及产生的波形。T/C0支持的模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM模式,详见下表:

  模式 WGM01 WGM00 T/C的 TOP OCR0的 TOV0的

  (CTC0) (PWM0) 工作模式 更新时间 置位时刻

  0 0 0 普通 0xFF 立即更新 0xFF

  1 0 1 修正PWM 0xFF 0xFF 0x00

  2 1 0 CTC OCR0 立即更新 0xFF

  3 1 1 快速PWM 0xFF 0xFF 0xFF

  位5,位4——COM[01:00]:比较匹配输出模式

  这些位决定了比较匹配发生时输出引脚OC0的电平。如果COM[01:00]中的一位或全部都

  置位,OC0以比较匹配输出的方式进行工作。同时其方向控制位要设置为1以使能输出驱动器。

  当OC0连接到物理引脚上时,COM[01:00]的功能依赖于WGM[01:00]的设置。

  比较输出模式,非PWM模式

  COM01 COM00 说明

  0 0 正常的端口操作,不与OC0引脚物理连接

  0 1 比较匹配发生时OC0取反

  1 0 比较匹配发生时OC0清零

  1 1 比较匹配发生时OC0置位

  比较输出模式,快速PWM模式

  COM01 COM00 说明

  0 0 正常的端口操作,不与OC0引脚物理连接

  0 1 保留

  1 0 比较匹配发生时将清零OC0,计数到0XFF时OC0置位

  1 0 比较匹配发生时将置位OC0,计数到0XFF时OC0清零

  比较输出模式,相位修正PWM模式

  COM01 COM00 说明

  0 0 正常的端口操作,不与OC0引脚物理连接

  0 1 保留

  1 0 在向上计数发生比较匹配时将清零OC0,在向下计数发生比匹配OC0置位

  1 0 在向上计数发生比较匹配时将置位OC0,在向下计数发生比匹配OC0清零

  位[2:0]——CS[02:00]:时钟选择

  用于选择T/C0的时钟源。

  CS02 CS01 CS00 说明

  0 0 0 无时钟,T/C不工作

  0 0 1 clk/1(没有预分频)

  0 1 0 clk/8(来自预)

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

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

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

  1 1 0 时钟由T0引脚输入,下降沿触发

  1 1 1 时钟由T0引脚输入,上升沿触发

  2.TCNT0——T/C0计数寄存器

  3.OCR0——输出比较寄存器

  4.TIMSK——T/C中断屏蔽寄存器

  OCIE2 TOIE2 TICE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0

  位1——OCIE0:T/C0输出比较匹配中断使能位。当OCIE0和状态寄存器的全局中断使能位I都为”1“时,T/C0的输出比较匹配中断使能。当T/C0的比较匹配发生,即TIFR中的OCF0置位时,产生输出比较匹配中断。

  位0——TOIE0:T/C0溢出中断使能。当TOIE0和状态寄存器的全局中断使能位I都为”1”时,T/C0的溢出中断使能。当T/C0发生计数溢出,即TIFR中的TOV0位置位时,产生溢出中断。

  5.TIFR——T/C中断标志寄存器

  OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0

  位1——OCF0:T/C0输出比较标志位0。当T/C0与OCR0(输出比较寄存器0)的值匹配时,OCF0置位。此位在中断服务程序里硬件清零,也可以对其写1来清零。当SREG中的位I、OCIE0(T/C0比较匹配中断使能)和OCF0都置位时,中断服务程序得到执行。

  位0——TOV0:T/C0溢出标志。当T/C0溢出时,TOV0置位。执行相应的中断服务程序时此位硬件清零。此外,TOV0也可以通过写1来清零。当SREG中的位I、TOIE0(T/C0溢出中断使能)和TOV0都置位时,中断服务程序得到执行。注意:在相位修正PWM模式中,当T/C0在0x00改变记数方向时,TOV0置位。

  6.SFIOR——特殊功能寄存器

  ADTS2 ADTS1 ADTS0 —— ACME PUD PSR2 PSR10

  位0——PSR0:T/C1与T/C0的预分频器复位。PSR10置位时T/C1与T/C0的预分频器复位,操作完成后这一位由硬件清零。写入世时不会引起任何操作。T/C1与T/C0共用这一预分频器,且预分频器复位对两个定时器都有影响。读该位总是返回0。

  T/C1相关寄存器

  1.TCCR1A——T/C1控制寄存器

  COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10

  位 7:6–COM1A[1:0]:通道A的比较输出模式

  位 5:4–COM1B[1:0]:通道B的比较输出模式

  比较输出模式,非PWM模式

  COM1A1 COM1A0 说明

  COM1B1 COM1B0

  0 0 正常的端口操作,不与OC1A/OC1B引脚物理连接

  0 1 比较匹配发生时OC0取反

  1 0 比较匹配发生时OC0清零

  1 1 比较匹配发生时OC0置位

  比较输出模式,快速PWM模式

  COM1A1 COM1A0 说明

  COM1B1 COM1B0

  0 0 正常的端口操作,不与OC1A/OC1B引脚物理连接

  0 1 WGM[3:0]=15:比较匹配时OC1A取反,OC1B不占用物理引脚。

  WGM[3:0]为其它值时为普通端口操作,非OC1A/OC1B功能

  1 0 比较匹配发生时将清零OC1A/OC1B,计数到0XFF时OC1A/OC1B置位

  1 1 比较匹配发生时将置位OC1A/OC1B,计数到0XFF时OC1A/OC1B清零

  比较输出模式,相位修正PWM模式及相频修正PWM模式

  COM01 COM00 说明

  0 0 正常的端口操作,不与OC1A/OC1B引脚物理连接

  0 1 WGM13:0=9或14:比较匹配时OC1A取反,OC1B不占用物理引脚。

  WGM13:0为其它值时为普通端口操作,非OC1A/OC1B功能

  1 0 升序记数时比较匹配将清零OC1A/OC1B,

  降序记数时比较匹配将置位OC1A/OC1B

  1 1 升序记数时比较匹配将置位OC1A/OC1B,

  降序记数时比较匹配将清零OC1A/OC1B

  位3–FOC1A:通道A强制输出比较

  位2–FOC1B:通道B强制输出比较

  FOC1A/FOC1B只有当WGM[13:10]指定为非PWM模式时被激活。为与未来器件兼容,工作在PWM模式下对TCCR1A写入时,这两位必须清零。当FOC1A/FOC1B位置1,立即强制波形产生单元进行比较匹配。COM1X[1:0]的设置改变OC1A/OC1B的输出。注意FOC1A/FOC1B位作为选通信号。COM1x1:0位的值决定强制比较的效果。

  在CTC模式下使用OCR1A作为TOP值,FOC1A/FOC1B选通即不会产生中断也不会清除定时器。

  FOC1A/FOC1B位总是读为0。

  位1:0–WGM1[1:0]:波形发生模式

  这两位与位于TCCR1B寄存器的WGM[13:12]相结合,用于控制计数器的计数序列—计数器计数的上限值和确定波形发生器的工作模式。T/C支持的工作模式有:普通模式(计数器),比较匹配时清零定时器(CTC)模式,及三种脉宽调制(PWM)模式。

  模式 WGM13 WGM12 WGM11 WGM10 定时器/计数器 上限值 OCR1x更 OV1置位

  (CTC1) (PWM11) (PWM10) 工作模式限值 TOP 新时刻T 时刻

  0 0 0 0 0 普通模式 0xFFFF 立即更新 0xFFFF

  1 0 0 0 1 8位相位修正PWM 0x00FF TOP 0x0000

  2 0 0 1 0 9位相位修正PWM 0x01FF TOP 0x0000

  3 0 0 1 1 10位相位修正PWM 0x03FF TOP 0x0000

  4 0 1 0 0 CTC OCR1A 立即更新 0xFFFF

  5 0 1 0 1 8位快速PWM 0x00FF TOP TOP

  6 0 1 1 0 9位快速PWM 0x01FF TOP TOP

  7 0 1 1 1 10位快速PWM 0x03FF TOP TOP

  8 1 0 0 0 相频修正PWM ICR1 0 0X0000

  9 1 0 0 1 相频修正PWM OCR1A 0 0X0000

  10 1 0 1 0 相位修正PWM ICR1 TOP 0X0000

  11 1 0 1 1 相位修正PWM OCR1A TOP 0X0000

  12 1 1 0 0 CTC ICR1 立即更新 0XFFFF

  13 1 1 0 1 保留 – – –

  14 1 1 1 0 快速PWM ICR1 TOP TOP

  15 1 1 1 1 快速PWM OCR1A TOP TOP

  2.TCCR1B——T/C1控制寄存器

  ICNC1 ICES1 —— WGM13 WGM12 CS11 CS10

  位7——ICNC1:输入捕捉噪声抑制使能位。

  置位ICNC1将使能输入捕捉噪声抑制功能。此时外部引脚ICP1的输入被滤波。其作用是从ICP1引脚连续进行4次采样。如果4个采样值都相等,那么信号送入边沿检测器。因此使能该功能使得输入捕捉被延迟了4个时钟周期。

  位6——ICES1:输入捕捉触发沿选择

  该位选择使用ICP1上的哪个边沿触发捕获事件。ICES为“0”选择的是下降沿触发输入捕捉;ICES1为”1”选择的是逻辑电平的上升沿触发输入捕捉。按照ICES1的设置捕获到一个事件后,计数器的数值被复制到ICR1寄存器。捕获事件还会置为ICF1。如果此时中断使能,输入捕捉事件即被触发。当ICR1用作TOP值(见TCCR1A与TCCR1B寄存器中WGM[13:10]位的描述)时,ICP1与输入捕捉功能脱开,从而输入捕捉功能被禁用。

  位5——保留位

  该位保留。为保证与将来器件的兼容性,写TCCR1B时,该位必须写入“0”。

  位4:3——WGM1[3:2]:波形发生模式

  位2:0——CS1[2:0]:时钟选择

  用于选择T/C1的时钟源。

  CS12 CS11 CS10 说明

  0 0 0 无时钟,T/C1不工作

  0 0 1 clk/1(没有预分频)

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

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

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

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

  1 1 0 时钟由T1引脚输入,下降沿触发

  1 1 1 时钟由T1引脚输入,上升沿触发

  3.TCNT1——T/C1计数寄存器

  4.OCR1A、OCR1B——T/C1输出比较寄存器

  5.ICR1——T/C1输入捕获寄存器

  6.TIMSK——T/C中断屏蔽寄存器

  OCIE2 TOIE2 TICE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0

  位 5——TICIE1:T/C1输入捕捉中断使能。

  当该位被设为”1”,且状态寄存器中的I位被设为“1”时,T/C1的输入捕捉中断使能。一旦TIFR的ICF1置位,CPU即开始执行T/C1输入捕捉中断服务程序。

  位4——OCIE1A:输出比较A匹配中断使能

  当该位被设为”1”,且状态寄存器中的I位被设为“1”时,T/C1的输出比较A匹配中断使能。一旦TIFR上的OCF1A置位,CPU即开始执行T/C1输出比较A匹配中断服务程序。

  位3——OCIE1B:T/C1输出比较B匹配中断使能。

  当该位被设为”1”,且状态寄存器中的I位被设为“1”时,使能T/C1的输出比较B匹配中断使能。一旦TIFR上的OCF1B置位,CPU即开始执行T/C1输出比较B匹配中断服务程序。

  位 2——TOIE1:T/C1溢出中断使能

  当该位被设为”1”,且状态寄存器中的I位被设为”1”时,T/C1的溢出中断使能。一旦TIFR上的TOV1置位,CPU即开始执行T/C1溢出中断服务程序。

  7.TIFR——T/C中断标志寄存器

  OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0

  位 5——ICF1:T/C1输入捕捉标志位

  外部引脚ICP1出现捕捉事件时ICF1置位。此外,当ICR1作为计数器的TOP值时,一旦计数器值达到TOP,ICF1也置位。执行输入捕捉中断服务程序时ICF1自动清零。也可以对其写入逻辑“1”来清除该标志位。

  位 4——OCF1A:T/C1输出比较A匹配标志位

  当TCNT1与OCR1A匹配成功时,该位被设为”1”。强制输出比较(FOC1A)不会置位OCF1A。执行强制输出比较匹配A中断服务程序时OCF1A自动清零。也可以对其写入逻辑“1”来清除该标志位。

  位3——OCF1B:T/C1输出比较B匹配标志位

  当TCNT1与OCR1B匹配成功时,该位被设为”1”。强制输出比较(FOC1B)不会置位OCF1B。执行强制输出比较匹配B中断服务程序时OCF1B自动清零。也可以对其写入逻辑“1”来清除该标志位。

  位2——TOV1:T/C1溢出标志

  该位的设置与T/C1的工作方式有关。工作于普通模式和CTC模式时,T/C1溢出时TOV1置位。

  T/C2相关寄存器

  1.TCCR2——T/C2控制寄存器

  FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20

  位7——FOC2:强制输出比较

  FOC2仅在WGM2[1:0]指明非PWM模式时才有效。但是,为了保证与未来器件的兼容性,使用PWM时,写TCCR2要对其清零。写1后,波形发生器将立即进行比较操作。比较匹配输出引脚OC2将按照COM2[1:0]的设置输出相应的电平。要注意FOC2类似一个锁存信号,真正对强制输出比较起作用的是COM2[1:0]的设置。FOC2不会引发任何中断,也不会在使用OCR2作为TOP的CTC模式下对定时器进行清零。读FOC2的返回值永远为0。

  位6,位3——WGM2[1:0]:波形产生模式

  这2位控制计数器的计数序列,计数器最大值TOP的来源,以及产生何种波形。T/C支持的模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM模式。

  模式 WGM21 WGM20 T/C的 TOP OCR2的 TOV2的

  (CTC2) (PWM2) 工作模式 更新时间 置位时刻

  0 0 0 普通 0xFF 立即更新 0xFF

  1 0 1 相位修正PWM 0xFF 0xFF 0x00

  2 1 0 CTC OCR2 立即更新 0xFF

  3 1 1 快速PWM 0xFF 0xFF 0xFF

  位5:4——COM2[1:0]:比较匹配输出模式

  这些位决定了比较匹配发生时输出引脚OC0的电平。如果COM2[1:0]中的一位或全部都置位,OC0以比较匹配输出的方式进行工作。同时其方向控制位要设置为1以使能输出驱动。当OC2连接到物理引脚上时,COM2[1:0]的功能依赖于WGM2[1:0]的设置。

  比较输出模式,非PWM模式

  COM21 COM20 说明

  0 0 正常的端口操作,不与OC2引脚物理连接

  0 1 比较匹配发生时OC2取反

  1 0 比较匹配发生时OC2清零

  1 1 比较匹配发生时OC2置位

  比较输出模式,快速PWM模式

  COM21 COM20 说明

  0 0 正常的端口操作,不与OC2引脚物理连接

  0 1 保留

  1 0 比较匹配发生时将清零OC2,计数到0XFF时OC2置位

  1 0 比较匹配发生时将置位OC2,计数到0XFF时OC2清零

  比较输出模式,相位修正PWM模式

  COM21 COM20 说明

  0 0 正常的端口操作,不与OC2引脚物理连接

  0 1 保留

  1 0 在向上计数发生比较匹配时将清零OC2,在向下计数发生比匹配OC2置位

  1 0 在向上计数发生比较匹配时将置位OC2,在向下计数发生比匹配OC2清零

  位[2:0]——CS[02:00]:时钟选择

  用于选择T/C0的时钟源。

  CS22 CS21 CS20 说明

  0 0 0 无时钟,T/C2不工作

  0 0 1 clk/1(没有预分频)

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

  0 1 1 clk/32(来自预分频器)

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

  1 0 1 clk/128(来自预分频器)

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

  1 1 1 clk/1024(来自预分频器)

  2.TCNT2——T/C2计数寄存器

  3.OCR2——输出比较寄存器

  4.TIMSK——T/C中断屏蔽寄存器

  OCIE2 TOIE2 TICE1 OCIE1A OCIE1B TOIE1 OCIE0 TOIE0

  位7——OCIE2:T/C2输出比较匹配中断使能位。当OCIE2和状态寄存器的全局中断使能位I都为”1“时,T/C2的输出比较匹配中断使能。当T/C2的比较匹配发生,即TIFR中的OCF2置位时,产生输出比较匹配中断。

  位6——TOIE2:T/C2溢出中断使能。当TOIE0和状态寄存器的全局中断使能位I都为”1”时,T/C2的溢出中断使能。当T/C2发生计数溢出,即TIFR中的TOV2位置位时,产生溢出中断。

  5.TIFR——T/C中断标志寄存器

  OCF2 TOV2 ICF1 OCF1A OCF1B TOV1 OCF0 TOV0

  位7——OCF2:T/C2输出比较标志位。当T/C2与OCR2(输出比较寄存器)的值匹配时,OCF2置位。此位在中断服务程序里硬件清零,也可以对其写1来清零。当SREG中的位I、OCIE2(T/C2比较匹配中断使能)和OCF2都置位时,中断服务程序得到执行。

  位6——TOV2:T/C2溢出标志。当T/C2溢出时,TOV2置位。执行相应的中断服务程序时此位硬件清零。此外,TOV2也可以通过写1来清零。当SREG中的位I、TOIE2(T/C2溢出中断使能)和TOV2都置位时,中断服务程序得到执行。注意:在相位修正PWM模式中,当T/C2在0x00改变记数方向时,TOV2置位。

  6.SFIOR——特殊功能寄存器

  ADTS2 ADTS1 ADTS0 —— ACME PUD PSR2 PSR10

  位1——PSR2:T/C2的预分频器复位。PSR2置位时T/C2的预分频器复位,操作完成后这一位由硬件清零,写入时不会引起任何操作。读该位总是返回0。

  7.ASSR——异步状态寄存器

  —— —— —— —— AS2 TCN2UB OCR2UB TCR2UB

  位3——AS2:异步T/C2

  AS2为”0”时T/C2由I/O时钟clk驱动;AS2为“1”时T/C2由连接到TOSC1引脚的驱动。改变AS2有可能破坏TCNT2、OCR2与TCCR2的内容。

  位2——TCN2UB:T/C2更新中

  T/C2工作于异步模式时,写TCNT2将引起TCN2UB置位。当TCNT2从暂存寄存器更新完毕后TCN2UB由硬件清零。TCN2UB为0表明TCNT2可以写入新值了。

  位1——OCR2UB:输出比较寄存器2更新中

  T/C2工作于异步模式时,写OCR2将引起OCR2UB置位。当OCR2从暂存寄存器更新完毕后OCR2UB由硬件清零。OCR2UB为0表明OCR2可以写入新值了。

  位 0——TCR2UB:T/C2控制寄存器更新中

  T/C2工作于异步模式时,写TCCR2将引起TCR2UB置位。当TCCR2从暂存寄存器更新完毕后TCR2UB由硬件清零。TCR2UB为0表明TCCR2可以写入新值了。如果在更新忙标志置位的时候写上述任何一个寄存器都将引起数据的破坏,并引发不必要的中断。读取TCNT2、OCR2和TCCR2的机制是不同的。读取TCNT2得到的是实际的值,而

  OCR2和TCCR2则是从暂存寄存器中读取的。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分