wireless_api.lst

来自「菜鸟,详细NRF24E1运用,程序,电路」· LST 代码 · 共 512 行 · 第 1/2 页

LST
512
字号
 236   1      
C51 COMPILER V9.00   WIRELESS_API                                                          11/09/2010 16:31:12 PAGE 5   

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

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

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

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

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

⌨️ 快捷键说明

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