5072|4

849

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

LM3S8962的TIMER [复制链接]

    

  各位请进。。。

    最近做东本用到了8962的TIMER模块。。。。

                    仔细研究了一下。下面是总结的。请评估一下。

同时纠正一下ZLG所翻译的timer数据手册上面有一个小小的错误,就是在运行控制块描述TimerRTCDisable()这个函数的时候,是写错了,写成了TimerRTCEnable()了。。大家可以验证一下。。。。

 

8962有4个TIMER模块,但是能用的CCP引脚却只有2个,分别对应着TIMER0_A的CCP0(PD4)和TIMER0_B的CCP1(PA6),所以我们如果将定时模块用作ONESHOT/PERIODIC触发的定时器时,是没有问题的,因为不会涉及到CCP引脚的用法。但是如果想用成32位的RTC模式,此时我们就只能引入时钟源才能用。这样就未免有些麻烦 。比如本人,就是从信号发生器上引入的32768.885HZ的方波信号的。

 

如果要用到16位的输入边沿计数/定时,PWM模式。都会用到CCP引脚的。

许多片子上面,如1138,都是利用其它的TIMER模块产生的PWM信号,作为RTC的时钟源,输入的边沿脉冲等。

    

   下面我建立了一个小的模块工程,希望对大家有用:

本人偷了偷懒,没有接入新的时钟源,而是利用timer模块产生的时钟信号。

从8962移植到615上面的工程:(注意:我是在615的CCP1上面产生的10KHZ的方波的,所以CCP1必须作为CCP4的输入,要将这两个引脚短接)

 

//----------------------HEADER FILE 头文件-------------------------//
#include "systemInit.h"
#include "uartgetput.h"
#define  PART_LM3S615
#include  <pin_map.h>
#define CCP1_PERIPH SYSCTL_PERIPH_GPIOE
#define CCP4_PERIPH SYSCTL_PERIPH_GPIOE
//--------------------MAVRO DEFINITION 宏定义----------------------//
/********************************************************************
函数名称:void pulseInit(void)
函数入口:务
函数出口:无
函数说明:在CCP1管脚产生10KHz方波,为Timer2的16位输入边沿计数捕获功能提供时钟源
********************************************************************/ 
void pulseInit(void)
{
    SysCtlPeriEnable(SYSCTL_PERIPH_TIMER0);                 //  使能TIMER0模块
    SysCtlPeriEnable(CCP1_PERIPH);                          //  使能CCP1所在的GPIO端口
    GPIOPinTypeTimer(CCP1_PORT, CCP1_PIN);                  //  配置相关管脚为Timer功能

    TimerConfigure(TIMER0_BASE, TIMER_CFG_16_BIT_PAIR |     //  配置TimerB为16位PWM
                                TIMER_CFG_B_PWM);

    TimerLoadSet(TIMER0_BASE, TIMER_B, 600);                //  设置TimerB初值
    TimerMatchSet(TIMER0_BASE, TIMER_B, 300);               //  设置TimerB匹配值
    TimerEnable(TIMER0_BASE, TIMER_B);
}

/********************************************************************
函数名称:void timerInitCapCount(void)
函数入口:务
函数出口:无
函数说明:定时器16位输入边沿计数捕获功能初始化
********************************************************************/ 
void timerInitCapCount(void)
{
    SysCtlPeriEnable(SYSCTL_PERIPH_TIMER2);                 //  使能Timer模块
    SysCtlPeriEnable(CCP4_PERIPH);                          //  使能CCP4所在的GPIO端口
    GPIOPinTypeTimer(CCP4_PORT, CCP4_PIN);                  //  配置CCP4管脚为脉冲输入

    TimerConfigure(TIMER2_BASE, TIMER_CFG_16_BIT_PAIR |     //  配置Timer为16位事件计数器
                                TIMER_CFG_A_CAP_COUNT);

    TimerControlEvent(TIMER2_BASE,                          //  控制TimerA捕获CCP负边沿
                      TIMER_A,
                      TIMER_EVENT_NEG_EDGE);

    TimerLoadSet(TIMER2_BASE, TIMER_A, 40000);              //  设置计数器初值
    TimerMatchSet(TIMER2_BASE, TIMER_A, 35000);             //  设置事件计数匹配值

    TimerIntEnable(TIMER2_BASE, TIMER_CAPA_MATCH);          //  使能TimerA捕获匹配中断
    IntEnable(INT_TIMER2A);                                 //  使能Timer中断
    IntMasterEnable();                                      //  使能处理器中断

    TimerEnable(TIMER2_BASE, TIMER_A);                      //  使能Timer计数
}
/********************************************************************
函数名称:main()
函数入口:务
函数出口:无
函数说明:系统主函数
********************************************************************/
int main(void)
{
 //add initialization code in here
 jtagWait();
 clockInit();
 //for debugging
 uartInit();
 uartPuts("\t 史莱克---timer-32bit perodic 测试\r\n");
 SysCtlPeriEnable(LED_PERIPH);
 GPIOPinTypeOut(LED_PORT,LED_PIN);
 GPIOPinWrite(LED_PORT,LED_PIN,0X00);

 pulseInit();
    timerInitCapCount();                                    //  Timer初始化:16位计数捕获

 while(1)
 {
  ;
 }
}

/********************************************************************
函数名称:Timer0_Base_ISR(void)
函数入口:NO
函数出口:NO
函数说明:TIMER0 INTERRUPT FUNCTION
********************************************************************/
void Timer2_Base_ISR(void)
{
 u8 ulValue;
 u32 ulStatus;
 
 ulStatus=TimerIntStatus(TIMER2_BASE,true);
 TimerIntClear(TIMER2_BASE,ulStatus);

 if(ulStatus& TIMER_CAPA_MATCH)
 {
  TimerLoadSet(TIMER2_BASE, TIMER_A, 40000);          //  重新设置计数器初值
        TimerEnable(TIMER2_BASE, TIMER_A);                  //  TimerA已停止,重新使能
  ulValue=GPIOPinRead(LED_PORT,LED_PIN);

  GPIOPinWrite(LED_PORT,LED_PIN,~ulValue);
 }
}

LM3S8962的TIMER总结.doc

2.8 MB, 下载次数: 215

最新回复

非常感谢!刚好不会用捕获的功能,可以借鉴一下!  详情 回复 发表于 2012-4-16 09:07
 
点赞 关注
个人签名只有想不到,没有做不到。

回复
举报

1412

帖子

15

TA的资源

版主

沙发
 
最好给出代码,这样我们能给初学者运行下,看看效果。。。
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 

回复

849

帖子

0

TA的资源

纯净的硅(高级)

板凳
 

回复 沙发 youki12345 的帖子

上面的就是主要的代码,,
   只要手动建立工程就OK了。。。。。。
我还是把工程文件上传了吧。。。大家有兴趣的可以下一下跑一下。。。看看效果 。。。
 
个人签名只有想不到,没有做不到。
 
 

回复

849

帖子

0

TA的资源

纯净的硅(高级)

4
 
工程包:需求者可以下下跑一跑,,看看效果如何。。。

project22-16bit-timer-cap-count.rar

377.72 KB, 下载次数: 76

 
个人签名只有想不到,没有做不到。
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

5
 
非常感谢!刚好不会用捕获的功能,可以借鉴一下!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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