A7139射频模块wor配置解析

wor功能配置代码:

void  a7139_wor(void) {    

  //A7139_WritePageA(8,0x0445);//GPIO1 按帧同步 GPIO2 单片机唤醒

 A7139_WritePageA(8,0x0005);//GPIO1 按帧同步  只用一个引脚 唤醒单片机。

  A7139_WritePageA(1,0x8013); 活动时间8ms       睡眠时间 152ms

 RCOSC_Cal(); //  rc时钟校准

 A7139_WritePageA(2,0x0030);  开启rc时钟  和前导码唤醒

  A7139_WriteReg(0xd,0x0800); //选择strobe命令控制   wor功能开启
  A7139_WriteReg(0xf, 0x22C0);// 选择fifo模式   wor功能开启

}

1.  配置wor 1 寄存器。 活动周期和睡眠周期根据需要配置。但是活动周期必须要保证能接收到一串数据。活动时间越短功耗越低,睡眠周期越长功耗越低。

               A7139_WritePageA(1,0x8013); //活动周期8ms,睡眠周期152ms 

2.配置wor 2寄存器。唤醒次数根据实际情况设置,默认为1次。唤醒选择配置为前导码唤醒。开启rc时钟。 唤醒 MCU 模式选择 :通过 WOR 模式,在接收到包后唤醒 MCU
3.配置GPIO寄存器。 把GIO1配制成 帧同步信号,把GIO2 配制成单片机唤醒信号。

4.在管脚控制寄存器(0D h)和模式控制(0F h)里把wor功能打开,并把模块设置成FIFO模式。

注意:

a.接收方的前导码必须大于0 ,小于等于发射方的前导码

b.GIO管脚必须配制成中断,只有中断才能检测信号变化。

c.在有很多射频信号的地方,前导码设置过短芯片会被误触发。(检测前导码8B   仅供参考)

d.活动时间设置必须要保证能检测到完整的前导码。前导码越长,活动时间越长。

e.唤醒单片机后需要延时一段时间才能读出数据(100ms 仅供参考)

中断: 

void EXTI0_IRQHandler(void){

         EXTI_ClearITPendingBit(EXTI_Line0); //

        delay_ms(100);   

         A7139_ReadFIFO(datatemp,18);  进入中断函数后读取fifo里面的数据

        if(datatemp313[17]==0x5a)  

        {    

            datatemp[0]=0x00;     

       }   

}

//void EXTI1_IRQHandler(void) {       

  //  EXTI_ClearITPendingBit(EXTI_Line1);

//}

 void RCOSC_Cal(void)          //  RC时钟 校准
{
     uint16_t tmp;
     A7139_WritePageA(WOR2_PAGEA, A7139Config_PageA[WOR2_PAGEA] | 0x0010);           //enable RC OSC
     while(1)
     {
               A7139_WritePageA(WCAL_PAGEA, A7139Config_PageA[WCAL_PAGEA] | 0x0001);   //set ENCAL=1 to start RC OSC CAL
               do{
                        tmp = A7139_ReadPageA(WCAL_PAGEA);
               }while(tmp & 0x0001);                      
               tmp = (A7139_ReadPageA(WCAL_PAGEA) & 0x03FF);            //read NUMLH[8:0]
               tmp >>= 1;                    
               if((tmp > 183) && (tmp < 205))                  //NUMLH[8:0]=194+-10 (PF8M=6.4M)
               //  if((tmp > 232) && (tmp < 254))     //NUMLH[8:0]=243+-10 (PF8M=8M)
               {
                        A7139_WritePageA(WCAL_PAGEA,0x0000); //结束后清零
                        break;
               }
     }
}

原文地址:https://www.cnblogs.com/wangjinshan/p/9323766.html