LPC2103之timer0 ang timer1
0赞定时器/计数器有计划的在外设时钟(PCLK)或者外部提供的时钟下进行循环计数,它可以基于四个匹配 寄存器有选择的在指定的定时值到达后产生中断或者执行其它操作。它也括了四路捕获输入,用于捕获变化信号的定时值,可选择的产生中断。
Pin description
管脚 |
类型 |
描述 |
CAP0.2.0 CAP1.3.0 |
Input |
捕获信号——捕获管脚的变化可以配置,捕获寄存器中定时计 数值加一,同时可以用选择的产生中断。以下是捕获信号的列表: ? CAP0.0: P0.2 ? CAP0.1: P0.4 ? CAP0.2: P0.6 ? CAP1.0: P0.10 ? CAP1.1: P0.11 ? CAP1.2: P0.17 ? CAP1.3: P0.18 |
MAT0.2.0 MAT1.3.0
|
Output |
外部匹配输出0/1——当一个匹配寄存器0/1等于定时计数值,这个输出可能触发,变高,变低,或者不 变。外部匹配寄存器(EMR)和PWM控制寄存器(PWMCON)控制这个输出的功能。以下是捕获信号的列表: ? MAT0.0: P0.3 ? MAT0.1: P0.5 ? MAT0.2: P0.16 ? MAT1.0: P0.12 ? MAT1.1: P0.13 ? MAT1.2: P0.19 ? MAT1.3: P0.20 |
Register description
下面只列举Timer 1的各个寄存器做说明,其它的Timer0/2/3都类似。
/************************************** Timer 1 *************************************/
/************************* 定 时器1的特殊寄存器*********************************/
//中断寄存器
#define T1IR (*((volatile unsigned char *) 0xE0008000))
读该寄存器值可以判断是8个中断源中的哪一个发生了中断,写1清除中断,写0无效。该寄存器包括了四个匹配中断和四个捕获中断。一旦中 断产生则相应位置高,否则为低。
位 |
信号 |
描述 |
复位值 |
0 |
MR0 interrupt |
匹配通道0中断标志 |
0 |
1 |
MR1 interrupt |
匹配通道1中断标志 |
0 |
2 |
MR2 interrupt |
匹配通道2中断标志 |
0 |
3 |
MR3 interrupt |
匹配通道3中断标志 |
0 |
4 |
CR0 interrupt |
捕获通道0事件中断标志 |
0 |
5 |
CR1 interrupt |
捕获通道1事件中断标志 |
0 |
6 |
CR2 interrupt |
捕获通道2事件中断标志 |
0 |
7 |
CR3 interrupt |
捕获通道3事件中断标志 |
0 |
//定时器控制寄存器
#define T1TCR (*((volatile unsigned char *) 0xE0008004))
该寄存器用于控制定时器/计数器的操作。
位 |
信号 |
描述 |
复位值 |
0 |
Counter Enable |
为1时,定时计数器和分频计数器使能工作。为0时计数器关闭。 |
0 |
1 |
Counter Reset |
为1时,定时计数器和分频计数器在下一个PCLK的上升沿同步复位。计数器复位 保持到该位返回0值。 |
0 |
7:2 |
|
保留 |
NA |
//定时计数器
#define T1TC (*((volatile unsigned long *) 0xE0008008))
当分频计数器(PC)到达了预定值后32bit定时计数器加1。达到限定值后复位,TC计数到达最大值0xffffffff后增1就复位为0x00000000。该事件不会引发中断,但是如 果需要的话匹配寄存器可以用于检测是否溢出。
//分频寄存器
#define T1PR (*((volatile unsigned long *) 0xE000800C))
32bit分频寄存器指定了分频计数器(PC)的计数最大值。
//分频计数器寄存器
#define T1PC (*((volatile unsigned long *) 0xE0008010))
32bit分频计数器对PCLK进行一些常量值的分频,然后才用于定时计时器。分频计数器每个PCLK时钟加1,当其达到了存储分频寄存器(PR)的值后,定时计数器加1,并且分频计数器在下一个PCLK复位。也就是说,PC=1,那么PC在每2个PCLK复位一次。
//匹配控制寄存器
#define T1MCR (*((volatile unsigned short *) 0xE0008014))
匹配控制寄存器用于控制当一个匹配寄存器和定时计数器相匹配时将执行什么操作。
位 |
信号 |
描述 |
复位值 |
0 |
MR0I |
写1时,当MR0与TC匹配将产生中断;写0关闭此功能。 |
0 |
1 |
MR0R |
写1时,当MR0与TC匹配将会复位;写0关闭此功能。 |
0 |
2 |
MR0S |
写1时,当MR0与TC匹配将使PC和TC计数停止并且TCR[0]拉低(0);写0关闭此功能。 |
0 |
3 |
MR1I |
写1时,当MR1与TC匹配将产生中断;写0关闭此功能。 |
0 |
4 |
MR1R |
写1时,当MR1与TC匹配将会复位;写0关闭此功能。 |
0 |
5 |
MR1S |
写1时,当MR1与TC匹配将使PC和TC计数停止并且TCR[0]拉低(0);写0关闭此功能。 |
0 |
6 |
MR2I |
写1时,当MR2与TC匹配将产生中断;写0关闭此功能。 |
0 |
7 |
MR2R |
写1时,当MR2与TC匹配将会复位;写0关闭此功能。 |
0 |
8 |
MR2S |
写1时,当MR2与TC匹配将使PC和TC计数停止并且TCR[0]拉低(0);写0关闭此功能。 |
0 |
9 |
MR3I |
写1时,当MR3与TC匹配将产生中断;写0关闭此功能。 |
0 |
10 |
MR3R |
写1时,当MR3与TC匹配将会复位;写0关闭此功能。 |
0 |
11 |
MR3S |
写1时,当MR3与TC匹配将使PC和TC计数停止并且TCR[0]拉低(0);写0关闭此功能。 |
0 |
15:12 |
|
保留 |
|
//匹配寄存器
//匹配寄存器0
#define T1MR0 (*((volatile unsigned long *) 0xE0008018))
//匹配寄存器1
#define T1MR1 (*((volatile unsigned long *) 0xE000801C))
//匹配寄存器2
#define T1MR2 (*((volatile unsigned long *) 0xE0008020))
//匹配寄存器3
#define T1MR3 (*((volatile unsigned long *) 0xE0008024))
匹配寄存器的值将不断的和定时计数器(TC)的值进行比较。当二者相等时,相应行为将被自动触发。该行为可能产生一个中断、复位定时计数器、或者停止定时器。 该行为由MCR寄存器的设置决定。
//捕获控制寄存器
#define T1CCR (*((volatile unsigned short *) 0xE0008028))
捕获控制寄存器用于控制四个捕获寄存器之一是否在捕获事件发生时加载定时计数器值,以及该捕获事件是否 产生中断。
位 |
信号 |
描述 |
复位值 |
0 |
CAP0RE |
写1时,捕获CAPn.0的上升沿,当上升沿到来时将导 致CR0加载TC值。 |
0 |
1 |
CAP0FE |
写1时,捕获CAPn.0的下降沿,当下降沿到来时将导 致CR0加载TC值。 |
0 |
2 |
CAP0I |
写1时,CAPn.0事件中断,CAPn.0事件将产生中断。 |
0 |
3 |
CAP1RE |
写1时,捕获CAPn.1的上升沿,当上升沿到来时将导 致CR1加载TC值。 |
0 |
4 |
CAP1FE |
写1时,捕获CAPn.1的下降沿,当下降沿到来时将导 致CR1加载TC值。 |
0 |
5 |
CAP1I |
写1时,CAPn.1事件中断,CAPn.1事件将产生中断。 |
0 |
6 |
CAP2RE |
写1时,捕获CAPn.2的上升沿,当上升沿到来时将导 致CR2加载TC值。 |
0 |
7 |
CAP2FE |
写1时,捕获CAPn.2的下降沿,当下降沿到来时将导 致CR2加载TC值。 |
0 |
8 |
CAP2I |
写1时,CAPn.2事件中断,CAPn.2事件将产生中断。 |
0 |
9 |
CAP3RE |
写1时,捕获CAPn.3的上升沿,当上升沿到来时将导 致CR3加载TC值。 |
0 |
10 |
CAP3FE |
写1时,捕获CAPn.3的下降沿,当下降沿到来时将导 致CR3加载TC值。 |
0 |
11 |
CAP3I |
写1时,CAPn.3事件中断,CAPn.3事件将产生中断。 |
0 |
15:12 |
|
保留 |
NA |
//捕获寄存器
//捕获寄存器0
#define T1CR0 (*((volatile unsigned long *) 0xE000802C))
//捕获寄存器1
#define T1CR1 (*((volatile unsigned long *) 0xE0008030))
//捕获寄存器2
#define T1CR2 (*((volatile unsigned long *) 0xE0008034))
//捕获寄存器3
#define T1CR3 (*((volatile unsigned long *) 0xE0008038))
每个捕获寄存器都和器件管脚相关联,当指定事件发生在外部管脚上时捕获寄存器也许要加载定时计数器值。 捕获控制寄存器的设置决定是否捕获功能被使能,并且触发事件到底是在关联管脚的上升沿、下降沿或者双沿(包括上升沿和下降沿)。
//外部匹配寄存器
#define T1EMR (*((volatile unsigned short *) 0xE000803C))
外部匹配寄存器控制外部匹配管脚MAT(0-3),并可以读出其状态。
位 |
信号 |
描述 |
复位值 |
0 |
EM0 |
外部匹配0。该位反映了输出MAT0.0/MAT1.0的状态。当TC和MR0匹配时,该定时器输出可以为 高、为低、或者不变。EMR[5:4]控制输出功能。 |
0 |
1 |
EM1 |
外部匹配1。该位反映了输出MAT0.1/MAT1.1的状态。当TC和MR1匹配时,该定时器输出可以为 高、为低、或者不变。EMR[7:6]控制输出功能。 |
0 |
2 |
EM2 |
外部匹配2。该位反映了输出MAT0.2/MAT1.2的状态。当TC和MR2匹配时,该定时器输出可以为 高、为低、或者不变。EMR[9:8]控制输出功能。 |
0 |
3 |
EM3 |
外部匹配3。该位反映了输出MAT0.3/MAT1.3的状态。当TC和MR3匹配时,该定时器输出可以为 高、为低、或者不变。EMR[11:10]控制输出功能。 |
0 |
5:4 |
EMC0 |
外部匹配控制0 |
00 |
7:6 |
EMC1 |
外部匹配控制1 |
00 |
9:8 |
EMC2 |
外部匹配控制2 |
00 |
11:10 |
EMC3 |
外部匹配控制3 |
00 |
15:12 |
|
保留 |
NA |
外部匹配控制
00——什么都不做
01——清除相应的外部匹配位/输出0
10——置位相应的外部匹配位/输出1
11——Toggle the corresponding External Match bit/output
//计数控制寄存器
#define T1CTCR (*((volatile unsigned long *) 0xE0008070))
该寄存器用于用于选择定时器或者计数器模式,计数模式下也用于选择计数时的管脚和边沿。
在计数器模式下,CAP输入(由CTCR寄存器的bit3:2选择)在每个PCLK时钟的上升沿被采样。在比较CAP的两个连续采样值后,产生以下 四个事件中的一个:所选择CAP输入的上升沿、下降沿、沿变 化、不变化。只有识别出了与CTCR寄存器的bit1:0所选择的事件相一致时,定时计 数器寄存器将会增1。
实际上外部提供的时钟运行计数器有其局限性。PCLK两个连续的上升沿仅能用于识别一个CAP选择输入的变化沿,CAP输入频率不能够超过PCLK时钟的一半。所以,在同一个CAP输入的高或低电平至少必须保持1/PCLK时间以上。
位 |
信号 |
描述 |
复位值 |
1:0 |
Counter/Timer mode |
00——定时器模式,每个PCLK的上升沿到来后PC值加1,或者复位PC同时TC加1; 01——计数器模式,由bit3:2选择的CAP的上升沿到来后TC值加1; 10——计数器模式,由bit3:2选择的CAP的下降沿到来后TC值加1; 11——计数器模式,由bit3:2选择的CAP的沿变化后TC值加1; |
00 |
3:2 |
Count input select |
00——CAP1.0 for Timer1 01——CAP1.1 for Timer1 10——CAP1.2 for Timer1 11——CAP1.3 for Timer1 |
00 |
7:4 |
|
保留 |
NA |
// PWM控制寄存器
#define PWM1CON (*((volatile unsigned long *) 0xE0008074))
位 |
信号 |
描述 |
复位值 |
0 |
PWM enable |
1——MATn.0的PWM模式使能 0——MATn.0由EM0控制 |
0 |
1 |
PWM enable |
1——MATn.1的PWM模式使能 0——MATn.1由EM0控制 |
0 |
2 |
PWM enable |
1——MATn.2的PWM模式使能 0——MATn.2由EM0控制 |
0 |
3 |
PWM enable |
1——MATn.3的PWM模式使能 0——MATn.3由EM0控制 |
0 |
32:4 |
|
保留 |
NA |