⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wireless_api.lst

📁 菜鸟,详细NRF24E1运用,程序,电路
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V9.00   WIRELESS_API                                                          11/13/2010 15:06:02 PAGE 5   

 237   1      
 238   1          irq_status=Rf24L01_ReadByte(STATUS);//read state word
 239   1      
 240   1          switch(irq_status&MASK_IRQ_FLAGS)   //取4 5 6 bit
 241   1          {
 242   2              case MASK_RX_DR_FLAG:                   //rf receive data
 243   2              {
 244   3                  if(Rf24L01_ReadByte(FIFO_STATUS) & MASK_RX_EMPTY)//empty fifo
 245   3                  {
 246   4                      irq_status =IDLE;
 247   4                  }
 248   3                  else
 249   3                  {                           
 250   4                      Rf24L01_RX(rev_buf);
 251   4                      gnDataPipeNumber=(irq_status>>1)&0x7;
 252   4                      irq_status = (unsigned char)RX_DR;
 253   4                  }
 254   3      
 255   3                  break;
 256   3              }
 257   2      
 258   2      
 259   2      
 260   2              case MASK_TX_DS_FLAG:                   //send rf data success (with ack response)
 261   2              {
 262   3                  irq_status = (unsigned char)TX_DS;            
 263   3                  break;
 264   3              }
 265   2      
 266   2              case MASK_MAX_RT_FLAG:                  //Maximum number of TX retries interrupt  If MAX_RT is set it must be cle
             -ared to enable further communication.
 267   2              {
 268   3                  irq_status = (unsigned char)MAX_RT; 
 269   3                  break;
 270   3              }
 271   2      
 272   2              case IDLE:
 273   2              {
 274   3                  irq_status = (unsigned char)IDLE;
 275   3                  break;
 276   3              }
 277   2      
 278   2              }
 279   1      
 280   1          if(Rf24L01_ReadByte(FIFO_STATUS) & MASK_RX_EMPTY)   // if empty clear interrupt      RQ
 281   1              Rf24L01_Clear_IRQ(MASK_IRQ_FLAGS);
 282   1      
 283   1          return irq_status;
 284   1      
 285   1      }
 286          
 287          
 288          //-----------------------------------------------------------------------------
 289          
 290          unsigned char Rf24L01_Set_Init(SetupData *drc)
 291          {
 292   1              unsigned char btemp;    
 293   1      
 294   1              RFCKEN = 1;                                     // enable L01 clock
 295   1              RF = 0;                                                                           //rf中断清零
 296   1              CE_LOW();                                                                               //选中RF芯片
 297   1      
C51 COMPILER V9.00   WIRELESS_API                                                          11/13/2010 15:06:02 PAGE 6   

 298   1              Rf24L01_Flush_RX();                                             //flush TX/RX FIFO to be empty
 299   1              Rf24L01_Flush_TX();                                             //
 300   1              Rf24L01_Clear_IRQ(MASK_IRQ_FLAGS);                              //clear IRQ STATUS register
 301   1      
 302   1              //------------------------------------------------------
 303   1              //1 set config
 304   1              //------------------------------------------------------  
 305   1                      //'comm config' default value:0000 1000
 306   1              //bit7 must be 0;
 307   1                      //bit6,0--enable,RX interrupt enable,IRQ pin active low
 308   1              //bit5,0--enable TX Succeed interrupt enable,IRQ pin active low
 309   1              //bit4,0--eanble TX time over interrupt enable,IRQ pin active low
 310   1              //bit3,CRC enable,if EN_AA be set,this bit will be forced to high
 311   1              //bit2,CRC width,0--one byte,1--two bytes
 312   1              //bit1,RF POWER ON/OFF,1--ON, 0--OFF
 313   1              //bit0,transmmit mode: 1--PTX,0--PRX
 314   1              btemp =0x0e;    
 315   1              if (drc->nOn == Dev_Normal) btemp +=0x01;               
 316   1              Rf24L01_WriteByte(WRITE_REG + CONFIG, btemp);
 317   1      
 318   1              //------------------------------------------------------
 319   1              //2 set ee_aa
 320   1              //------------------------------------------------------        
 321   1                      //'Enable Auto Acknowledgment'
 322   1                      // bit76 must be 00;
 323   1                      // bit 5-0 response to Pip5-0; bit: 1-en, 0-disen
 324   1                      // bit0 = 1;only enble pipe0    
 325   1                      // Enable Auto.Ack:Pipe0  
 326   1      
 327   1              Rf24L01_WriteByte(WRITE_REG + EN_AA, drc->nAutoAck);            
 328   1      
 329   1              //------------------------------------------------------
 330   1              //3 set en_rxaddr
 331   1              //------------------------------------------------------                  
 332   1                      //'Enabled RX addresses', default 0000 0011
 333   1              //bit76 must be 00;
 334   1                      //bit 5-0 response to Pip5-0, bit: 1-en, 0-disen
 335   1                      //pipe rx enble,bit0 = 1,only enable pipe0 RX
 336   1              Rf24L01_WriteByte(WRITE_REG + EN_RXADDR, drc->nRecvAddr);  
 337   1      
 338   1              //------------------------------------------------------
 339   1              //4 set setup_aw
 340   1              //------------------------------------------------------
 341   1                      //'address width',default 0000 0011
 342   1              //bit765432 must be 000000;
 343   1              //bit10,value must be 1~3, 1--3Bytes width,2--4Bytes,3--5Bytes
 344   1                      //address width is 5 bytes;bit10: 00--illegal,01--3bytes,10--4bytes,11--5bytes
 345   1              Rf24L01_WriteByte(WRITE_REG + SETUP_AW, 0x03);
 346   1      
 347   1              //------------------------------------------------------
 348   1              //5 set setup_retr
 349   1              //------------------------------------------------------  
 350   1                      //'Auto. Retransmite delay time and count', default 0000 0011
 351   1              //delay time(bit7~3):(bit7~3+1)*250+86us;
 352   1              //retran count(bit2~0):0--disenable retran,otherwise 1~15 times
 353   1                      //0x10;    
 354   1                      //retran delay time:250us+86us
 355   1                      //drc->Retran;
 356   1              btemp = (drc->nART_Factor&0x0f)<<4;                     
 357   1              btemp += (drc->nRetran > 15 ? 15 : drc->nRetran);
 358   1              btemp=0x17;//self                       
 359   1              Rf24L01_WriteByte(WRITE_REG + SETUP_RETR, btemp);
C51 COMPILER V9.00   WIRELESS_API                                                          11/13/2010 15:06:02 PAGE 7   

 360   1      
 361   1              //------------------------------------------------------
 362   1              //6 set rf_ch
 363   1              //------------------------------------------------------  
 364   1                      //'rf frequency channel' 2400+rf_ch,default:0000 0010
 365   1                      // bit7 must be 0
 366   1              // bit6~0 rf frequency channel,one step deputy 1MHZ
 367   1              // we use frequency at less than 2.49GHZ,beause WLAN use frequency band 2.4G~2.4835Ghz
 368   1              // we choice rf_ch = 100; thats 2.5GHZ
 369   1                      // default we choice frequency range 2.495GHz~2.513GHZ  channel
 370   1              if (drc->nChannel>122)
 371   1              {
 372   2                      drc->nChannel = 0;
 373   2              }       
 374   1                      
 375   1              Rf24L01_WriteByte(WRITE_REG + RF_CH, drc->nChannel);
 376   1      
 377   1              //------------------------------------------------------
 378   1              //7 set rf_setup
 379   1              //------------------------------------------------------ 
 380   1                      //'RF setup' default 0000 1111
 381   1              // bit7~4 must be 00000
 382   1              // bit 3 data rate :0--1Mbps,1--2Mbps;
 383   1              // bit 2~1 rf power:00,-18dbm,,01,-12dbm,,10,-6dbm,,11,0dbm
 384   1              // bit 0 must be 1
 385   1              btemp =((drc->nPower&0x0f)>3 ? 3:(drc->nPower&0x0f))<<1;  
 386   1              btemp +=0x01;
 387   1              if((drc->nPower&0xf0)>0) btemp += 0x08;
 388   1              
 389   1              //btemp |= 0x20;
 390   1              btemp=0x0e;      //self
 391   1              Rf24L01_WriteByte(WRITE_REG + RF_SETUP, btemp);
 392   1      
 393   1              //------------------------------------------------------
 394   1              //8 set rx_addr_p0
 395   1              //------------------------------------------------------ 
 396   1                      //pipe0 rx address buf 
 397   1      
 398   1              Rf24L01_WriteMultiByte(WRITE_REG + RX_ADDR_P0,drc->aAddr1,5);
 399   1      
 400   1              //------------------------------------------------------
 401   1              //9 set rx_addr_p1
 402   1              //------------------------------------------------------ 
 403   1                      //'pipe1 rx payload width'              
 404   1                      //'pipe0 rx payload width' 00000000
 405   1              //bit76 must be 00
 406   1              //bit5~0,at less than must be one byte
 407   1              //the most width is 32 bytes 
 408   1              if (drc->nLen>32)
 409   1              {
 410   2                      drc->nLen = 32;
 411   2              }
 412   1              else if (drc->nLen == 0)
 413   1              {
 414   2                      drc->nLen = 1;
 415   2              } 
 416   1      
 417   1              Rf24L01_WriteByte(WRITE_REG + RX_PW_P0, drc->nLen);       
 418   1      
 419   1              btemp = drc->nRecvAddr;
 420   1              btemp = btemp>>1;
 421   1              if (btemp&1)
C51 COMPILER V9.00   WIRELESS_API                                                          11/13/2010 15:06:02 PAGE 8   

 422   1              {
 423   2                      //81 get rx_addr_p1
 424   2                      Rf24L01_WriteMultiByte(WRITE_REG + RX_ADDR_P1,drc->aAddr2,5);
 425   2      
 426   2                      //91 get rx_pw_p1
 427   2                      Rf24L01_WriteByte(WRITE_REG + RX_PW_P1, drc->nLen);
 428   2              }
 429   1      
 430   1              //------------------------------------------------------
 431   1              //10 set tx_addr
 432   1              //------------------------------------------------------ 
 433   1                      //tx address buf        
 434   1              Rf24L01_WriteMultiByte(WRITE_REG + TX_ADDR,drc->aAddr1,5);
 435   1      
 436   1              
 437   1              //------------------------------------------------------
 438   1              //11 ACTIVATE
 439   1              //------------------------------------------------------ 
 440   1       //     Rf24L01_WriteByte(ACTIVATE, 0x73); 
 441   1      
 442   1              //------------------------------------------------------
 443   1              //12 get FEATURE 
 444   1              //------------------------------------------------------
 445   1              Rf24L01_WriteByte(WRITE_REG + FEATURE, 0x05); 
 446   1              
 447   1              //------------------------------------------------------
 448   1              //13 get DYNPD
 449   1              //------------------------------------------------------
 450   1              Rf24L01_WriteByte(WRITE_REG + DYNPD, drc->nRecvAddr);
 451   1      
 452   1      
 453   1              RF = 1; 
 454   1              if(drc->nOn == Dev_Normal) 
 455   1              {
 456   2                      CE_HIGH();
 457   2              }       
 458   1      
 459   1              return 0;
 460   1      }
 461          
 462          void wireless_init(void)
 463          {
 464   1              SetupData       mSetup; 
 465   1      
 466   1              memset(&mSetup,0,sizeof(SetupData));    //chu shi hua wei 0
 467   1              mSetup.nChannel=20;
 468   1              mSetup.nPower=3;           //0dbm
 469   1              mSetup.nRecvAddr=0x01;
 470   1              mSetup.nAutoAck=0x01;
 471   1              mSetup.nLen=32;                                 
 472   1              mSetup.nRetran=8;
 473   1              mSetup.nOn=1;
 474   1      
 475   1              memcpy(mSetup.aAddr1,address,5);                //copy the address      
 476   1              mSetup.nOn=1;
 477   1                      
 478   1              Rf24L01_Set_Init((SetupData *)&mSetup);
 479   1      
 480   1      }

C51 COMPILATION COMPLETE.  3 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -