TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2530 ZSATCK 3.0.2 脉冲捕获

你好,期望的功能,一段脉冲输入到2530的P1.7脚,用定时器3的通道1去捕获,

上下边沿都捕获,捕获周期1us,把测量的脉冲宽度存到数组里,然后分析,请问如下的代码有什么问题?

数组里测量的时间和示波器测量的不符合,请帮忙分析一下原因,谢谢!

void irCaptureGpioInit(void)
{
  P1SEL |= 0x80;  P1DIR &= ~0x80;
  P1_7 = 1;

  PERCFG |= 0x20;//定时器3的备用位置2,必须设置
  P2SEL |= 0x20;//设置定时器3优先
  //P1IEN |= 0x80;
}

void timer3CaputureInit(void)
{

  T3CTL &= 0x00; //T3溢出中断屏蔽
  T3CTL |= 0xA0; //标记频率/32 1MHz
  T3CTL |= 0x04; //清除计数器
  T3CTL |= 0x08; //溢出中断使能
  T3CTL |= 0x10; //启动定时器T3

  T3CCTL1 &= ~0x04; //捕获模式
  T3CCTL1 |= 0x03; //上升、下降沿都捕获
  T3CCTL1 |= 0x40; //T2的通道1中断使能
   IRCON = 0;          //清除中断标志
  //IEN1 |= 0x08; //T3中断使能   T3IE = 1;     //使能定时器3中断
   //IEN0 |= 0x80;//使能所有中断
}

void timer3CaptureConfig(void)
{
  irCaptureGpioInit();
  timer3CaputureInit();
}
__interrupt void T3_ISR(void)
{
  unsigned char a;
  if(TIMIF & (~0xFB)) //边沿触发中断
  {
    a = T3CC1;
    if(a > 5
    {
      rec1[signle++] = T3CC1;
      //setFlag = 1;
    }
    T3CC1 = 0;
    IRCON = 0x00; //清中断标志,也可由硬件自动完成
  }

  if(TIMIF & (~0xFE)) //溢出中断
  {
    /*if(setFlag)
    {
      signle = 0;
      setFlag = 0;
    }*/
    IRCON = 0x00; //清中断标志,也可由硬件自动完成
  }
}

Susan Yang:

user5367314数组里测量的时间和示波器测量的不符合

具体表现是怎样的?

您的代码我感觉没什么问题

user5367314:

回复 Susan Yang:

数据帧格式:

1ms 高电平 + 10us 低电平 + 7bit 数据

其中1bit数据格式为:

1bit数据0: 10us 高电平+25us 低电平

1bit数据1: 25us 高电平+10us 低电平

抓取的波形如下,我想实现的是捕获下面的波形的高低电平宽度,

并把宽度(即时间长度)存在数组里,这样的话数组的前面两个数据应该是1000左右,10左右,

可是仿真的时候差距很大,感觉是乱码,请帮忙分析一下原因?

Susan Yang:

回复 user5367314:

请问您现在是示波器接P1.7脚的波形吗?您是在示波器内设置了边沿捕捉吗?

若是在线看rec1[signle++] = T3CC1;中数组的值呢?

Susan Yang:

回复 user5367314:

另外若是可以的话,请给出完整代码,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » CC2530 ZSATCK 3.0.2 脉冲捕获
分享到: 更多 (0)