zoukankan      html  css  js  c++  java
  • 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;
                   }
         }
    }

  • 相关阅读:
    Django框架详细介绍---ORM相关操作---select_related和prefetch_related函数对 QuerySet 查询的优化
    Django框架详细介绍---ORM相关操作
    Django框架详细介绍---ORM---图书信息系统专题训练
    Django框架详细介绍---模板系统
    Django框架详细介绍---视图系统
    Django简单实例
    Django练习
    Django的rom
    web框架本质及Django的安装
    面向对象基础复习
  • 原文地址:https://www.cnblogs.com/wangjinshan/p/9323766.html
Copyright © 2011-2022 走看看