您的位置:首页 > 其它

ARM TIMER 使用 控制 详解

2010-03-16 18:45 183 查看
转帖网址:http://blog.chinaunix.net/u2/78572/showart_1212304.html

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)
{
/* * * * */
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: