1100.lst

来自「无线模块cc1101学习资料」· LST 代码 · 共 882 行 · 第 1/4 页

LST
882
字号
 420   1          CSN = 0;
 421   1          while (MISO);
 422   1              SpiTxRxByte(temp);   
 423   1          for (i = 0; i < count; i++) 
 424   1              {
 425   2              buffer[i] = SpiTxRxByte(0);
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:13:08 PAGE 8   

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

 488   1          halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);    
 489   1          halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
 490   1          halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
 491   1          halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
 492   1          halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
 493   1      }
 494          
 495          //*****************************************************************************************
 496          //函数名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
 497          //输入:发送的缓冲区,发送数据个数
 498          //输出:无
 499          //功能描述:CC1100发送一组数据
 500          //*****************************************************************************************
 501          
 502          void halRfSendPacket(INT8U *txBuffer, INT8U size) 
 503          {
 504   1              halSpiWriteReg(CCxxx0_TXFIFO, size);
 505   1          halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size); //写入要发送的数据
 506   1      
 507   1          halSpiStrobe(CCxxx0_STX);           //进入发送模式发送数据
 508   1      
 509   1          // Wait for GDO0 to be set -> sync transmitted
 510   1          while (!GDO0);
 511   1          // Wait for GDO0 to be cleared -> end of packet
 512   1          while (GDO0);
 513   1              halSpiStrobe(CCxxx0_SFTX);
 514   1      }
 515          
 516          
 517          void setRxMode(void)
 518          {
 519   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 520   1      }
 521          
 522          /*
 523          // Bit masks corresponding to STATE[2:0] in the status byte returned on MISO
 524          #define CCxx00_STATE_BM                 0x70
 525          #define CCxx00_FIFO_BYTES_AVAILABLE_BM  0x0F
 526          #define CCxx00_STATE_TX_BM              0x20
 527          #define CCxx00_STATE_TX_UNDERFLOW_BM    0x70
 528          #define CCxx00_STATE_RX_BM              0x10
 529          #define CCxx00_STATE_RX_OVERFLOW_BM     0x60
 530          #define CCxx00_STATE_IDLE_BM            0x00
 531          
 532          static INT8U RfGetRxStatus(void)
 533          {
 534                  INT8U temp, spiRxStatus1,spiRxStatus2;
 535                  INT8U i=4;// 循环测试次数
 536              temp = CCxxx0_SNOP|READ_SINGLE;//读寄存器命令
 537                  CSN = 0;
 538                  while (MISO);
 539                  SpiTxRxByte(temp);
 540                  spiRxStatus1 = SpiTxRxByte(0);
 541                  do
 542                  {
 543                          SpiTxRxByte(temp);
 544                          spiRxStatus2 = SpiTxRxByte(0);
 545                          if(spiRxStatus1 == spiRxStatus2)
 546                          {
 547                                  if( (spiRxStatus1 & CCxx00_STATE_BM) == CCxx00_STATE_RX_OVERFLOW_BM)
 548                                  {
 549                         halSpiStrobe(CCxxx0_SFRX);
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:13:08 PAGE 10  

 550                                     return 0;
 551                                  }
 552                              return 1;
 553                          }
 554                           spiRxStatus1=spiRxStatus2;
 555                  }
 556                  while(i--);
 557                  CSN = 1;
 558              return 0;   
 559          }
 560           */
 561          INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length) 
 562          {
 563   1          INT8U status[2];
 564   1          INT8U packetLength;
 565   1              INT8U i=(*length)*4;  // 具体多少要根据datarate和length来决定
 566   1      
 567   1          halSpiStrobe(CCxxx0_SRX);           //进入接收状态
 568   1              //delay(5);
 569   1          //while (!GDO1);
 570   1          //while (GDO1);
 571   1              delay(2);
 572   1              while (GDO0)
 573   1              {
 574   2                      delay(2);
 575   2                      --i;
 576   2                      if(i<1)
 577   2                         return 0;        
 578   2              }        
 579   1          if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字节数不为0
 580   1              {
 581   2              packetLength = halSpiReadReg(CCxxx0_RXFIFO);//读出第一个字节,此字节为该帧数据长度
 582   2              if (packetLength <= *length)            //如果所要的有效数据长度小于等于接收到的数据包的长度
 583   2                      {
 584   3                  halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //读出所有接收到的数据
 585   3                  *length = packetLength;                             //把接收数据长度的修改为当前数据的长度
 586   3              
 587   3                  // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
 588   3                  halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);       //读出CRC校验位
 589   3                              halSpiStrobe(CCxxx0_SFRX);              //清洗接收缓冲区
 590   3                  return (status[1] & CRC_OK);                        //如果校验成功返回接收成功
 591   3              }
 592   2                       else 
 593   2                      {
 594   3                  *length = packetLength;
 595   3                  halSpiStrobe(CCxxx0_SFRX);          //清洗接收缓冲区
 596   3                  return 0;
 597   3              }
 598   2          } 
 599   1              else
 600   1              return 0;
 601   1      }
 602          //--------------------------------------------------------------------------------------------------
 603          // 函数名称: UART_init()串口初始化函数
 604          // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
 605          //            串口接收中断允许,发送中断禁止
 606          //--------------------------------------------------------------------------------------------------
 607          void UART_init()
 608          {
 609   1                           //初始化串行口和波特率发生器 
 610   1      SCON =0x58;          //选择串口工作方式,打开接收允许
 611   1      TMOD =0x21;          //定时器1工作在方式2,定时器0工作在方式1
C51 COMPILER V7.06   1100                                                                  12/20/2007 00:13:08 PAGE 11  

 612   1      TH1 =0xfd;           //实现波特率9600(系统时钟11.0592MHZ)
 613   1      TL1 =0xfd;
 614   1      TR1 =1;              //启动定时器T1
 615   1      ET1 =0; 
 616   1      ES=1;                //允许串行口中断
 617   1      PS=1;                //设计串行口中断优先级
 618   1      EA =1;               //单片机中断允许
 619   1      }
 620          //--------------------------------------------------------------------------------------------------
 621          // 函数名称: com_interrup()串口接收中断处理函数
 622          // 函数功能: 接收包括起始位'S'在内的十位数据到数据缓冲区
 623          //--------------------------------------------------------------------------------------------------
 624          com_interrupt(void) interrupt 4 using 3
 625          {
 626   1       // char  RECEIVR_buffer;
 627   1        if(RI)                                //处理接收中断
 628   1        {
 629   2        RI=0;                                //清除中断标志位
 630   2        KEY0=SBUF;
 631   2        SBUF=KEY0;
 632   2      }

⌨️ 快捷键说明

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