LPS ARM 21XX/22XX 系列得芯片内部都集成了两个时钟 TIMER0, TIMER1
这两个时钟除了外设基地址不同,别得都是相同得 包括控制和使用
作用:
顾名思意 他们得主要作用就是用来计时合计数的 每个TIMER有4个捕获通道和4个匹配寄存器
寄存器介绍:
IR 中断寄存器
TCR 定时器控制寄存器
TC 定时器控制器
PR 预分频
MR0~MR3 匹配寄存器
MCR 匹配控制寄存器
CR0~CR3 捕获寄存器
CCR 捕获控制寄存器
EMR 外部匹配寄存器
定时器计数时钟频率计算如下:
计数时钟频率=Fpclk/N+1
N 为PR得值
下面是一个TIMER0得初始化(对于详细设置参阅数据手册)
void Timer0Init(void)
{
T0TC = 0; //定时器设置为0
T0PR = 0; //不分频采用pclk
TOMCR = 0X03; //设置当MR0 = TC 是产生中断并却复位tc
T0MR0 = Fpclk/10; //设置匹配值
T0TCR = 0X01; //启动定时器
}
2、用定时器进行脉宽测量
T0TC = 0;
TOPR = 0;
while( (IO0PIN & 0X00000001)!= 0);//等待P0变为低电平
T0TCR = 0X01;
while( (IO0PIN & 0X00000001)== 0);//等待p0变为高电平
T0TCR = 0X00;
time = T0TC;
3、一个定时器和中断
//使用GCC编译器时对一个中断服务程序得声明
void tc0 (void) __attribute__ ((interrupt)); // Generate Interrupt
void init_timer (void) {
T0MR0 = 149999;
T0MCR = 3;
T0TCR = 1;
//VICIntSelect = 0x00000000; 可省 因为默认都是IRQ
VICVectAddr0 = (unsigned long)tc0; //中断服务子程序地址
VICVectCntl0 = 0x20 | 0x04; //分配中断源编号 使能IRQ 中断
VICIntEnable = 0x00000010; //使能timer0中断
}
void tc0(void)
{
/* * * * */
}
阅读(5668) | 评论(0) | 转发(0) |