6225|8

5979

帖子

8

TA的资源

版主

楼主
 

一个LED的N种玩法(三)----General Timer [复制链接]

一个LEDN种玩法 ()---General Timer

Author: chenzhufly

Email: chenzhufly@126.com

2010-4-29

 

写完两篇终于等到timer上场了,前面已经有网友提议可以用timer来玩LED,那好吧,在这里我来感受一下timer是怎么操作LED的。Come on……

 

LPC1343有三种timer

1.  一般的计数器或定时器 ---- General counter/timer

2.  系统节拍定时器 ---- system tick timer

3.  看门狗定时器 ---- watchdog timer

 

这里我们首先讨论一下一般的计数器或定时器,首先做个简单的介绍吧。

 

一. LPC1343计数器或定时器概述

LPC1343拥有232位和216位可编程定时器/计数器,被用来统计系统衍生时钟的周期数。有4个匹配寄存器,可选择在规定的时间内产生中断或执行其他操作。每个定时器/计数器还包含1个捕获输入,用来在输入信号变化时捕获定时器瞬时值和产生中断。

具有的特性:

-    两个32位的定时器/计数器,各带有一个可编程的32位预分频器;

-    计数器或定时器操作;

-    一个32位的捕获通道可在输入信号跳变时捕捉定时器的瞬时值。捕获事件也可以产生中断;

-    432位匹配寄存器,允许执行以下操作:

. 匹配时连续工作,在匹配时可选择产生中断;

. 在匹配时停止定时器运行,可选择产生中断;

. 在匹配时复位定时器,可选择产生中断。

-    4个与匹配寄存器相对应的外部输出,这些输出具有以下功能:

. 匹配时设为低电平;

. 匹配时设为高电平;

. 匹配时翻转电平;

. 匹配时不执行任何操作

 

timer有了个大概的了解之后,如果还有兴趣,可以看看相关的寄存器,看看怎么设置的,这里就不叙述了。直接跳过……呵呵

 

. 计数器或定时器底层驱动

LPCXpresso的测试代码中,已经实现了计数器或定时器底层驱动,两个文件分别为timer.ctime.h。主要函数如下:

 

void delay32Ms(uint8_t timer_num, uint32_t delayInMs);

产生毫秒级延时,延时长短由参数delayInMs确定

 

void enable_timer32(uint8_t timer_num);

使能定时器

 

void disable_timer32(uint8_t timer_num);

关闭定时器

 

void reset_timer32(uint8_t timer_num);

复位定时器

 

void init_timer32(uint8_t timer_num, uint32_t timerInterval);

初始化定时器,时间长度由参数timerInterval确定

 

void init_timer32PWM(uint8_t timer_num, uint32_t period, uint8_t match_enable);

初始化TimerPWM模式

 

void setMatch_timer32PWM (uint8_t timer_num, uint8_t match_nr, uint32_t value);

设置PWM的匹配值,主要是对MR0MR1MR2MR3赋值

 

void TIMER32_0_IRQHandler(void)

void TIMER32_1_IRQHandler(void)

Timer01的中断处理函数

 

. 示例代码

介绍完底层函数以后,我就开始使用这些函数,实现控制LED的操作。

 

1.  使用delay32Ms()实现LED闪烁,如下所示:

 

    GPIOSetValue(LED_PORT, LED_BIT, LED_OFF );

    delay32Ms(0,500);

    GPIOSetValue(LED_PORT, LED_BIT, LED_ON );

    delay32Ms(0,500);

 

注意:这里的delay32Ms和前面所说的delay实现的机制是不一样的.

 

 

2.  使用timer中断,这个官方给的例子程序就是,呵呵,还是把代码切上来。

 

  init_timer32(0, TIME_INTERVAL);//初始化timer0TIME_INTERVAL10ms

  enable_timer32(0); //使能timer 0,这样中断处理函数开始工作

 

  GPIOInit();//初始化IO

  GPIOSetDir( LED_PORT, LED_BIT, 1 );//设置ledIO为输出

 

  while (1)                               

  {

    if ( (timer32_0_counter%LED_TOGGLE_TICKS) < (LED_TOGGLE_TICKS/2) )

    {

      GPIOSetValue( LED_PORT, LED_BIT, LED_OFF );

    } else

    {

      GPIOSetValue( LED_PORT, LED_BIT, LED_ON );

    }

    __WFI();//在两个timer中断之间,进入休眠状态

}

 

3.使用PWM模式,这个可以实现LED亮度的渐变的,不过要焊接额外的LED,作罢,哈哈。。。。提供个参考代码,有兴趣的可以试一试。

 

init_timer32PWM(0,period,0x04)//初始化timer00x04对应timer0MAT2模式,输出IOPIO0_1,可以在PIO0_1上接个LED看看效果,我就不做啦

enable_timer32(0); //使能timer 0

setMatch_timer32PWM(0,2,period1)// 2表示timer0MAT2模式,period1

timer反转时间需要修改的值,也就是修改了init_timer32PWM中的period

 

PWM模式没有做实验,谁做了发上来,非常感谢!General Timer只写到这里啦!

一个LED的N种玩法_三_----General Timer.pdf (91.81 KB, 下载次数: 97)

 

 

更多精彩 稍后继续

 

 

此帖出自NXP MCU论坛

最新回复

  详情 回复 发表于 2013-1-19 13:24
点赞 关注
 

回复
举报

4997

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
学习了!!!!!!!!!!!!!!!!
此帖出自NXP MCU论坛
 
 
 

回复

2万

帖子

74

TA的资源

管理员

板凳
 

回复 楼主 chenzhufly 的帖子

此帖出自NXP MCU论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

2955

帖子

0

TA的资源

纯净的硅(初级)

4
 
此帖出自NXP MCU论坛
 
个人签名不断地学习,才会有创新!
淘宝小店:手机、qq点卡、游戏点卡自动充值 http://shop63727265.taobao.com/
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

5
 

LPCXpresso的测试代码在哪

我找不到,请提供详细步骤将LPCXpresso的测试代码叫入到工作库,谢了

[ 本帖最后由 tonghuayushun 于 2012-5-12 12:22 编辑 ]
此帖出自NXP MCU论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

6
 

求助

找不到timer.c和time.h
此帖出自NXP MCU论坛
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

7
 

给我发几份程序吧

我刚接触LPCXpresso,能不能把你们编的程序连同头文件发给我,我想参考参考,随便什么都可以,最好是lpc11c24或11u14的程序,还有就是最好是nxp的板子,请qq邮箱为351901628@qq.com,谢谢!

[ 本帖最后由 tonghuayushun 于 2012-5-12 18:08 编辑 ]
此帖出自NXP MCU论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
此帖出自NXP MCU论坛
 
 
 

回复

436

帖子

5

TA的资源

五彩晶圆(初级)

9
 
此帖出自NXP MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表