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

📄 cc1100_rx.lst

📁 cc1100 rf init 如何初始化cc1100的发送与接受寄存器
💻 LST
📖 第 1 页 / 共 2 页
字号:
 284          //输入:地址和配置字
 285          //输出:无
 286          //功能描述:SPI写寄存器
 287          //*****************************************************************************************
 288          void halSpiWriteReg(INT8U addr, INT8U value) 
 289          {
 290   1          CSN = 0;
 291   1          while (MISO);
 292   1          SpiTxRxByte(addr);          //写地址
 293   1          SpiTxRxByte(value);         //写入配置
 294   1          CSN = 1;
 295   1      }
 296          
 297          //*****************************************************************************************
 298          //函数名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
 299          //输入:地址,写入缓冲区,写入个数
 300          //输出:无
 301          //功能描述:SPI连续写配置寄存器
C51 COMPILER V7.01  CC1100_RX                                                              09/13/2006 17:53:03 PAGE 6   

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

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

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

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    894    ----
   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 + -