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 + -
显示快捷键?