松翰单片机--SN8F5702学习笔记(六)TIMER2

 定时器2是一个16位向上计数定时器,它有几个可选的扩展:指定的重载值,比较输出(PWM)和捕获功能。定时器2由专用的16位组成计数器/定时器和四个16位捕获/比较模块。 每个捕获/比较模块都有它启用时自己关联的I / O.每个捕获/比较模块可以配置为独立运行在3种模式中的一种:比较,捕获与上升沿或捕获注册写。

松翰单片机--SN8F5702学习笔记(六)TIMER2_第1张图片
1、Timer 2 向上计数控制

 定时器2的时钟源有三种工作模式:指定fcpu时钟(fcpu / 12和fcpu / 24),使用停止控制和外部时钟输入指定fcpu时钟。 下表对这些进行了分类三种操作模式及其相关寄存器(T2I1,T2I0和T2PS)。 一旦计时器的计数器是溢出(从0xFFFF到0x0000计数),TF2将立即发出,可以读/写通过固件。 定时器2中断功能由ET2控制。

松翰单片机--SN8F5702学习笔记(六)TIMER2_第2张图片

T2I1 T2I0 T2PS Timer 2 时钟源
0 0 x 关闭Timer2
0 1 0 fcpu/12
0 1 1 fcpu/24
1 1 0 fcpu/12(T2引脚为低电平时停止计数,T2为高电平时恢复)
1 1 1 fcpu/24(T2引脚为低电平时停止计数,T2为高电平时恢复)
1 0 x T2引脚上升沿(T2引脚时钟速率≤0.5* fcpu)

2、指定Timer2重载值
 指定的重载值是一个可选功能,它可以通过溢出或重新加载定时器2计数器外部控制引脚。如果选择了溢出重载,定时器2将CRCH / CRCL值复制到其计数器(TH2 / TL2)自动溢出信号。 最终,定时器2将从CRCH / CRCL重复计数值为0xFFFF。另一方面,外部引脚T2RL的下降沿(与P2.0共用)也可以选择为a重载信号。 在这种情况下,如果T2RL,定时器2通常将其计数器从0x0000计数到0xFFFF引脚保持稳定,但计数器值将随时由CRCH / CRCL值替换为只要T2RL引脚有下降信号。 随后,定时器2继续其计数程序如果启用了中断功能,将发出CRCH / CRCL值和外部重载标志(TF2RL)(ET2RL和ET2均已设定)。 外部重载中断向量与定时器2中断共享矢量并通过固件识别事件。

松翰单片机--SN8F5702学习笔记(六)TIMER2_第3张图片
3、比较输出

 定时器2最多有四组比较输出。 每组(CRC / CC1 / CC2 / CC3)独立地将其值与定时器2计数器(TH2 / TL2)进行比较,并将T2COM0上的比较结果输出到T2COM3引脚(与P00,P01,P03和P0.4共用)。 比较结果有两种输出方式:直接输出和间接输出。

 直接方法是,如果CRC / CC1 / CC2 / CC3寄存器低于定时器2计数器,则映射引脚输出低电平状态;如果寄存器值等于/大于定时器2计数器,则输出高电平状态。 因此,输出状态在交叉点处改变两次。 由于CRC / CC1 / CC2 / CC3寄存器等于定时器2计数器,因此发出TF2C0 / TF2C1 / TF2C2 / TF2C3标志,可以通过固件进行读/写。 比较中断功能由ET2C0 / ET2C1 / ET2C2 / ET2C3控制。
松翰单片机--SN8F5702学习笔记(六)TIMER2_第4张图片

松翰单片机--SN8F5702学习笔记(六)TIMER2_第5张图片
 相反,间接输出方法是保持映射引脚先前输出设置的事件,直到定时器2计数器超过CRC / CC1 / CC2 / CC3寄存器值。 在此模式下,输出信号的转换可由软件配置。 换句话说,当TH2 / TL2等于CRC寄存器时,P0.0寄存器位会影响T2COM0 / P0.0引脚。 定时器2溢出不会导致输出更改。
松翰单片机--SN8F5702学习笔记(六)TIMER2_第6张图片
松翰单片机--SN8F5702学习笔记(六)TIMER2_第7张图片

4、捕获功能
 捕捉功能类似于秒表的分割/圈数按钮。 当定时器2计数器(TH2 / TL2)例行计数时,分离事件记录CRC / CC1 / CC2 / CC3寄存器中的计数器值。

松翰单片机--SN8F5702学习笔记(六)TIMER2_第8张图片
 拆分事件可以来自硬件或软件。 T2CC0引脚可触发硬件分裂事件,该事件将TH2 / TL2值复制到CRCH / CRCL寄存器,而T2CC1,T2CC2和T2CC3分别控制CC1至CC3寄存器。

松翰单片机--SN8F5702学习笔记(六)TIMER2_第9张图片

通过将任意值写入CRCL / CCL1 / CCL2 / CCL3寄存器来触发软件拆分事件。 在对这些寄存器执行写入指令时,当前的TH2 / TL2值将记录在配对的寄存器中。

松翰单片机--SN8F5702学习笔记(六)TIMER2_第10张图片

5、寄存器

寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
T2CON T2PS I3FR - T2R1 T2R0 T2CM T2I1 T2I0
CCEN COCA31 COCA30 COCA21 COCA20 COCA11 COCA10 COCA01 COCA00
TH2 TH27 TH26 TH25 TH24 TH23 TH22 TH21 TH20
TL2 TL27 TL26 TL25 TL24 TL23 TL22 TL21 TL20
CRCH CRCH7 CRCH6 CRCH5 CRCH4 CRCH3 CRCH2 CRCH1 CRCH0
CRCL CRCL7 CRCL6 CRCL5 CRCL4 CRCL3 CRCL2 CRCL1 CRCL0
CCH3 CCH37 CCH36 CCH35 CCH34 CCH33 CCH32 CCH31 CCH30
CCL3 CCL37 CCL36 CCL35 CCL34 CCL33 CCL32 CCL31 CCL30
CCH2 CCH27 CCH26 CCH25 CCH24 CCH23 CCH22 CCH21 CCH20
CCL2 CCL27 CCL26 CCL25 CCL24 CCL23 CCL22 CCL21 CCL20
CCH1 CCH17 CCH16 CCH15 CCH14 CCH13 CCH12 CCH11 CCH10
CCL1 CCL17 CCL16 CCL15 CCL14 CCL13 CCL12 CCL11 CCL10
IEN0 EAL - ET2 ES0 ET1 - ET0 EX0
IEN1 ET2RL - ET2C3 ET2C2 ET2C1 ET2C0 ESPI EI2C
IRCON TF2RL TF2 TF2C3 TF2C2 TF2C1 TF2C0 - -

(1)T2CON寄存器

描述
7 T2PS 定时器2预标量,0 是fcpu/12,1 是fcpu/24
6 I3FR 在比较模式下:0:当产生COM0中断时 Timer2的内容变得不等于CRCregister。1:当产生COM0中断时Timer2的内容变为等于CRC寄存器。在捕获模式0:0:定时器2的内容将被锁存到CRC中T2CC0的寄存器是下降沿。1:定时器2的内容将被锁存到CRC中T2CC0寄存器正在上升沿。
5 保留
4…3 T2R 指定的定时器2重载值。00:禁用 ,01:禁用,10:通过计数器溢出将CRCH / CRCL加载到TH2 / TL2,11:通过T2RL引脚将CRCH / CRCL加载到TH2 / TL2
2 T2CM 定时器2比较输出。0:直接输出方法,1:间接输出,可以指定下一个输出状态
1…0 T2I 定时器2向上计数控制。00:禁用,01:时钟速率由T2PS定义,10:时钟源为T2引脚,11:时钟速率由T2PS定义,具有T2引脚门控制

(2)CCEN寄存器

描述
7…6 COCA3 CC3的比较和捕获功能。00:禁用,01:通过T2CC3引脚上升沿捕获,10:比较功能,11:通过写CCL3寄存器进行捕获
5…4 COCA2 CC3的比较和捕获功能。00:禁用,01:通过T2CC2引脚上升沿捕获,10:比较功能,11:通过写CCL2寄存器进行捕获
3…2 COCA1 CC3的比较和捕获功能。00:禁用,01:通过T2CC1引脚上升沿捕获,10:比较功能,11:通过写CCL1寄存器进行捕获
1…0 COCA0 CRC的比较和捕获功能。00:禁用,01:通过T2CC0引脚上升沿捕获,10:比较功能,11:通过写入RCCL寄存器进行捕获

(3)IEN0

描述
7 EAL 中断使能,参考中断部分知识
5 ET2 定时器2中断使能

(4)IEN1

描述
7 ET2RL T2定时器外部重载中断控制位。0:禁用,1:启用
6 保留 0
5 ET2C3 T2定时器COM3中断控制位。0:禁用,1:启用
4 ET2C2 T2定时器COM2中断控制位。0:禁用,1:启用
3 ET2C1 T2定时器COM1中断控制位。0:禁用,1:启用
2 ET2C0 T2定时器COM0中断控制位。0:禁用,1:启用
其他 参考其他章节

(5)IRCON寄存器

描述
7 TF2RL T2定时器外部重载中断请求标志。 0:无TF2RL中断请求,1:TF2RL中断请求。
6 TF2 T2定时器中断请求标志。 0:无T2中断请求,1:T2中断请求
5 TF2C3 T2定时器 COM3中断请求标志位。0:无T2COM3中断请求,1:T2COM3中断请求。
4 TF2C2 T2定时器 COM2中断请求标志位。0:无T2COM2中断请求,1:T2COM2中断请求。
3 TF2C1 T2定时器 COM1中断请求标志位。0:无T2COM1中断请求,1:T2COM1中断请求。
2 TF2C0 T2定时器 COM0中断请求标志位。0:无T2COM0中断请求,1:T2COM0中断请求。
Else Reserved

(6)其他寄存器

寄存器 描述
TH2/TL2 7…0 TH2/TL2 定时器2 16位计数器寄存器
CRC 7…6 CRCH[15:0] 16位比较/捕获寄存器
CCH3/CCL3 7…6 CCH3/CCL3 16位比较/捕获寄存器
CCH2/CCL2 7…6 CCH2/CCL2 16位比较/捕获寄存器
CCH1/CCL1 7…6 CCH1/CCL1 16位比较/捕获寄存器

代码:

//=============================================================================
//		Time = T2=1.5MS		(65536 - 0xfc18)*12/16		
//=============================================================================
#define TH2_Value 0xF8			//65536 - 63536 = 2000   2000 * 1/Fclk = 2000 * 12/16M = 1500us 							
#define TL2_Value 0x30

void scs_pwm_init(void)
{
	T2CON = 0x01;		    //Fclk = Fcpu/12 = 167K
	
    TH2 = TH2_Value;        // Initial values
    TL2 = TL2_Value;
                                          
    ET2 = 1;                // Timer2 interrupt enable
    EAL = 1;                // Golbal Interrupt enable
}
//-----------------------------------------------------------------------------
//  Timer2 ISR
//-----------------------------------------------------------------------------
void Timer2_ISR(void) interrupt ISRTimer2   // Vector @  0x2B
{
    TF2 = 0;                // Clear Timer2 overflow flag 
   
    TH2 = TH2_Value;        // Initial values
    TL2 = TL2_Value;

    P20 = ~ P20;            // P2.6 toggle
}

你可能感兴趣的:(理论)