CC3200 定时器捕获
请问下,我要设定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 接入了 红外接收模块, 但都不进中断, 我不知道为什么?