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

📄 cc1100_ii.c

📁 无线双向IC CC1100驱动
💻 C
📖 第 1 页 / 共 3 页
字号:

/*********************************************************/ 
/*函数名字:Spi_Read_Packet                              */ 
/*输入参数:接收缓冲区首址,最大长度                      */  
/*输出参数:校验标志                                     */ 
/*功能描述:数据存入缓冲区                               */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/  
unsigned char Spi_Read_Packet(unsigned char *Rx_buffer,unsigned char length) 
 {    
         Spi_Read_Burst(CC_RXFIFO,Rx_buffer,length); //接收数据
         Spi_Write_Strobe(CC_SFRX);                  //清缓冲区     
         return 1;
 } 
  

/*********************************************************/ 
/*函数名字:WriteRfSettings                              */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:模块寄存器配置                               */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/  
void WriteRfSettings(void) 
 { 
     Spi_Write_Byte (CC_IOCFG2,IOCFG2);          // 
     Spi_Write_Byte (CC_IOCFG0,IOCFG0);          // 
     Spi_Write_Byte (CC_FIFOTHR,FIFOTHR);        //  
     Spi_Write_Byte (CC_PKTLEN,PKTLEN);          // 
     Spi_Write_Byte (CC_PKTCTRL1,PKTCTRL1);      // 
     Spi_Write_Byte (CC_PKTCTRL0,PKTCTRL0);      // 
  //   Spi_Write_Byte (CC_ADDR,ADDR);              // 
     Spi_Write_Byte (CC_CHANNR,CHANNR);          // 
     Spi_Write_Byte (CC_FSCTRL1,FSCTRL1);        // 
     Spi_Write_Byte (CC_FSCTRL0,FSCTRL0);        // 
     Spi_Write_Byte (CC_FREQ2,FREQ2);            // 
     Spi_Write_Byte (CC_FREQ1,FREQ1);            // 
     Spi_Write_Byte (CC_FREQ0,FREQ0);            // 
     Spi_Write_Byte (CC_MDMCFG4,MDMCFG4);        // 
     Spi_Write_Byte (CC_MDMCFG3,MDMCFG3);        // 
     Spi_Write_Byte (CC_MDMCFG2,MDMCFG2);        // 
     Spi_Write_Byte (CC_MDMCFG1,MDMCFG1);        // 
     Spi_Write_Byte (CC_MDMCFG0,MDMCFG0);        // 
     Spi_Write_Byte (CC_DEVIATN,DEVIATN);        // 
     Spi_Write_Byte (CC_MCSM0,MCSM0);            // 
     Spi_Write_Byte (CC_FOCCFG,FOCCFG);          // 
     Spi_Write_Byte (CC_BSCFG,BSCFG);            // 
     Spi_Write_Byte (CC_AGCCTRL2,AGCCTRL2);      // 
     Spi_Write_Byte (CC_AGCCTRL1,AGCCTRL1);      // 
     Spi_Write_Byte (CC_AGCCTRL0,AGCCTRL0);      // 
     Spi_Write_Byte (CC_FREND1,FREND1);          // 
     Spi_Write_Byte (CC_FREND0,FREND0);          // 
     Spi_Write_Byte (CC_FSCAL3,FSCAL3);          // 
     Spi_Write_Byte (CC_FSCAL2,FSCAL2);          // 
     Spi_Write_Byte (CC_FSCAL1,FSCAL1);          // 
     Spi_Write_Byte (CC_FSCAL0,FSCAL0);          // 
    // Spi_Write_Byte (CC_FSTEST,FSTEST);          // 
     Spi_Write_Byte (CC_TEST2,TEST2);            // 
     Spi_Write_Byte (CC_TEST1,TEST1);            // 
     Spi_Write_Byte (CC_TEST0,TEST0);            // 
 }  
  
/*********************************************************/ 
/*函数名字:RX_ACK                                       */ 
/*输入参数:无                                           */  
/*输出参数:应答标志                                     */ 
/*功能描述:等待从机应答,返回应答标志                    */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/ 
unsigned char RX_ACK(void) 
 { 
     unsigned char *buffer = Rx_data; 
         unsigned int size,i=0;  
       
         size = sizeof(Rx_data);                     //最大长度 
         while (i <10000)                            //限时应答 
          { 
           delay_ns(15); 
           i++; 
           if (GDO0_H)                               //等待应答                 
            { 
                 if (Spi_Read_Packet(Rx_data,size))      //应答出现   
                  { 
                   if (!(buffer[0] ^= buffer[1]))        // 
                    { 
                 if ((buffer[2] == (~(buffer[3]))))  // 
                      { 
                       return 1;                         //成功应答 
                          }       
                        } 
                  } 
            } 
          }   
         return 0;                                   //没有应答  
 } 
  
/*********************************************************/ 
/*函数名字:TX_ACK                                       */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:接收成功发送应答                             */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/ 
void TX_ACK(void) 
 { 
     unsigned char PA; 
          
         PA = Rx_data[4];                            //获取功率  
     Spz_delay(50);                              //成功接收 
          
         Spi_Write_Byte (CC_FREND0,PA);              //功率配置 
     Spi_Write_Packet(Tx_data,4);                //发送应答         
 } 
  
/*********************************************************/ 
/*函数名字:Tx_cc1100                                    */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:发送数据,应答失败从发                        */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/  
void Tx_cc1100(void)  
 { 
     unsigned char PA,i; 
         unsigned char ACK,Tx_Size;      
          
         Tx_Size = sizeof(Tx_data);                  //数组长度 
         Tx_data[4] = PA = 0x10;                     //最大功率   
          
         for (i=0; i<2; i++) 
          {   
           Spi_Write_Byte (CC_FREND0,PA);            //功率配置 
           Spi_Write_Packet(Tx_data,Tx_Size);        //开始发送 
            
           ACK = RX_ACK(); 
           if (ACK)                                  //是否应答 
            { 
                 break;                                  //应答退出 
            } 
           Tx_data[4] = PA = 0x17;                   //降低功率         
          }   
         delay_nms(1); 
         Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
         Spi_Write_Strobe(CC_SRX);                   //进入接收 
 } 
  

void Data_Out(unsigned char Data)
{
  unsigned char i;
  for(i=0;i<8;i++)
  {
    if(Data&0x80)
    {
      S_OUT=0;
      __delay_cycles(100);
      S_OUT=1;
      __delay_cycles(300);
    }
    else
    {
      S_OUT=0;
      __delay_cycles(300);
      S_OUT=1;
      __delay_cycles(100);
    }
    Data<<=1;
  }
  
}



/*********************************************************/ 
/*函数名字:Rx_cc1100                                    */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:接收数据,成功发送应答                        */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/ 
void Rx_cc1100(void) 
 { 
    unsigned char i,size;                 
    
    for (i = 0; i <7; i++) 
         Rx_data[i] = 0;
            
    //size = Spi_Read_Byte(CC_RXBYTES);            //数据长度 
    if( (Spi_Read_Status(CC_RXBYTES)&0x7F) )            //数据长度 
    {
      size=Spi_Read_Byte(0x3F);
      if(size<62)
      {
          Spi_Read_Packet(Rx_data,size+2);        //接收数据 
      }
    }
    Spi_Write_Strobe(CC_SFRX);                  //清缓冲区    
 }  
  

unsigned char buffer[]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};
/*********************************************************/ 
/*函数名字:nain                                         */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:主程序                                       */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/
void main(void) 
 {  
     PORT_Init();
     Init_Devices();   
     
     Init_cc1100();      
     
     LED=1;
     __delay_cycles(200000);//Init finished
     LED=0;    
     
     //===============================以下为发送程序=====================  
     while(1)                                    //循环程序 
     { 
        Spi_Write_Byte (CC_FREND0,0x16);            //功率配置      
    //    Spi_Write_Byte(CC_TXFIFO,size);//长度
        Spi_Write_Burst(CC_TXFIFO,buffer,sizeof(buffer));
        Spi_Write_Strobe(CC_STX);
        while(GDO0_L)
              ;
        while(GDO0_H)
              ;
         LED=1;
        __delay_cycles(200000);//
        LED=0;
         Spi_Write_Strobe(CC_SFTX);                  //清缓冲区 
         Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
        __delay_cycles(300000);//
     } 
    //===============================以下为发送程序完毕=====================  
    
     
     
   //===============================以下为接收程序=====================  
    /* while(1)                                    //循环程序 
     {
        Spi_Write_Strobe(CC_SRX);                   //进入接收  
        
	while(GDO0_L)           ;       
        while(GDO0_H)           ;
         
        LED=1;
        __delay_cycles(200000);//Init finished
        LED=0;       
        __delay_cycles(200000);//Init finished
        
        Rx_cc1100();                    //接收数据   
        
       delay_nms(1); 
       Spi_Write_Strobe(CC_SIDLE);                 //进入空闲  

        __delay_cycles(30000);//Init finished 
     }   */
   //===========================接收程序完毕===============================  
 }        

/*********************************************************/ 

⌨️ 快捷键说明

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