📄 wireless_cc1100rx.lst
字号:
727 // and adds the signal to the DAC output for a loop back.
728 //
729
730 void TIMER3_ISR(void) interrupt 14
731 {
732 1 static unsigned short new_value;
C51 COMPILER V8.05a WIRELESS_CC1100RX 11/07/2007 15:16:42 PAGE 13
733 1 // unsigned short Counter;
734 1 USHORT tempvalue;
735 1 TMR3CN &= ~0xC0; // acknowledge interrupt
736 1
737 1
738 1 //remenber
739 1 new_value = DACTXFIFO_Pull();
740 1 // only play received audio if the remote endpoint as determined
741 1 // that the audio is of audible amplitude
742 1 if(Audio_RemoteState == Audio_Loud)
743 1 {
744 2 // DAC output must be left-justified, and loaded
745 2 // low byte first
746 2 tempvalue.S = new_value;
747 2 // tempvalue.S = tempvalue.S + ADCRXFIFO_Newest()>>4;
748 2 tempvalue.S = tempvalue.S << 6;
749 2
750 2 IDA0L = tempvalue.C[1];
751 2 IDA0H = tempvalue.C[0];
752 2
753 2 }
754 1
755 1
756 1 }
757
758 //-----------------------------------------------------------------------------
759 // RF State Machine Functions
760 //-----------------------------------------------------------------------------
761 //-----------------------------------------------------------------------------
762 // CC1100_Init
763 //-----------------------------------------------------------------------------
764 // This function will initialize the transceiver and calibrate it to
765 // transmit and receive on a defined frequency.
766 //
767
768 void CCxxx0_Init(void)
769 {
770 1 unsigned char i;
771 1 i = 0;
772 1 // Write register settings
773 1 halSpiWriteReg(CCxxx0_FSCTRL1, RegValue[i++]);//pRfSettings->FSCTRL1);
774 1 halSpiWriteReg(CCxxx0_FSCTRL0, RegValue[i++]);//pRfSettings->FSCTRL0);
775 1 //halSpiWriteReg(CCxxx0_FIFOTHR, 0x33);//pRfSettings->FREQ2);
776 1 halSpiWriteReg(CCxxx0_FREQ2, RegValue[i++]);//pRfSettings->FREQ2);
777 1 halSpiWriteReg(CCxxx0_FREQ1, RegValue[i++]);//pRfSettings->FREQ1);
778 1 halSpiWriteReg(CCxxx0_FREQ0, RegValue[i++]);//pRfSettings->FREQ0);
779 1 halSpiWriteReg(CCxxx0_MDMCFG4, RegValue[i++]);//pRfSettings->MDMCFG4);
780 1 halSpiWriteReg(CCxxx0_MDMCFG3, RegValue[i++]);//pRfSettings->MDMCFG3);
781 1 halSpiWriteReg(CCxxx0_MDMCFG2, RegValue[i++]);//pRfSettings->MDMCFG2);
782 1 halSpiWriteReg(CCxxx0_MDMCFG1, RegValue[i++]);//pRfSettings->MDMCFG1);
783 1 halSpiWriteReg(CCxxx0_MDMCFG0, RegValue[i++]);//pRfSettings->MDMCFG0);
784 1 halSpiWriteReg(CCxxx0_CHANNR, RegValue[i++]);//pRfSettings->CHANNR);
785 1 halSpiWriteReg(CCxxx0_DEVIATN, RegValue[i++]);//pRfSettings->DEVIATN);
786 1 halSpiWriteReg(CCxxx0_FREND1, RegValue[i++]);//pRfSettings->FREND1);
787 1 halSpiWriteReg(CCxxx0_FREND0, RegValue[i++]);//pRfSettings->FREND0);
788 1 halSpiWriteReg(CCxxx0_MCSM0 , RegValue[i++]);//pRfSettings->MCSM0 );
789 1 halSpiWriteReg(CCxxx0_FOCCFG, RegValue[i++]);//pRfSettings->FOCCFG);
790 1 halSpiWriteReg(CCxxx0_BSCFG, RegValue[i++]);//pRfSettings->BSCFG);
791 1 halSpiWriteReg(CCxxx0_AGCCTRL2, RegValue[i++]);//pRfSettings->AGCCTRL2);
792 1 halSpiWriteReg(CCxxx0_AGCCTRL1, RegValue[i++]);//pRfSettings->AGCCTRL1);
793 1 halSpiWriteReg(CCxxx0_AGCCTRL0, RegValue[i++]);//pRfSettings->AGCCTRL0);
794 1 halSpiWriteReg(CCxxx0_FSCAL3, RegValue[i++]);//pRfSettings->FSCAL3);
C51 COMPILER V8.05a WIRELESS_CC1100RX 11/07/2007 15:16:42 PAGE 14
795 1 halSpiWriteReg(CCxxx0_FSCAL2, RegValue[i++]);//pRfSettings->FSCAL2);
796 1 halSpiWriteReg(CCxxx0_FSCAL1, RegValue[i++]);//pRfSettings->FSCAL1);
797 1 halSpiWriteReg(CCxxx0_FSCAL0, RegValue[i++]);//pRfSettings->FSCAL0);
798 1 halSpiWriteReg(CCxxx0_FSTEST, RegValue[i++]);//pRfSettings->FSTEST);
799 1 halSpiWriteReg(CCxxx0_TEST2, RegValue[i++]);//pRfSettings->TEST2);
800 1 halSpiWriteReg(CCxxx0_TEST1, RegValue[i++]);//pRfSettings->TEST1);
801 1 halSpiWriteReg(CCxxx0_TEST0, RegValue[i++]);//pRfSettings->TEST0);
802 1 halSpiWriteReg(CCxxx0_IOCFG2, RegValue[i++]);//pRfSettings->IOCFG2);
803 1 halSpiWriteReg(CCxxx0_IOCFG0, RegValue[i++]);//pRfSettings->IOCFG0);
804 1 halSpiWriteReg(CCxxx0_PKTCTRL1, RegValue[i++]);//pRfSettings->PKTCTRL1);
805 1 halSpiWriteReg(CCxxx0_PKTCTRL0, RegValue[i++]);//pRfSettings->PKTCTRL0);
806 1 halSpiWriteReg(CCxxx0_ADDR, RegValue[i++]);//pRfSettings->ADDR);
807 1 halSpiWriteReg(CCxxx0_PKTLEN, RegValue[i]); //pRfSettings->PKTLEN);
808 1
809 1 }
810
811 //-------------------------------------------------------------------------------------------------------
812 // BYTE halSpiReadReg(BYTE addr)
813 //
814 // DESCRIPTION:
815 // This function gets the value of a single specified CCxxx0 register.
816 //
817 // ARGUMENTS:
818 // BYTE addr
819 // Address of the CCxxx0 register to be accessed.
820 //
821 // RETURN VALUE:
822 // BYTE
823 // Value of the accessed CCxxx0 register.
824 //-------------------------------------------------------------------------------------------------------
825 unsigned char halSpiReadReg(unsigned char addr)
826 {
827 1 unsigned char x;
828 1 // SPI0CN = 0x08; // clear all flags
829 1 NSSMD0 = 0;
830 1 while (SO_data);
831 1 // {SO_data = 0;}
832 1 SPI0DAT = (addr | READ_SINGLE);
833 1 SPI_WAIT();
834 1 SPI0DAT = 0;
835 1 SPI_WAIT();
836 1 x = SPI0DAT;
837 1 NSSMD0 = 1;
838 1 SO_data = 0;
839 1 return x;
840 1 }// halSpiReadReg
841 //-------------------------------------------------------------------------------------------------------
842 // void halSpiWriteReg(BYTE addr, BYTE value)
843 //
844 // DESCRIPTION:
845 // Function for writing to a single CCxxx0 register
846 //
847 // ARGUMENTS:
848 // BYTE addr
849 // Address of a specific CCxxx0 register to accessed.
850 // BYTE value
851 // Value to be written to the specified CCxxx0 register.
852 //-------------------------------------------------------------------------------------------------------
853 void halSpiWriteReg(unsigned char addr,unsigned char value) {
854 1 // SPI0CN = 0x08; // clear all flags
855 1 NSSMD0 = 0;
856 1 while (SO_data);
C51 COMPILER V8.05a WIRELESS_CC1100RX 11/07/2007 15:16:42 PAGE 15
857 1 // {SO_data = 0;}
858 1 SPI0DAT = addr;
859 1 SPI_WAIT();
860 1 SPI0DAT = value;
861 1 SPI_WAIT();
862 1 NSSMD0 = 1;
863 1 SO_data = 0;
864 1 }// halSpiWriteReg
865
866 //-----------------------------------------------------------------------------
867 // FIFO Routines
868 //-----------------------------------------------------------------------------
869 // All FIFO functions pass a pointer to the fifo. Pull functions return
870 // either a short or a char, and push functions have the data to be pushed
871 // as an additional parameter.
872 // Pushes and pulls update EMPTY, COUNT, and OF variables.
873 //
874
875 unsigned char ReceiveFIFO_Pull(void)
876 {
877 1 unsigned char output;
878 1
879 1 if(ReceiveFIFO_EMPTY)
880 1 {
881 2 // if buffer is empty, set underflow flag and exit
882 2 ReceiveFIFO_UF = 1;
883 2
884 2 return 0;
885 2 }
886 1 else
887 1 {
888 2 ReceiveFIFO_FULL = 0; // buffer is no longer full
889 2
890 2 // wrap FIFO pointer if necessary
891 2 if (ReceiveFIFO_FIRST==ReceiveFIFO_FIFOSIZE-1) ReceiveFIFO_FIRST = 0;
892 2 else (ReceiveFIFO_FIRST)++;
893 2
894 2 // pull value from fifo
895 2 output = ReceiveFIFO_FIFO[ReceiveFIFO_FIRST];
896 2
897 2 // set empty indicator if necessary
898 2 if (--(ReceiveFIFO_COUNT) == 0) ReceiveFIFO_EMPTY = 1;
899 2
900 2 return output;
901 2 }
902 1 }
903
904
905 void ReceiveFIFO_Push(unsigned char num)
906 {
907 1
908 1 ReceiveFIFO_EMPTY = 0; // FIFO is no longer empty
909 1 if (!ReceiveFIFO_FULL) {
910 2
911 2 (ReceiveFIFO_LAST)++; // increment, wrap if necessary
912 2 if (ReceiveFIFO_LAST == ReceiveFIFO_FIFOSIZE)
913 2 {
914 3 ReceiveFIFO_LAST = 0;
915 3 }
916 2
917 2 ReceiveFIFO_FIFO[ReceiveFIFO_LAST]=num; // push value to FIFO
918 2
C51 COMPILER V8.05a WIRELESS_CC1100RX 11/07/2007 15:16:42 PAGE 16
919 2 ReceiveFIFO_COUNT++;
920 2
921 2 if ( ReceiveFIFO_COUNT == ReceiveFIFO_FIFOSIZE)
922 2 {
923 3 ReceiveFIFO_FULL = 1;
924 3 }
925 2 // buffer is full
926 2 } else {
927 2 // only set overflow flag and exit
928 2 ReceiveFIFO_OF = 1;
929 2 }
930 1 }
931
932
933 void DACTXFIFO_Push(unsigned short num)
934 {
935 1 DACTXFIFO_EMPTY = 0; // buffer is no longer empty
936 1
937 1 if (!DACTXFIFO_FULL) {
938 2 (DACTXFIFO_LAST)++; // increment, wrap around if necessary
939 2 if (DACTXFIFO_LAST == DACTXFIFO_FIFOSIZE)
940 2 {
941 3 DACTXFIFO_LAST = 0;
942 3 }
943 2
944 2 DACTXFIFO_FIFO[DACTXFIFO_LAST]=num;
945 2 // update count, check for an overflow
946 2 ++DACTXFIFO_COUNT;
947 2 if (DACTXFIFO_COUNT == DACTXFIFO_FIFOSIZE - 1)
948 2 {
949 3 // the decompression routine will push two decompressed
950 3 // audio samples per call to the routine, and
951 3 // DACTXFIFO_DECOMPRESS_HALT is set when the buffer can only
952 3 // store 1 more decompressed sample.
953 3 // The flag will be cleared when at least one buffer byte is pulled
954 3 DACTXFIFO_DECOMPRESS_HALT = 1;
955 3 }
956 2 else if (DACTXFIFO_COUNT == DACTXFIFO_FIFOSIZE)
957 2 {
958 3 DACTXFIFO_DECOMPRESS_HALT = 1;
959 3 DACTXFIFO_FULL = 1;
960 3 }
961 2 else if ( DACTXFIFO_COUNT == DACTXFIFO_FIFOSIZE+1)
962 2 {
963 3 DACTXFIFO_DECOMPRESS_HALT = 1;
964 3 DACTXFIFO_FULL = 1;
965 3 DACTXFIFO_OF = 1;
966 3 }
967 2 } else {
968 2 DACTXFIFO_OF = 1;
969 2 }
970 1 }
971
972 unsigned short DACTXFIFO_Pull(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -