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

📄 cc1100_tx.lst

📁 用51单片机控制cc1100发送接收模块的参考程序.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 284          //输出:无
 285          //功能描述:SPI写寄存器
 286          //*****************************************************************************************
 287          void halSpiWriteReg(INT8U addr, INT8U value) 
 288          {
 289   1          CSN = 0;
 290   1          while (GDO1);
 291   1          SpiTxRxByte(addr);          //写地址
 292   1          SpiTxRxByte(value);         //写入配置
 293   1          CSN = 1;
 294   1      }
 295          
 296          //*****************************************************************************************
 297          //函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
 298          //输入:地址,写入缓冲区,写入个数
 299          //输出:无
 300          //功能描述:SPI连续写配置寄存器
 301          //*****************************************************************************************
C51 COMPILER V7.50   CC1100_TX                                                             11/26/2006 22:02:36 PAGE 6   

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

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

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

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

 550   3                              delay(10000);
 551   3                              LED2 = 1;
 552   3                              halSpiStrobe(CCxxx0_SFRX);
 553   3                              SendCh(arrRx[0]);
 554   3                              SendCh(arrRx[1]);
 555   3                              SendCh(arrRx[2]);
 556   3                              SendCh(arrRx[3]);
 557   3                      }
 558   2              }
 559   1      }


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


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

⌨️ 快捷键说明

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