fap.lst

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

LST
812
字号
 515   1        if(fap_mode != FAP_IDLE)
 516   1        {
 517   2          if(fap_general_byte & ((1<<MAX_RT)))
 518   2          {
 519   3            fap_try_counter += (FAP_NRF_AUTO_RETRIES+1);
 520   3              
 521   3            fap_retry_extend_counter= (fap_retry_extend_counter+1) % FAP_AUTO_RETRIES_EXTEND;
 522   3          
 523   3            if(fap_retry_extend_counter==0)
 524   3            {
 525   4              if(((fap_ch_switch_counter+1)%FAP_CH_TAB_SIZE) == 0)
 526   4              { 
 527   5                fap_ch_tab_idx_tx = fap_lfsr_get(random_seed, FAP_CH_TAB_SIZE);  
 528   5              }
 529   4              else
 530   4              {
 531   5                fap_ch_tab_idx_tx = fap_lfsr_get(0, FAP_CH_TAB_SIZE);    
 532   5              }   
 533   4              
 534   4              CE_LOW();                      
 535   4              hal_nrf_set_rf_channel(fap_ch_tab[fap_ch_tab_idx_tx]);                  
 536   4              fap_ch_switch_counter++;
 537   4            }
 538   3      
 539   3            fap_latency_counter -= (FAP_NRF_AUTO_RETRIES+1); 
 540   3            if(fap_latency_counter<1 && !FAP_GET_BIT(fap_status, FAP_TX_RX_INFINITE_TIMEOUT_EN))    
 541   3            {
 542   4              FAP_CLEAR_BIT(fap_status, FAP_TX_SUCCESS);
 543   4              CE_LOW();
 544   4              hal_nrf_clear_irq_flag(MAX_RT); 
 545   4              fap_set_system_idle();
 546   4            }
 547   3            else
 548   3            {
C51 COMPILER V7.50   FAP                                                                   04/09/2009 10:12:50 PAGE 10  

 549   4              hal_nrf_clear_irq_flag(MAX_RT);
 550   4              CE_HIGH();                     
 551   4            }
 552   3          }
 553   2          else
 554   2          {
 555   3            if(fap_general_byte & ((1<<TX_DS)))
 556   3            {
 557   4              hal_nrf_clear_irq_flag(TX_DS);
 558   4              if(fap_mode==FAP_TRANSMITTING) 
 559   4              { 
 560   5             
 561   5                 // Adjusts "guess counter" 
 562   5                fap_rx_channel_guess = (fap_ch_tab_idx_tx + 1) % FAP_CH_TAB_SIZE;                  
 563   5                fap_modify_timer_period();
 564   5              
 565   5                // Get number of tries. Add 1 for 1st attempt.                   
 566   5                fap_try_counter += (hal_nrf_get_transmit_attempts()+1);  
 567   5              
 568   5                // Get "random" seed fom number of sent packages
 569   5                // Used when altering channel search order
 570   5                random_seed = random_seed+fap_try_counter;  
 571   5                   
 572   5                FAP_SET_BIT(fap_status, FAP_TX_SUCCESS);
 573   5             
 574   5                if(hal_nrf_tx_fifo_empty())
 575   5                {
 576   6                  fap_set_system_idle();
 577   6                }
 578   5                else
 579   5                {
 580   6                  fap_retry_extend_counter = 0;
 581   6                  fap_try_counter = 0;
 582   6                  fap_latency_counter = fap_latency_setup;
 583   6                }
 584   5                                                   
 585   5                // Get "random" seed fom number of sent packages
 586   5                // Used when altering channel search order             
 587   5              } 
 588   4            }
 589   3      
 590   3            if(fap_general_byte & ((1<<RX_DR)))
 591   3            {
 592   4              hal_nrf_clear_irq_flag(RX_DR);
 593   4              fap_rx_dr_flag = true;
 594   4              fap_hold_rx_channel = FAP_RX_CH_HOLD_PERIODS;  // Applies in RX mode only
 595   4            }
 596   3          }     
 597   2        }
 598   1        
 599   1        FAP_TIMER_IRQ_ENABLE();  
 600   1      }
 601          
 602          void fap_timer_isr_function(void)
 603          {
 604   1        FAP_NRF_IRQ_DISABLE();                    
 605   1        
 606   1        if(fap_mode==FAP_TRANSMITTING) 
 607   1        { 
 608   2          if(fap_radio_startup_counter>0)      
 609   2          {
 610   3            fap_radio_startup_counter--;
C51 COMPILER V7.50   FAP                                                                   04/09/2009 10:12:50 PAGE 11  

 611   3          }
 612   2          else
 613   2          if(FAP_GET_BIT(fap_status, FAP_START_NEW_TX))
 614   2          {
 615   3            CE_HIGH();                             
 616   3            FAP_CLEAR_BIT(fap_status, FAP_START_NEW_TX);
 617   3          }     
 618   2        }
 619   1        else  
 620   1        if(fap_mode==FAP_RECEIVING)
 621   1        {   
 622   2          if(FAP_GET_BIT(fap_status, FAP_TX_RX_INFINITE_TIMEOUT_EN) || (!FAP_GET_BIT(fap_status, FAP_TX_RX_INFIN
             -ITE_TIMEOUT_EN) && fap_latency_counter>0))
 623   2          {     
 624   3            fap_latency_counter--;
 625   3            if(!FAP_GET_BIT(fap_status, FAP_LP_RX_EN))    
 626   3            {  
 627   4              fap_ch_tab_idx_rx = (fap_ch_tab_idx_rx+1) % FAP_CH_TAB_SIZE;             
 628   4                
 629   4              if(fap_hold_rx_channel == 0)
 630   4              {     
 631   5                CE_LOW();
 632   5                hal_nrf_set_rf_channel(fap_ch_tab[fap_ch_tab_idx_rx]);   
 633   5                CE_HIGH();
 634   5              }
 635   4              else
 636   4              {
 637   5                fap_hold_rx_channel--;
 638   5              } 
 639   4            } 
 640   3            else
 641   3            {
 642   4              if(fap_timer_period==0)
 643   4              {
 644   5                // Change channel
 645   5                if(fap_timer_period==0) 
 646   5                {
 647   6                  fap_ch_tab_idx_rx = (fap_ch_tab_idx_rx+1) % FAP_CH_TAB_SIZE;          
 648   6                  hal_nrf_set_rf_channel(fap_ch_tab[fap_ch_tab_idx_rx]);
 649   6                }
 650   5                hal_nrf_set_power_mode(HAL_NRF_PWR_UP);
 651   5                FAP_SET_BIT(fap_status, FAP_RADIO_PWR_UP);
 652   5              }
 653   4      
 654   4              if(fap_timer_period==FAP_RX_FULL_CH_REV)
 655   4              {
 656   5                CE_LOW();
 657   5                hal_nrf_set_power_mode(HAL_NRF_PWR_DOWN);
 658   5                FAP_CLEAR_BIT(fap_status, FAP_RADIO_PWR_UP);
 659   5              }
 660   4      
 661   4              if(fap_timer_period < FAP_RX_FULL_CH_REV)
 662   4              {
 663   5                // RX on
 664   5                if( ( (fap_timer_period-FAP_RADIO_PWR_UP_DELAY) % FAP_RX_SINGLE_CH_REV) == 0)          
 665   5                {
 666   6                  CE_HIGH();    
 667   6                }
 668   5                // RX off  
 669   5                if( ( (fap_timer_period-FAP_RADIO_PWR_UP_DELAY-FAP_LP_RX_LISTEN_PERIODS) % FAP_RX_SINGLE_CH_REV)
             - == 0) 
 670   5                {
C51 COMPILER V7.50   FAP                                                                   04/09/2009 10:12:50 PAGE 12  

 671   6                  CE_LOW();
 672   6                }
 673   5              }
 674   4            }
 675   3          }
 676   2          else
 677   2          {
 678   3            fap_set_system_idle();  
 679   3          }
 680   2          
 681   2          if(FAP_GET_BIT(fap_status, FAP_LP_RX_EN))     
 682   2          {
 683   3            fap_timer_period = (fap_timer_period + 1) % FAP_LP_RX_POLL_PERIOD;
 684   3          }
 685   2          else
 686   2          {
 687   3            fap_timer_period = (fap_timer_period + 1) % FAP_CH_TAB_SIZE;
 688   3          }
 689   2        } 
 690   1        fap_rx_channel_guess = (fap_rx_channel_guess + 1) % FAP_CH_TAB_SIZE;
 691   1        
 692   1        FAP_NRF_IRQ_ENABLE();                      
 693   1      }
 694          
 695          void fap_flush_rx_fifo(void)
 696          {
 697   1          FAP_INTERRUPTS_DISABLE();
 698   1      
 699   1          hal_nrf_flush_rx();
 700   1      
 701   1          fap_rx_dr_flag = false;
 702   1      
 703   1          FAP_INTERRUPTS_ENABLE();
 704   1      }
 705          
 706          void fap_goto_idle_mode()
 707          {
 708   1        FAP_INTERRUPTS_DISABLE();
 709   1      
 710   1        FAP_CLEAR_BIT(fap_status, FAP_TX_RX_INFINITE_TIMEOUT_EN);
 711   1        
 712   1        FAP_INTERRUPTS_ENABLE();
 713   1      
 714   1        fap_latency_counter=0; 
 715   1        while(fap_mode!=FAP_IDLE);
 716   1      }
 717          
 718          //***************************************************************************** 
 719          // Function bodies, internal
 720          //*****************************************************************************
 721          
 722          static uint8_t fap_lfsr_get(uint8_t seed, uint8_t max_limit)
 723          {
 724   1        static uint8_t pseudoreg=0xff; // Can never be zero  
 725   1        uint8_t shiftbit;
 726   1        
 727   1        if(seed > 0)
 728   1        {
 729   2          pseudoreg = seed;      
 730   2        }
 731   1            
 732   1        shiftbit = (pseudoreg << 7) & 0x80;
C51 COMPILER V7.50   FAP                                                                   04/09/2009 10:12:50 PAGE 13  

 733   1        shiftbit ^= (pseudoreg << 6) & 0x80;
 734   1        shiftbit ^= (pseudoreg << 5) & 0x80;
 735   1        shiftbit ^= (pseudoreg & 0x80);
 736   1          
 737   1        pseudoreg = (shiftbit | (pseudoreg >> 1));      
 738   1      
 739   1        return pseudoreg % max_limit;
 740   1      }
 741          
 742          static void fap_set_system_idle(void)
 743          { 
 744   1        CE_LOW();
 745   1        fap_mode=FAP_IDLE;
 746   1        if(FAP_GET_BIT(fap_status, FAP_PDOWN_IDLE_EN))
 747   1        {
 748   2          hal_nrf_set_power_mode(HAL_NRF_PWR_DOWN);
 749   2          FAP_CLEAR_BIT(fap_status, FAP_RADIO_PWR_UP);
 750   2        }  
 751   1      }
 752          
 753          /**
 754          @}
 755          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2069    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     67      18
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
   EDATA SIZE       =   ----    ----
   HDATA SIZE       =   ----    ----
   XDATA CONST SIZE =   ----    ----
   FAR CONST SIZE   =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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