BLE-CC254x-1.4.1中主机工程使用定时器中断定时产生LED闪烁信号,在与从机连接前启动定时器,用Timer3或Timer4定时闪烁周期会变慢,用Timer1不会
如题。
主机与从机连接采用找到信号最强的广播中的从机,并与之连接的方法。主机与从机都采用CC2541.
产生定时器中断的方法用了两种:
1、直接设置相关定时器的特殊寄存器。
2、采用ZStack-CC2530-2.3.0-1.4.0中的hal_timer.c(这是能找到的最新的hal_timer.c文件)。
结果都是一样。
经试验,应该是默认设置造成蓝牙发送或接收数据时,CPU会停机(halt),即相当于初始化时执行了:
HCI_EXT_HaltDuringRfCmd(HCI_EXT_HALT_DURING_RF_ENABLE);
可以在与从机连接前执行:
HCI_EXT_HaltDuringRfCmd(HCI_EXT_HALT_DURING_RF_DISABLE);
这样可以解决Tiner3或Timer4的问题。如有需要,在完成连接后再执行:
HCI_EXT_HaltDuringRfCmd(HCI_EXT_HALT_DURING_RF_ENABLE);
以上虽解决了Tiner3或Timer4的问题,但Timer1的不同表现又是为什么?从协议栈的hal_timer.c的说明里,可以认为Timer1,Timer3,Timer4应该可以完全由用户使用,出现这种差别应该是用户不可更改的代码中的工作机制带来的差异,这种差异会不会带来潜在的问题?
继续做了试验,采用Timer1,在与从机连接前执行:
HCI_EXT_HaltDuringRfCmd(HCI_EXT_HALT_DURING_RF_ENABLE);
LED灯的闪烁变慢,和前述的Timer3或Timer4的最初的现象一致。
原因似乎已找到,问题算是解决了吧。
但是,Timer1与Timer3/Timer4在初始化时针对蓝牙发送或接收数据时,CPU会否停机的设定不同,这样做的意义何在?