1101_InitWOR(u32Time){ //uint16T_Event0=60;//把EVENT0的时间设定为1S u32EVENT0=0; u16WOR_RES=1; u16WOR_rest=1;//2^(5*WOR_RES)的值 u8t; WORmode=1;//开启WORMOD模式 //当输入数据不符合规则的时候返回错误 if(Time<15|Time>61946643) return0; /*WORWOR_RES设定以WOR_RES所能区分的最大时限区分WOR_RES大小 WOR_RES值时间(极限最大值)(ms) *(最小值) */ if(Time<1890)WOR_RES=0; elseif(Time<60494)WOR_RES=1; elseif(Time<1935832)WOR_RES=2; elseif(Time<61946643)WOR_RES=3; if(!WOR_RES) WOR_rest=1; else { for(t=0;t<(5*WOR_RES);t++) WOR_rest*=2; } EVENT0=F_xosc/1000; if(EVENT0>Time) { EVENT0=EVENT0*Time; EVENT0=EVENT0/(750*WOR_rest); } else { EVENT0=(Time/(750*WOR_rest))*EVENT0; } xxx0_SIDLE);//空闲模式 xxx0_MCSM2,0x10);//RX_TIME0占空比最大 //在TX,RX后自动校准XSOC时限(10)149-155uS xxx0_MCSM0,0x18);//校准FS_AUTOCAL[1:0]01重IDLE转到TXORRX模式时 //写入事件0时间 xxx0_WOREVT1,(u8)(EVENT0>>8));//HighbyteEvent0timeout xxx0_WOREVT0,(u8)EVENT0);//LowbyteEvent0timeout. //启动WORRCosc校准 //因为进入休眠后只使用RC频率周期,RC受环境和温度影响较大,所以必须一段时间或者WOR唤醒后重新校准一次时钟. //在WOR没启动之前RC须得先行启动 //tEvent1时间设置为最大,设置T_event1~ xxx0_WORCTRL,0x78|WOR_RES);//tEvent1=0111// 把SO口设置成通知口当有数据过来时置低 xxx0_IOCFG2,0x06);//0x24); xxx0_SFRX); xxx0_SWORRST);//复位到事件1 xxx0_SWOR);//启动WOR //xxx0_SPWD);//进入断电模式
无线芯片唤醒 来自淘豆网m.daumloan.com转载请标明出处.