fap.lst

来自「非常全的nrf2401设计资料」· LST 代码 · 共 812 行 · 第 1/3 页

LST
812
字号
 252   2          if(fap_mode == FAP_RECEIVING)
 253   2          {
 254   3            fap_goto_idle_mode();  
 255   3          }
 256   2         
 257   2          // If TX setup modified
 258   2          if(fap_curr_tx_setup != (datainput -> pipe))
 259   2          {  
 260   3            hal_nrf_set_operation_mode(HAL_NRF_PTX);  
 261   3            hal_nrf_open_pipe(HAL_NRF_PIPE0, EN_AA);
 262   3        
 263   3            if(datainput -> pipe == FAP_DEVICE0)
 264   3            {
 265   4              hal_nrf_set_address(HAL_NRF_TX, fap_p0_adr);
 266   4              hal_nrf_set_address(HAL_NRF_PIPE0, fap_p0_adr);
 267   4            }
 268   3            else
 269   3            { 
 270   4              hal_nrf_get_address(HAL_NRF_PIPE1, &fap_general_buffer.pl[0]);
 271   4      
 272   4              if(datainput -> pipe != FAP_DEVICE1)
 273   4              {
 274   5                switch(datainput -> pipe)
 275   5                {
 276   6                  default:
 277   6                  case FAP_DEVICE2:
 278   6                    hal_nrf_get_address(HAL_NRF_PIPE2, &fap_general_buffer.pl[0]);          
 279   6                    break;
 280   6                  case FAP_DEVICE3:
 281   6                    hal_nrf_get_address(HAL_NRF_PIPE3, &fap_general_buffer.pl[0]);       
 282   6                    break;
 283   6                  case FAP_DEVICE4:
 284   6                    hal_nrf_get_address(HAL_NRF_PIPE4, &fap_general_buffer.pl[0]);
 285   6                    break;
 286   6                  case FAP_DEVICE5:
 287   6                    hal_nrf_get_address(HAL_NRF_PIPE5, &fap_general_buffer.pl[0]);
 288   6                    break;
 289   6                }
 290   5              }
 291   4              hal_nrf_set_address(HAL_NRF_PIPE0, &fap_general_buffer.pl[0]);
 292   4              hal_nrf_set_address(HAL_NRF_TX, &fap_general_buffer.pl[0]);
 293   4            }    
 294   3            fap_curr_tx_setup = datainput -> pipe;    
 295   3          }
 296   2          fap_ch_switch_counter=0; 
 297   2          fap_retry_extend_counter=0;
 298   2          fap_try_counter=0;
 299   2       
 300   2          fap_latency_setup = tx_timeout;
C51 COMPILER V7.50   FAP                                                                   04/09/2009 10:12:50 PAGE 6   

 301   2      
 302   2          if(tx_timeout==0)
 303   2          {
 304   3            FAP_SET_BIT(fap_status, FAP_TX_RX_INFINITE_TIMEOUT_EN);
 305   3          }
 306   2          else
 307   2          {
 308   3            fap_latency_counter = tx_timeout;
 309   3            FAP_CLEAR_BIT(fap_status, FAP_TX_RX_INFINITE_TIMEOUT_EN);
 310   3          }
 311   2      
 312   2          hal_nrf_flush_tx();
 313   2          hal_nrf_write_tx_pload(&(datainput -> pl[0]), datainput -> pl_length);
 314   2      
 315   2          FAP_SET_BIT(fap_status, FAP_TX_SUCCESS);      // Transmission by default "success"
 316   2        
 317   2          if(FAP_GET_BIT(fap_status, FAP_RADIO_PWR_UP) && !FAP_GET_BIT(fap_status, FAP_CH_SYNC_EN) )
 318   2          {  
 319   3            CE_HIGH();           
 320   3          }
 321   2          else
 322   2          {
 323   3            if(!FAP_GET_BIT(fap_status, FAP_RADIO_PWR_UP))
 324   3            {
 325   4              hal_nrf_set_power_mode(HAL_NRF_PWR_UP);
 326   4              FAP_SET_BIT(fap_status, FAP_RADIO_PWR_UP);
 327   4              fap_radio_startup_counter = FAP_RADIO_PWR_UP_DELAY;
 328   4            }
 329   3      
 330   3            FAP_SET_BIT(fap_status, FAP_START_NEW_TX);
 331   3          }
 332   2      
 333   2          fap_mode=FAP_TRANSMITTING;
 334   2          
 335   2           FAP_INTERRUPTS_ENABLE();
 336   2           return true;
 337   2        } 
 338   1        else // Check if criteria for starting new TX when in TX mode is fulfilled
 339   1        if(!FAP_GET_BIT(fap_status, FAP_CH_SYNC_EN) && \  
 340   1                fap_curr_tx_setup == (datainput -> pipe) && \           
 341   1                !hal_nrf_tx_fifo_full() && \
 342   1                tx_timeout == fap_latency_setup \              
 343   1        )       
 344   1        {
 345   2           hal_nrf_write_tx_pload(&(datainput -> pl[0]), datainput -> pl_length);
 346   2      
 347   2          FAP_INTERRUPTS_ENABLE();
 348   2          return true;
 349   2        }
 350   1        else
 351   1        {
 352   2          FAP_INTERRUPTS_ENABLE();
 353   2          return false;
 354   2        }
 355   1      }
 356          
 357          void fap_flush_tx_fifo(void)
 358          {
 359   1        FAP_INTERRUPTS_DISABLE();
 360   1      
 361   1        hal_nrf_flush_tx();
 362   1      
C51 COMPILER V7.50   FAP                                                                   04/09/2009 10:12:50 PAGE 7   

 363   1        FAP_INTERRUPTS_ENABLE();
 364   1      }
 365          
 366          bool fap_write_ack_pload(fap_tx_rx_struct_t* ackdata)
 367          {
 368   1        FAP_INTERRUPTS_DISABLE();
 369   1      
 370   1        if(!hal_nrf_tx_fifo_full() && !(ackdata -> pl_length > FAP_MAX_ACK_PL_LENGTH))
 371   1        {
 372   2          hal_nrf_write_ack_pload(ackdata -> pipe, &(ackdata -> pl[0]), ackdata -> pl_length);
 373   2          FAP_INTERRUPTS_ENABLE();
 374   2          return true;
 375   2        }
 376   1        else
 377   1        {
 378   2          FAP_INTERRUPTS_ENABLE();
 379   2          return false;
 380   2        }
 381   1      }
 382          
 383          fap_modes_t fap_get_mode(void)
 384          {
 385   1        return fap_mode;
 386   1      }
 387          
 388          bool fap_read_rx_fifo(fap_tx_rx_struct_t* return_struct)
 389          {  
 390   1        uint16_t tempvalue;
 391   1      
 392   1        FAP_INTERRUPTS_DISABLE(); 
 393   1        
 394   1        if(fap_rx_dr_flag)
 395   1        {
 396   2          tempvalue = hal_nrf_read_rx_pload(&(return_struct -> pl[0])); 
 397   2          FAP_INTERRUPTS_ENABLE();          
 398   2          
 399   2          return_struct -> pipe=(uint8_t)(tempvalue>>8);   // MSByte, pipe
 400   2          return_struct -> pl_length=(uint8_t)(tempvalue); // LSByte=length       
 401   2          
 402   2          if(hal_nrf_rx_fifo_empty())
 403   2          {
 404   3            fap_rx_dr_flag = false;
 405   3          }
 406   2          
 407   2          return true;
 408   2        }
 409   1        else
 410   1        {
 411   2          FAP_INTERRUPTS_ENABLE();  
 412   2          return false;
 413   2        }
 414   1      }
 415          
 416          bool fap_tx_success(void)
 417          {
 418   1        return FAP_GET_BIT(fap_status, FAP_TX_SUCCESS);
 419   1      }
 420          
 421          bool fap_select_radio_idle_mode(fap_radio_idle_modes_t mode)
 422          {
 423   1        if(fap_mode==FAP_IDLE)
 424   1        {
C51 COMPILER V7.50   FAP                                                                   04/09/2009 10:12:50 PAGE 8   

 425   2          FAP_INTERRUPTS_DISABLE();
 426   2       
 427   2          if(mode == FAP_PDOWN_IDLE)
 428   2          {
 429   3            FAP_SET_BIT(fap_status, FAP_PDOWN_IDLE_EN);
 430   3        
 431   3            if(fap_mode==FAP_IDLE)
 432   3            {
 433   4              hal_nrf_set_power_mode(HAL_NRF_PWR_DOWN);
 434   4              FAP_CLEAR_BIT(fap_status, FAP_RADIO_PWR_UP);
 435   4            }
 436   3          }
 437   2          else
 438   2          {
 439   3            FAP_CLEAR_BIT(fap_status, FAP_PDOWN_IDLE_EN);  
 440   3          
 441   3            // Update radio power mode if FAP is in idle mode
 442   3            hal_nrf_set_power_mode(HAL_NRF_PWR_UP);
 443   3            FAP_SET_BIT(fap_status, FAP_RADIO_PWR_UP);
 444   3          }
 445   2          
 446   2          FAP_INTERRUPTS_ENABLE();
 447   2          
 448   2          return true;
 449   2        }
 450   1        else
 451   1        {
 452   2          return false;
 453   2        }
 454   1      }
 455          
 456          uint16_t fap_get_tries(void)
 457          {
 458   1        return fap_try_counter;
 459   1      }
 460          
 461          uint16_t fap_get_ch_switches(void)
 462          {
 463   1        return  fap_ch_switch_counter;
 464   1      }
 465          
 466          void fap_ch_sync_enable()
 467          { 
 468   1        FAP_INTERRUPTS_DISABLE();
 469   1      
 470   1        FAP_SET_BIT(fap_status, FAP_CH_SYNC_EN);
 471   1      
 472   1        FAP_INTERRUPTS_ENABLE();
 473   1      }
 474          
 475          void fap_ch_sync_disable()
 476          {
 477   1        FAP_INTERRUPTS_DISABLE();
 478   1      
 479   1        FAP_CLEAR_BIT(fap_status, FAP_CH_SYNC_EN);
 480   1      
 481   1        FAP_INTERRUPTS_ENABLE();
 482   1      }
 483           
 484          uint8_t fap_get_ch_offset()
 485          {
 486   1        int8_t sync_var;
C51 COMPILER V7.50   FAP                                                                   04/09/2009 10:12:50 PAGE 9   

 487   1        
 488   1        FAP_INTERRUPTS_DISABLE();
 489   1        
 490   1        sync_var = (fap_ch_tab_idx_tx - fap_rx_channel_guess); 
 491   1        
 492   1        if(FAP_GET_BIT(fap_status, FAP_PDOWN_IDLE_EN))
 493   1        {
 494   2          sync_var -= FAP_RADIO_PWR_UP_DELAY; 
 495   2        }
 496   1         
 497   1        if(sync_var < 0)
 498   1        {
 499   2          sync_var += FAP_CH_TAB_SIZE;
 500   2        }
 501   1        
 502   1        FAP_INTERRUPTS_ENABLE();  
 503   1        
 504   1        return sync_var;   
 505   1      }
 506          
 507          void fap_nrf_isr_function(void)
 508          {
 509   1        static uint8_t random_seed;
 510   1      
 511   1        FAP_TIMER_IRQ_DISABLE();                      
 512   1      
 513   1        fap_general_byte=hal_nrf_get_irq_flags(); // Get/clear IRQ flags
 514   1        

⌨️ 快捷键说明

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