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)
{
/* * * * */
}
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)
{
/* * * * */
}
相关文章推荐
- .Net Core Api 使用版本控制详解
- arm中断控制寄存器详解
- Dialog使用详解——开源项目Standup Timer学习总结(三)
- Android 使用版本控制工具时添加忽略文件的方式(详解)
- Java定时器Timer的使用详解
- 如何使用VSS对PB8.0下进行版本控制详解
- 使用timer来控制发送请求的间隔
- 网站防蜘蛛爬虫控制--怎么使用robots.txt及其详解
- SVN版本控制工具的使用详解
- ARMLink使用方法详解
- 使用 Referer Meta 标签控制 referer—详解 referrer-policy
- Azure ARM (16) 基于角色的访问控制 (Role Based Access Control, RBAC) - 使用默认的Role
- boost库asio详解4——deadline_timer使用说明
- ARM平台下独占访问指令LDREX和STREX的原理与使用详解
- 详解使用grunt完成requirejs的合并压缩和js文件的版本控制
- 版本控制工具之二:git的安装与使用详解
- 使用JAVA控制AD域进行基本的操作详解
- nRF51822使用Timer制作4路PWM波详解
- armlink使用方法详解
- Linux应用层的定时器Timer使用详解