无线芯片唤醒.doc_第1页
无线芯片唤醒.doc_第2页
无线芯片唤醒.doc_第3页
无线芯片唤醒.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

还是用软件WOR吧,硬件WOR太麻烦1. u8 CC1101_InitWOR(u32 Time)2. 3. /uint16 T_Event0=60; /把 EVENT0的时间设定为1S4. u32 EVENT0=0;5. u16 WOR_RES=1;6. u16 WOR_rest=1; /2(5*WOR_RES)的值7. u8 t;8.9. WORmode =1; /开启WORMOD模式10. /当输入数据 不符合规则的时候返回错误11. if(Time61946643) 12. return 0;13. /* WOR WOR_RES设定14. 以WOR_RES所能区分的最大时限 区分WOR_RES大小15. 16. WOR_RES值时间(极限最大值)(ms)17. 0 1890.4615 *14.34 (最小值)18. 1 60494.769219. 2 1935832.615320. 3 61946643.692321. */22. if(Time1890) WOR_RES=0;23. else if(Time60494) WOR_RES=1;24. else if(Time1935832) WOR_RES=2;25. else if(Time61946643) WOR_RES=3;26. if(!WOR_RES) 27. WOR_rest=1;28. else29. 30. for(t=0;tTime)35. 36. EVENT0 = EVENT0*Time;37. EVENT0 = EVENT0/(750*WOR_rest); 38. 39. else40. 41. EVENT0 = (Time/(750*WOR_rest)*EVENT0;42. 43. 44. halSpiStrobe(CCxxx0_SIDLE); /空闲模式45.46. halSpiWriteReg(CCxxx0_MCSM2, 0x10); /RX_TIME 0 占空比最大47. /在TX,RX后 自动校准XSOC时限 (10) 149-155uS48. halSpiWriteReg(CCxxx0_MCSM0, 0x18); /校准 FS_AUTOCAL1:0 01 重IDLE转到TX OR RX模式时49. /写入 事件0时间50. halSpiWriteReg(CCxxx0_WOREVT1, (u8)(EVENT08); / High byte Event0 timeout51. halSpiWriteReg(CCxxx0_WOREVT0, (u8)EVENT0); / Low byte Event0 timeout.52. /启动 WOR RCosc校准53. /因为进入休眠后只使用RC频率周期,RC受环境和温度影响较大,所以必须一段时间或者WOR唤醒后重新校准一次时钟.54. /在WOR没启动之前 RC须得先行启动55. / tEvent1时间设置为最大,设置 T_event1 1.4 ms56. halSpiWriteReg(CCxxx0_WORCTRL, 0x78| WOR_RES); /tEvent1 =011157. / 把SO口 设置成通知口 当有数据过来时 置低58. halSpiWriteReg(CCxxx0_IOCFG2, 0x06); /0x24);59. 60. halSpiStrobe(CCxxx0_SFRX); 61. 62. halSpiStrobe(CCxxx0_SWORRST); /复位到 事件163. halSpiStrobe(CCxxx0_SWOR); /启动WOR64. 65. / CC1101_WriteCode(CCxxx0_SPWD); /进入断电模式66. return 1;67.68. 复制代码电流能看出有突变来,应该是进入wor模式了,但是接收不到数据,GDO2没有电平变化;如果按照你说的软件怎么做?用430定期唤醒无线吗? 硬WOR是我开始就使用的,后来和别的公司技术牛人交流以后,人家都笑了,他们都不用硬件WOR,都用软件WOR。后来我也决定用软WOR了。软WOR不 用考虑那么多配置,自由设定占空比,而且430的定时器CCRx能够实现灵活控制,比较方便。唯一缺点就是硬件WOR的一些功能需要你用软件来实现,比如 RSSI达不到要求时自动进入SLEEP,这个就需要软件来实现了。在程序中直接读取校准OSCCAL的值,修改后再写进去不就可以了吗?为什么要这么麻烦:在烧写程序时写到EEPROM里面,再在程序中读取? 校准寄存器在单片机复位时是自动设置的一般情况下,可以不管它,但是遇到很强的干扰时,校准数据可能会变(具体放在哪里不清楚,反正我们曾经碰到过这种情况,并且比例比较大),所以就在烧写芯片时把校正值放在FLASH中(不容易改变),然后在程序初始化前读出来再写入OSCCAL中。为什么要写到flash中呢,直接在程序程序初始化前直接用命令OSCCAL=0x7f;不就可以了吗?OSCCAL=0x7f是校准值吗?鬼知道你那是校准到什么值的呢,假如人家要的是准确的1。2MHz内部振荡,你能随便乱写一个数字就是吗,所以才放到FLASH 里面。实际上是从芯片内部校准值保存的位置读出来的,不是想当然的随便写的一个数值你的意思是说每一片IC的校准值都不一样,要经过测试后才能写到flash中,方便程序读取吗?当然是每个芯片生产时都要校验的,1总线产品不是每个的ID都不一样吗,那就是每个都专门刻的值。人家校准值的意思你搞懂了么,就是为了得到比较准确的值,是由芯片厂去做的,又不要你去校准。人家校准了放在了一个专门位置你读就可以了,就和芯片代码值一样。这样感觉很麻烦啊,如要批量生产1000片,那么就需要测试1000片,然后又要分别写flash100次啊?又不要你专门为这事去写FLASH,很多编程器不是有个选项吗点一个钩就不再管了,烧写代码时就一并做了的事。对于你说的:到FLASH 里面。实际上是从芯片内部校准值保存的位置读出来的,不是想当然的随便写的一个数值我不太认同。这里还是最上面我说的那样,你没有搞清校准值到底来干嘛的。那是为了准确的得到一些标定的振荡值,例如TINY13标称是9.6M,他的校准值有可能是0到7F之间的任何一个数,和你要弄到最大值毫不相干的。至于写到FLASH里面的真实用途,可能是zrl700424说的那样,也可能是为了得到一个使用者自己想得到的振荡频率,而这个频率也是每个芯片都不一 定一样的,比如为了每个芯片产生10M的频率那么这个值就只有用户自己去标定,而结果就每个芯片不完全相同,所以要找个地方放起来,每次芯片启动时才是自 己的准确值。那个校准值呢,每次芯片复位会丢一个出厂值进去,这个出厂值就是该芯片在 25摄氏度 5V供电环境下与融丝位指定的震荡频率最接近频率所需的校准值不过,在我个人看来,这个校准是拿来让你的MCU对外找平衡的举例来说,如果你设备里需要一个可变频率方波发生器,精度要求0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论