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

📄 1100.lst

📁 无线模块cc1101学习资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
 398   1              SpiTxRxByte(temp);
 399   1              value = SpiTxRxByte(0);
 400   1              CSN = 1;
 401   1              return value;
 402   1      }
 403          
 404          
 405          //*****************************************************************************************
 406          //函数名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
 407          //输入:地址,读出数据后暂存的缓冲区,读出配置个数
 408          //输出:无
 409          //功能描述:SPI连续写配置寄存器
 410          //*****************************************************************************************
 411          void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count) 
 412          {
 413   1          INT8U i,temp;
 414   1              temp = addr | READ_BURST;               //写入要读的配置寄存器地址和读命令
 415   1          CSN = 0;
 416   1          while (MISO);
 417   1              SpiTxRxByte(temp);   
 418   1          for (i = 0; i < count; i++) 
 419   1              {
 420   2              buffer[i] = SpiTxRxByte(0);
 421   2          }
 422   1          CSN = 1;
 423   1      }
 424          
 425          
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:40:14 PAGE 8   

 426          //*****************************************************************************************
 427          //函数名:INT8U halSpiReadReg(INT8U addr)
 428          //输入:地址
 429          //输出:该状态寄存器当前值
 430          //功能描述:SPI读状态寄存器
 431          //*****************************************************************************************
 432          INT8U halSpiReadStatus(INT8U addr) 
 433          {
 434   1          INT8U value,temp;
 435   1              temp = addr | READ_BURST;               //写入要读的状态寄存器的地址同时写入读命令
 436   1          CSN = 0;
 437   1          while (MISO);
 438   1          SpiTxRxByte(temp);
 439   1              value = SpiTxRxByte(0);
 440   1              CSN = 1;
 441   1              return value;
 442   1      }
 443          //*****************************************************************************************
 444          //函数名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
 445          //输入:无
 446          //输出:无
 447          //功能描述:配置CC1100的寄存器
 448          //*****************************************************************************************
 449          void halRfWriteRfSettings(void) 
 450          {
 451   1      
 452   1              halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL2);//自已加的
 453   1          // Write register settings
 454   1          halSpiWriteReg(CCxxx0_FSCTRL1,  rfSettings.FSCTRL1);
 455   1          halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL0);
 456   1          halSpiWriteReg(CCxxx0_FREQ2,    rfSettings.FREQ2);
 457   1          halSpiWriteReg(CCxxx0_FREQ1,    rfSettings.FREQ1);
 458   1          halSpiWriteReg(CCxxx0_FREQ0,    rfSettings.FREQ0);
 459   1          halSpiWriteReg(CCxxx0_MDMCFG4,  rfSettings.MDMCFG4);
 460   1          halSpiWriteReg(CCxxx0_MDMCFG3,  rfSettings.MDMCFG3);
 461   1          halSpiWriteReg(CCxxx0_MDMCFG2,  rfSettings.MDMCFG2);
 462   1          halSpiWriteReg(CCxxx0_MDMCFG1,  rfSettings.MDMCFG1);
 463   1          halSpiWriteReg(CCxxx0_MDMCFG0,  rfSettings.MDMCFG0);
 464   1          halSpiWriteReg(CCxxx0_CHANNR,   rfSettings.CHANNR);
 465   1          halSpiWriteReg(CCxxx0_DEVIATN,  rfSettings.DEVIATN);
 466   1          halSpiWriteReg(CCxxx0_FREND1,   rfSettings.FREND1);
 467   1          halSpiWriteReg(CCxxx0_FREND0,   rfSettings.FREND0);
 468   1          halSpiWriteReg(CCxxx0_MCSM0 ,   rfSettings.MCSM0 );
 469   1          halSpiWriteReg(CCxxx0_FOCCFG,   rfSettings.FOCCFG);
 470   1          halSpiWriteReg(CCxxx0_BSCFG,    rfSettings.BSCFG);
 471   1          halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
 472   1              halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
 473   1          halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
 474   1          halSpiWriteReg(CCxxx0_FSCAL3,   rfSettings.FSCAL3);
 475   1              halSpiWriteReg(CCxxx0_FSCAL2,   rfSettings.FSCAL2);
 476   1              halSpiWriteReg(CCxxx0_FSCAL1,   rfSettings.FSCAL1);
 477   1          halSpiWriteReg(CCxxx0_FSCAL0,   rfSettings.FSCAL0);
 478   1          halSpiWriteReg(CCxxx0_FSTEST,   rfSettings.FSTEST);
 479   1          halSpiWriteReg(CCxxx0_TEST2,    rfSettings.TEST2);
 480   1          halSpiWriteReg(CCxxx0_TEST1,    rfSettings.TEST1);
 481   1          halSpiWriteReg(CCxxx0_TEST0,    rfSettings.TEST0);
 482   1          halSpiWriteReg(CCxxx0_IOCFG2,   rfSettings.IOCFG2);
 483   1          halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);    
 484   1          halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
 485   1          halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
 486   1          halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
 487   1          halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:40:14 PAGE 9   

 488   1      }
 489          
 490          //*****************************************************************************************
 491          //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
 492          //输入:发送的缓冲区,发送数据个数
 493          //输出:无
 494          //功能描述:CC1100发送一组数据
 495          //*****************************************************************************************
 496          
 497          void halRfSendPacket(INT8U *txBuffer, INT8U size) 
 498          {
 499   1              halSpiWriteReg(CCxxx0_TXFIFO, size);
 500   1          halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
 501   1      
 502   1          halSpiStrobe(CCxxx0_STX);           //进入发送模式发送数据
 503   1      
 504   1          // Wait for GDO0 to be set -> sync transmitted
 505   1          while (!GDO0);
 506   1          // Wait for GDO0 to be cleared -> end of packet
 507   1          while (GDO0);
 508   1              halSpiStrobe(CCxxx0_SFTX);
 509   1      }
 510          //*****************************************************************************************
 511          void setRxMode(void)
 512          {
 513   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 514   1      }
 515          //*****************************************************************************************
 516          INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length) 
 517          {
 518   1          INT8U status[2];
 519   1          INT8U packetLength;
 520   1              INT8U i=(*length)*4;  // 具体多少要根据datarate和length来决定
 521   1      
 522   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 523   1              delay(2);
 524   1              while (GDO0)
 525   1              {
 526   2                      delay(2);
 527   2                      --i;
 528   2                      if(i<1)
 529   2                         return 0;        
 530   2              }        
 531   1          if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
 532   1              {
 533   2              packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
 534   2              if (packetLength <= *length)            //如果所要的有效数据长度小于等于接收到的数据包的长度
 535   2                      {
 536   3                  halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
 537   3                  *length = packetLength;                             //把接收数据长度的修改为当前数据的长      
 538   3                  // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
 539   3                  halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);       //读出CRC校验位
 540   3                              halSpiStrobe(CCxxx0_SFRX);              //清洗接收缓冲区
 541   3                  return (status[1] & CRC_OK);                        //如果校验成功返回接收成功
 542   3              }
 543   2                       else 
 544   2                      {
 545   3                  *length = packetLength;
 546   3                  halSpiStrobe(CCxxx0_SFRX);          //清洗接收缓冲区
 547   3                  return 0;
 548   3              }
 549   2          } 
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:40:14 PAGE 10  

 550   1              else
 551   1              return 0;
 552   1      }
 553          
 554          //----------------------------------------主函数---------------------------------------------------
 555          void main(void)
 556          {
 557   1              INT8U tf =0;
 558   1              INT8U TxBuf[4]={0};      // 4字节, 如果需要更长的数据包,请正确设置
 559   1              CpuInit();
 560   1              POWER_UP_RESET_CC1100();
 561   1              halRfWriteRfSettings();
 562   1              halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
 563   1      //      halRfSendPacket(TxBuf,8);       // Transmit Tx buffer data
 564   1              delay(6000);
 565   1              while(1)
 566   1              {
 567   2          
 568   2              if(KEY1 ==0 ) 
 569   2                      {
 570   3                          TxBuf[0] = 0x01 ;TxBuf[1]=0x02;TxBuf[2]=0x03;TxBuf[3]=0x04;
 571   3                      halRfSendPacket(TxBuf,4);       // Transmit Tx buffer data
 572   3                      
 573   3                  }
 574   2                 if(KEY2 ==0 )
 575   2                 {    
 576   3                      TxBuf[0] = 0x11 ;TxBuf[1]=0x12;TxBuf[2]=0x13;TxBuf[3]=0x14;
 577   3                      halRfSendPacket(TxBuf,4);       // Transmit Tx buffer data
 578   3                                      
 579   3                 }
 580   2                      TxBuf[0] = 0;TxBuf[1]=0;TxBuf[2]=0;TxBuf[3]=0;
 581   2                      delay(3000);
 582   2              }
 583   1              
 584   1      }
 585          
 586          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    886    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     53      25
   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 + -