5151|4

89

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

LM3S1512 定时器 中断 红外解码 [复制链接]

大虾们帮帮忙啦  我在用LM3S1512做一个定时器红外捕捉解码的project  使用的是Rowley CrossStudio开发环境
我按照数据手册的介绍写了如下面的相关代码   问题是当我逐步执行代码的时候 定时器初始化什么的都没问题 而且程序不会运行到中断服务函数(PulseCaptureIntHandler) 

但是当我在中断服务函数里设置了断点然后全速执行的时候程序就会进入中断服务函数  按理说我没有按下红外发射器的按键  在PH1/CCP7端口没有上升沿脉冲信号 所以他不应该进入中断服务函数  这里不知道为什么  是不是我的中断服务函数定义的不正确?  我在startup代码里将中断向量表里的默认的Timer3B_ISR 赋值给了我的中断服务函数PulseCaptureIntHandler  (在项目的Preprocessor Definitions 里 PulseCaptureIntHandler = Timer3B_ISR)

另外我观察到一个问题是当在终端服务函数里设置了断点程序运行到中断服务函数里  我单步执行发现当执行了 TimerIntClear(TIMER3_BASE,TIMER_CAPB_EVENT);后, 中断清除寄存器(GPTM_3_MICR )里的捕获事件中断清除位(CBECINT(CaptureB Event Interrupt Clear) )没有被清掉  他一直是0   这是什么原因呢?

谢谢各位前辈赐教!


代码:

SysCtlClockSet( SYSCTL_SYSDIV_10 |  SYSCTL_USE_PLL |  SYSCTL_OSC_MAIN | SYSCTL_XTAL_8MHZ );

//Using Pin PH1/CCP7

SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
GPIOPinTypeTimer( GPIO_PORTH_BASE, GPIO_PIN_1);


//Timer Initial Function
void USER_Timer_Capture_Init(void)
{
  //configure TimerB as a 16-bit edge time capture
  TimerConfigure(TIMER3_BASE, TIMER_CFG_16_BIT_PAIR|TIMER_CFG_B_CAP_TIME);

  //configure the counter (TimerB) to count the rising edge
  TimerControlEvent(TIMER3_BASE, TIMER_B,TIMER_EVENT_POS_EDGE);
 
  //load the start value of the timer
  TimerLoadSet(TIMER3_BASE, TIMER_B, 0xFFFF);

  //enable the timer interrupt
  TimerIntEnable(TIMER3_BASE, TIMER_CAPB_EVENT);

  //TimerIntRegister(TIMER3_BASE, TIMER_B, Timer3B_ISR);

  ////enable the TimerB
  TimerEnable(TIMER3_BASE, TIMER_B);
}

//Interrupt Handler Function
void PulseCaptureIntHandler(void)
{
    // Clear all Timer0_B interrupt flag
    TimerIntClear(TIMER3_BASE,TIMER_CAPB_EVENT);

    AT_UINT8_T Data=0, IR_PULSE_TRAIN_DECODED;
    AT_UINT8_T Count = 0;
    AT_UINT16_T Current_TnR_Value, Period;
 
    Current_TnR_Value = TimerValueGet(TIMER3_BASE, TIMER_B);
    Period = Pre_TnR_Value - Current_TnR_Value;
    Pre_TnR_Value = Current_TnR_Value;

    if((Period>(2480))&&(Period<(2520)))            //start bit  (20*1000)/8=2500us, offset 20us
      {
        Count = 0;
          }
     else if ((Period>(980))&&(Period<(1020)))     //bit "0"   (8*1000)/8=1000,  offset 20 us
      {
        Data &= ~(1<<(Count++));
      }
     else if ((Period>(1730))&&(Period<(1770)))     //bit "1"   (14*1000)/8=1750,  offset 20 us
      {
        Data |= (1<<(Count++));
      }
         
      if (Count == 4)
      {
        IR_PULSE_TRAIN_DECODED = Data;
      }
}

int   main(void)

{

   ......

    IntEnable(INT_TIMER3B);
    IntMasterEnable();

   ......

}


最新回复

继续顶,我也很想知道答案哦。  详情 回复 发表于 2011-3-18 23:51
 
点赞 关注

回复
举报

918

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
遇到类似这种情况的坛友,都来顶顶这个帖子
 
 

回复

89

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
谢谢版主!  版主好人  :(
 
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

4
 

回复 楼主 tekkon 的帖子

继续顶,我也很想知道答案哦。
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(高级)

5
 

回复 4楼 academic 的帖子

问题解决了  是硬件电路问题   有噪音  噪音脉冲触发了捕获定时器  所以没有按遥控器他都进入中断服务函数
 
 
 

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

随便看看
查找数据手册?

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