4388|6

43

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

LM3S TIMER问题 [复制链接]

小弟调试的LM3S9系列  定时器时 32位的RTC模式,16位的边沿计数捕获 边沿定时捕获都不能进中断   但是32位的单次触发 周期定时 和16位的单次触发 周期定时都没问题!  而且我发现出现问题的程序都用到了pulseInit(void)函数产生PWM方波!不知是不是这里的问题? 我用的是周立功的程序 它上面写的是6MHZ晶振  但我用的是16MHZ的,

下面附上其中一个问题程序 请高手们帮忙找找问题在哪里?

16位边沿计数捕获:

#include<lm3sxxx.h> 
#include<stdio.h>
#include<ctype.h> 

#include  "systemInit.c"

unsigned long flag;
unsigned char ucVal;

//  在CCP1管脚产生10KHz方波,为Timer2的16位输入边沿计数捕获功能提供时钟源
void pulseInit(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);           //  使能TIMER0模块
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);            //  使能CCP1所在的GPIO端口
    GPIOPinTypeTimer(GPIO_PORTE_BASE, GPIO_PIN_3);          //  配置相关管脚为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);

}


//  定时器16位输入边沿计数捕获功能初始化
void timerInitCapCount(void)
{
    SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2);           //  使能Timer模块
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);            //  使能CCP4所在的GPIO端口
    GPIOPinTypeTimer(GPIO_PORTE_BASE, GPIO_PIN_2);          //  配置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计数

//  主函数(程序入口)
int main(void)
{
 jtagWait();
    clockInit();                                            //  时钟初始化:晶振,16MHz

  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);   //  使能LED所在的GPIO端口
 GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_0);  //  设置LED所在管脚为输出
    GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, 0XFF);  
    pulseInit();
    timerInitCapCount();                                    //  Timer初始化:16位计数捕获

    for (;;)
    {
  if(flag==1)
  {
   flag=0;
  }
    }
}

//  Timer2的中断服务函数
void Timer2A_ISR(void)
{
    unsigned long ulStatus;
    ulStatus = TimerIntStatus(TIMER2_BASE, true);           //  读取当前中断状态
    TimerIntClear(TIMER2_BASE, ulStatus);                   //  清除中断状态,重要!

    if (ulStatus & TIMER_CAPA_MATCH)                        //  若是TimerA捕获匹配中断
    {
        //TimerA已停止,重新使能
        TimerLoadSet(TIMER2_BASE, TIMER_A, 40000);          //  重新设置计数器初值
     TimerEnable(TIMER2_BASE, TIMER_A); 
     ucVal = GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_0);   //  反转LED
  GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0, ~ucVal);
      flag=1;
    }
}

最新回复

路过学习。。。  详情 回复 发表于 2012-10-28 20:24
 
点赞 关注

回复
举报

1803

帖子

0

TA的资源

五彩晶圆(高级)

沙发
 

回复 楼主 轻轨002 的帖子

CCP 引脚是复用的吧,应该配置一下。
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 

中断相量修改了没

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

4
 
中断向量改了!
 
 
 

回复

43

帖子

0

TA的资源

一粒金砂(中级)

5
 

按照2楼的方法  把引脚功能使能一下加了 

GPIOPinConfigure(GPIO_PE3_CCP1);

GPIOPinConfigure(GPIO_PE2_CCP4);

就可以工作了;

我用的程序是LM3S615的程序  它的引脚没有复用  但是我的板子是LM3S9L97的  引脚复用了 所以要使能一下CCP1 和CCP4才能工作。

点评

大哥你实在太NX了,我也是一直不行,按照你的建议改了一下果然可以。太感谢了!!!  详情 回复 发表于 2012-10-26 10:07
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼 轻轨002 的帖子

大哥你实在太NX了,我也是一直不行,按照你的建议改了一下果然可以。太感谢了!!!
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

7
 
路过学习。。。
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表