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

📄 cc1100_tx.lst

📁 CC1100收发程序,用STC单片机对CC1100做控制
💻 LST
📖 第 1 页 / 共 2 页
字号:
 283          //*****************************************************************************************
 284          void halSpiWriteReg(INT8U addr, INT8U value) 
 285          {
 286   1          CSN = 0;
 287   1          while (MISO);
 288   1          SpiTxRxByte(addr);          //写地址
 289   1          SpiTxRxByte(value);         //写入配置
 290   1          CSN = 1;
 291   1      }
 292          
 293          //*****************************************************************************************
 294          //函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
 295          //输入:地址,写入缓冲区,写入个数
 296          //输出:无
 297          //功能描述:SPI连续写配置寄存器
 298          //*****************************************************************************************
 299          void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count) 
 300          {
 301   1          INT8U i, temp;
C51 COMPILER V7.01  CC1100_TX                                                              09/13/2006 17:53:28 PAGE 6   

 302   1              temp = addr | WRITE_BURST;
 303   1          CSN = 0;
 304   1          while (MISO);
 305   1          SpiTxRxByte(temp);
 306   1          for (i = 0; i < count; i++)
 307   1              {
 308   2              SpiTxRxByte(buffer[i]);
 309   2          }
 310   1          CSN = 1;
 311   1      }
 312          
 313          //*****************************************************************************************
 314          //函数名:void halSpiStrobe(INT8U strobe)
 315          //输入:命令
 316          //输出:无
 317          //功能描述:SPI写命令
 318          //*****************************************************************************************
 319          void halSpiStrobe(INT8U strobe) 
 320          {
 321   1          CSN = 0;
 322   1          while (MISO);
 323   1          SpiTxRxByte(strobe);                //写入命令
 324   1          CSN = 1;
 325   1      }
 326          
 327          
 328          
 329          
 330          
 331          //*****************************************************************************************
 332          //函数名:INT8U halSpiReadReg(INT8U addr)
 333          //输入:地址
 334          //输出:该寄存器的配置字
 335          //功能描述:SPI读寄存器
 336          //*****************************************************************************************
 337          INT8U halSpiReadReg(INT8U addr) 
 338          {
 339   1              INT8U temp, value;
 340   1          temp = addr|READ_SINGLE;//读寄存器命令
 341   1              CSN = 0;
 342   1              while (MISO);
 343   1              SpiTxRxByte(temp);
 344   1              value = SpiTxRxByte(0);
 345   1              CSN = 1;
 346   1              return value;
 347   1      }
 348          
 349          
 350          //*****************************************************************************************
 351          //函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
 352          //输入:地址,读出数据后暂存的缓冲区,读出配置个数
 353          //输出:无
 354          //功能描述:SPI连续写配置寄存器
 355          //*****************************************************************************************
 356          void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count) 
 357          {
 358   1          INT8U i,temp;
 359   1              temp = addr | READ_BURST;               //写入要读的配置寄存器地址和读命令
 360   1          CSN = 0;
 361   1          while (MISO);
 362   1              SpiTxRxByte(temp);   
 363   1          for (i = 0; i < count; i++) 
C51 COMPILER V7.01  CC1100_TX                                                              09/13/2006 17:53:28 PAGE 7   

 364   1              {
 365   2              buffer[i] = SpiTxRxByte(0);
 366   2          }
 367   1          CSN = 1;
 368   1      }
 369          
 370          
 371          //*****************************************************************************************
 372          //函数名:INT8U halSpiReadReg(INT8U addr)
 373          //输入:地址
 374          //输出:该状态寄存器当前值
 375          //功能描述:SPI读状态寄存器
 376          //*****************************************************************************************
 377          INT8U halSpiReadStatus(INT8U addr) 
 378          {
 379   1          INT8U value,temp;
 380   1              temp = addr | READ_BURST;               //写入要读的状态寄存器的地址同时写入读命令
 381   1          CSN = 0;
 382   1          while (MISO);
 383   1          SpiTxRxByte(temp);
 384   1              value = SpiTxRxByte(0);
 385   1              CSN = 1;
 386   1              return value;
 387   1      }
 388          
 389          
 390          //*****************************************************************************************
 391          //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
 392          //输入:无
 393          //输出:无
 394          //功能描述:配置CC1100的寄存器
 395          //*****************************************************************************************
 396          void halRfWriteRfSettings(void) 
 397          {
 398   1              halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL2);//自已加的
 399   1          // Write register settings
 400   1          halSpiWriteReg(CCxxx0_FSCTRL1,  rfSettings.FSCTRL1);
 401   1          halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL0);
 402   1          halSpiWriteReg(CCxxx0_FREQ2,    rfSettings.FREQ2);
 403   1          halSpiWriteReg(CCxxx0_FREQ1,    rfSettings.FREQ1);
 404   1          halSpiWriteReg(CCxxx0_FREQ0,    rfSettings.FREQ0);
 405   1          halSpiWriteReg(CCxxx0_MDMCFG4,  rfSettings.MDMCFG4);
 406   1          halSpiWriteReg(CCxxx0_MDMCFG3,  rfSettings.MDMCFG3);
 407   1          halSpiWriteReg(CCxxx0_MDMCFG2,  rfSettings.MDMCFG2);
 408   1          halSpiWriteReg(CCxxx0_MDMCFG1,  rfSettings.MDMCFG1);
 409   1          halSpiWriteReg(CCxxx0_MDMCFG0,  rfSettings.MDMCFG0);
 410   1          halSpiWriteReg(CCxxx0_CHANNR,   rfSettings.CHANNR);
 411   1          halSpiWriteReg(CCxxx0_DEVIATN,  rfSettings.DEVIATN);
 412   1          halSpiWriteReg(CCxxx0_FREND1,   rfSettings.FREND1);
 413   1          halSpiWriteReg(CCxxx0_FREND0,   rfSettings.FREND0);
 414   1          halSpiWriteReg(CCxxx0_MCSM0 ,   rfSettings.MCSM0 );
 415   1          halSpiWriteReg(CCxxx0_FOCCFG,   rfSettings.FOCCFG);
 416   1          halSpiWriteReg(CCxxx0_BSCFG,    rfSettings.BSCFG);
 417   1          halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
 418   1              halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
 419   1          halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
 420   1          halSpiWriteReg(CCxxx0_FSCAL3,   rfSettings.FSCAL3);
 421   1              halSpiWriteReg(CCxxx0_FSCAL2,   rfSettings.FSCAL2);
 422   1              halSpiWriteReg(CCxxx0_FSCAL1,   rfSettings.FSCAL1);
 423   1          halSpiWriteReg(CCxxx0_FSCAL0,   rfSettings.FSCAL0);
 424   1          halSpiWriteReg(CCxxx0_FSTEST,   rfSettings.FSTEST);
 425   1          halSpiWriteReg(CCxxx0_TEST2,    rfSettings.TEST2);
C51 COMPILER V7.01  CC1100_TX                                                              09/13/2006 17:53:28 PAGE 8   

 426   1          halSpiWriteReg(CCxxx0_TEST1,    rfSettings.TEST1);
 427   1          halSpiWriteReg(CCxxx0_TEST0,    rfSettings.TEST0);
 428   1          halSpiWriteReg(CCxxx0_IOCFG2,   rfSettings.IOCFG2);
 429   1          halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);    
 430   1          halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
 431   1          halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
 432   1          halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
 433   1          halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
 434   1      }
 435          
 436          
 437          
 438          
 439          
 440          
 441          //*****************************************************************************************
 442          //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
 443          //输入:发送的缓冲区,发送数据个数
 444          //输出:无
 445          //功能描述:CC1100发送一组数据
 446          //*****************************************************************************************
 447          void halRfSendPacket(INT8U *txBuffer, INT8U size) 
 448          {
 449   1              halSpiWriteReg(CCxxx0_TXFIFO, size);
 450   1          halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
 451   1      
 452   1          halSpiStrobe(CCxxx0_STX);           //进入发送模式发送数据
 453   1      
 454   1          // Wait for GDO0 to be set -> sync transmitted
 455   1          while (!GDO0);
 456   1        
 457   1          // Wait for GDO0 to be cleared -> end of packet
 458   1          while (GDO0);
 459   1              halSpiStrobe(CCxxx0_SFTX);
 460   1      }
 461          
 462          
 463          
 464          INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length) 
 465          {
 466   1          INT8U status[2];
 467   1          INT8U packetLength;
 468   1      
 469   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 470   1          while (!GDO0);
 471   1          while (GDO0);
 472   1          if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
 473   1              {
 474   2              packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
 475   2              if (packetLength <= *length)            //如果所要的有效数据长度小于等于接收到的数据包的长度
 476   2                      {
 477   3                  halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
 478   3                  *length = packetLength;                             //把接收数据长度的修改为当前数据的长度
 479   3              
 480   3                  // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
 481   3                  halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);       //读出CRC校验位
 482   3                  return (status[1] & CRC_OK);                        //如果校验成功返回接收成功
 483   3              }
 484   2                       else 
 485   2                      {
 486   3                  *length = packetLength;
 487   3                  halSpiStrobe(CCxxx0_SFRX);          //清洗接收缓冲区
C51 COMPILER V7.01  CC1100_TX                                                              09/13/2006 17:53:28 PAGE 9   

 488   3                  return 0;
 489   3              }
 490   2          } 
 491   1              else
 492   1              return 0;
 493   1      }
 494          
 495          /******************************************************************************************
 496          *******************************************************************************************
 497          ************************************中断服务程序*********************************************
 498          *******************************************************************************************
 499          ******************************************************************************************/
 500          /*void Timer0ISR(void) interrupt 1
 501          {
 502                  EA = 0;
 503                  TH0+=TIMER0H;
 504                  TL0+=TIMER0L;
 505                  TimerCount++;
 506                  timer[0]++;
 507                  timer[1]++;
 508                  EA = 1;
 509          }
 510          */
 511          
 512          
 513          
 514          /******************************************************************************************
 515          *******************************************************************************************
 516          ******************************************主程序*******************************************
 517          *******************************************************************************************
 518          ******************************************************************************************/
 519          main(void)
 520          {
 521   1              INT8U leng;
 522   1              INT8U arrTx[4];
 523   1              INT8U arrRx[4];
 524   1              CpuInit();
 525   1              POWER_UP_RESET_CC1100();
 526   1              halRfWriteRfSettings();
 527   1              halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
 528   1      //      LED1 = 0;
 529   1              delay(60000);
 530   1      //      LED1 = 1;
 531   1              delay(30000);
 532   1              arrTx[0] = 0xBB;
 533   1              arrTx[1] = 0xAA;
 534   1              arrTx[2] = 0x55;
 535   1              arrTx[3] = 0x09;
 536   1              leng = 3;
 537   1              while(1)
 538   1              {
 539   2              halRfSendPacket(arrTx,4);
 540   2             SendCh(0x11);
 541   2              //      LED2 = 0;
 542   2                      delay(10000);
 543   2              //      LED2 = 1;
 544   2                      delay(20000);
 545   2              /*      if(halRfReceivePacket(arrRx,&leng))
 546   2                      {
 547   2                              LED2 = 0;
 548   2                              delay(10000);
 549   2                              LED2 = 1;
C51 COMPILER V7.01  CC1100_TX                                                              09/13/2006 17:53:28 PAGE 10  

 550   2                              halSpiStrobe(CCxxx0_SFRX);
 551   2                              SendCh(arrRx[0]);
 552   2                              SendCh(arrRx[1]);
 553   2                              SendCh(arrRx[2]);
 554   2                              SendCh(arrRx[3]);
 555   2                      }*/
 556   2              }
 557   1      }
*** WARNING C280 IN LINE 523 OF CC1100_TX.C: 'arrRx': unreferenced local variable


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    870    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     47      32
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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