为了提高通信稳定性,最近把原来工作在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晶振重新打开,问题解决,但稳定性如何还在测试中。