本帖最后由 e08610318 于 2013-8-23 10:10 编辑
好久没有发帖了。
为了提高通信稳定性,最近把原来工作在2.4K波特率的设备更改到了1.2K,出了点问题:第一次唤醒成功后,设备就唤不醒了,2.4K下是Ok的。
调试了下,发现我自己写的协议栈有些BUG,主要调试现象是:
1.之所以第一次唤醒成功后就再也唤不醒了,发现在第一次唤醒成功后程序的确是执行了重新进入WOR模式的函数,但是进入WOR模式失败,估计仍然停留在空闲状态下,这个是我看电流的时候发现的。
2.在发出WOR滤波指令前发布SWORRST命令,问题仍然没有得到解决,通过读WORTIMER寄存器发现SWORRST命令发布后WORTIMER的值不会马上更改,最后我把程序改了下:不停的发布SWORRST直到读到的WORTIMER的高字节不小于某个值(根据“进入WOR时不能太靠近EVENT0事件点”),用的是while语句,语句块中还进行喂狗,担心执行时间太长,测了下OK,但是跑了不到一天,程序死掉了,估计也不行。
3.后来又看了下资料,做了下改动,2的改动不要了,然后我在退出WOR模式后立刻把RC晶振关掉,在需要回到WOR模式后我再把RC晶振重新打开,问题解决,但稳定性如何还在测试中。
个人感觉,这个问题还是和WOR定时器计数有关。相同字节长度的数据下,2.4K接收速度应该是1.2K的两倍,其中产生的时间差只能影响到WOR定时器的值,而WOR定时器又直接影响WOR周期的时序,感觉云里雾里的,这个问题的真正原因还没有找到......
|