⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wireless_cc1100rx.lst

📁 CC1100做呼叫器的程序(C语言)用8051与CC1100接口,语音压缩,频率在916.5MHZ
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -