This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC3200 定时器捕获

Other Parts Discussed in Thread: CC3200, CC2530

请问下,我要设定CC3200的一个定时器同时开启边沿捕获中断和溢出中断。我改怎么设定。

还有就是如何设定溢出时间。我需要捕获的是红外信号。将红外信号高低电平宽度记录下来,进行分析!

  • 红外信号是模拟电平吧?这是需要开启 ADC 功能吗?

  • 是红外遥控信号,NEC红外编码那种。波就是不同宽度的高低电平。想用定时器边沿捕获把高低电平的时间存储下来,然后解码。

  • 在CC2530上面我已实现定时器时钟1MHz  开启双边沿捕获中断,和定时器溢出中断。当有边沿出发时,启动溢出中断。每收一个红外信号溢出中断计数变量清0,当溢出中断次数超过3次时,退出捕获模式完成红外接收。接下来进行解码。现在我就是想用CC3200实现这样的功能,通过WIFI能对接到手机上。

  • 请问捕获的是什么红外码? 是固定编码方式还是任意编码方式!?

    固定编码方式应该是可以解析的, 但是任意编码方式有什么方法可以解析!?

  • 主要目的是做个WIFI的万能红外遥控,只要把波记录下来就行。现在主要是CC3200定时器不大会用,主要是捕获定时器时钟如何分频。不同的红外遥控选择不同的时钟。

  • MAP_TimerPrescaleSet(TIMERA2_BASE,TIMER_A,10);这应该是对时钟进行分频吧。我写这段和不写这段没什么区别。

  • 你是不带码库?

  • 嗯,直接将波形存下来。然后通过WIFI发到手机,手机可解码也可不解码。要CC3200发送红外数据时,只要手机将存储数据原封不动的传到CC3200让它发送就可以了。

  • Nutcracker:

       请问下这函数  TimerPrescaleSet(TIMERA2_BASE,TIMER_A,80);

      是不是把Timer2  A通道进行80分频。80M / 80 = 1M  

    如果是的话,我加这段代码和不加捕获的值是一样的。

    而且这函数   MAP_TimerValueGet(TIMERA2_BASE,TIMER_A); 的返回值 BIT16~BIT23位的值始终在变。看文档这8位好像是分频系数才是

  • 我也遇到同样问题, MAP_TimerValueGet(TIMERA2_BASE,TIMER_A); 的返回值 BIT16~BIT23位的值始终在变。看文档这8位好像是分频系数才是。

     

    后来你的问题解决了吗

  • 解决了,CC3200的定时器分频只是用限制捕获溢出时间的,不管怎么分频。捕获到了时间都是80M在计时的,这里的分频和CC2530或者STM32的捕获分频不一样。

    所以CC3200的捕获时间计算都要按照80M来。

  • 你好,我之前做红外信号接收、发射也是用cc2530,。 现在也准备用cc3200做。 能请教你一下,你是怎么做的吗? SDK中有很多sample。 你是参考了那个sample?

  • 我前面也提出了同样的问题,好像一个定时器不能同时使能边沿捕获中断和溢出中断,但是可以再使用一个定时器B(边沿捕获用A,最好是用定时器2)

    设成溢出中断,两个定时器设成一样的配置及计时数,同时启动,中断入口设成同一个入口,就可以解决。

    void TimerCaptureCount() {
    //
    // Enable pull down
    //
    //  MAP_PinConfigSet(PIN_05, PIN_TYPE_STD_PD, PIN_STRENGTH_6MA);
    //
    // Register timer interrupt hander
    //
    MAP_TimerIntRegister(TIMERA2_BASE, TIMER_A, Timer2ABIntHandler);
    MAP_TimerIntRegister(TIMERA2_BASE, TIMER_B, Timer2ABIntHandler);
    //
    // Configure the timer2A in edge count mode and Timer2B periodic timer
    //定时器2A边沿捕获模式,定时器2B周期模式
    MAP_TimerConfigure(TIMERA2_BASE,
    (TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME | TIMER_CFG_B_PERIODIC));
    // MAP_TimerConfigure(TIMERA2_BASE, (TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME));
    //
    // Set the detection edge
    //上升沿
    MAP_TimerControlEvent(TIMERA2_BASE, TIMER_A, TIMER_EVENT_POS_EDGE);
    //
    // Set the reload value
    //
    MAP_TimerLoadSet(TIMERA2_BASE, TIMER_A, 0xffff);
    MAP_TimerPrescaleSet(TIMERA2_BASE, TIMER_A, 0Xff);
    MAP_TimerLoadSet(TIMERA2_BASE, TIMER_B, 0xffff);
    MAP_TimerPrescaleSet(TIMERA2_BASE, TIMER_B, 0Xff);
    //
    // Enable TimerA capture event interrupt and TimerB time out interrupt
    //使能A事件及B溢出中断
    MAP_TimerIntEnable(TIMERA2_BASE, TIMER_CAPA_EVENT | TIMER_TIMB_TIMEOUT);
    //
    // Enable Timer
    同时启动AB
     MAP_TimerEnable(TIMERA2_BASE, TIMER_BOTH);
    }

  •  我也是用cc3200 timer_cc 这个例子, 在pin4 接入了 红外接收模块, 但都不进中断, 我不知道为什么?