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

📄 cc1100_ii.c

📁 无线双向IC CC1100驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
	//Timer0_Init();
	
	MCUCR = 0x00;
	EICRA = 0x00; //extended ext ints
	EIMSK = 0x00;
	
	TIMSK0 = 0x00; //timer 0 interrupt sources
	TIMSK1 = 0x00; //timer 1 interrupt sources
	TIMSK2 = 0x00; //timer 2 interrupt sources
	
	PCMSK0 = 0x00; //pin change mask 0 
	PCMSK1 = 0x00; //pin change mask 1 
	PCMSK2 = 0x00; //pin change mask 2
	PCICR  = 0x00; //pin change enable 
	PRR    = 0x00; //power controlle
	
	//_SEI(); 	   //re-enable interrupts
}


/*********************************************************/ 
/*函数名字:SpiTxRx_Byte                                 */ 
/*输入参数:写入寄存器的数据                             */  
/*输出参数:读取寄存器的数据                             */ 
/*功能描述:通过SPI 串口读写一字节数据                   */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/   
unsigned char SpiTxRx_Byte(unsigned char data) 
 { 
     unsigned char i, temp = 0;              
          
     for (i=0; i<8; i++)                         //读写八位 
      {                                      
       if (data & 0x80) 
            { 
             MOSI_H;                                 //写出高位    
                }                 
           else  
            { 
             MOSI_L;                                 //写出低位 
            } 
           
       SCLK_H;                                   //发出时钟 
       NOP(); 
           NOP(); 
            
           data <<= 1; 
           temp <<= 1;                               //数据左移 
                                  
       if (MISO_H) 
            { 
             temp += 1 ;                             //记录高位   
                }              
           else   
            { 
             temp += 0;                              //记录低位 
                } 

       SCLK_L;                                   //结束时钟                         
       NOP(); 
           NOP(); 
      } 
     return temp;                                //返回数据 
 } 

/*********************************************************/ 
/*函数名字:RESET_CC1100                                 */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:写入复位滤波命                               */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/ 
void RESET_CC1100(void)  
 { 
         CSN_L;                                      //片选使能  
         while (MISO_H);                             //等待响应 
         SpiTxRx_Byte(CC_SRES);                      //复位命令 
         while (MISO_H);                             //等待响应 
         CSN_H;                                      //结束使能 
 } 

/*********************************************************/ 
/*函数名字:POWER_UP_RESET_CC1100                        */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:模块上电初始化                               */  
/*建造日期;2008年03月30日                               */ 
/*********************************************************/   
void POWER_UP_RESET_CC1100(void)  
 { 
     CSN_H;                                      //上电拉高 
	 SCLK_H,MOSI_L;                              // 
	 delay_ns(1);                                // 
	 CSN_L;                                      //片选使能 
	 delay_ns(1);                                //  
	 CSN_H;                                      //选择拉高 
	 delay_ns(80);                               // 
	 SCLK_L;                                     //拉低时钟 
	 RESET_CC1100();                                        //复位命令 
 }  

/*********************************************************/ 
/*函数名字:Init_cc1100                                  */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:初始化模块                                   */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/  
void Init_cc1100(void)  
 { 
     POWER_UP_RESET_CC1100();                    //上电复位 
     WriteRfSettings();                          //写入配置 
     Spi_Write_Burst(CC_PATABLE,PaTabel,8);      //功率配置 
     Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
     Spi_Write_Strobe(CC_SFRX);                  //清缓冲区       

 } 
  
/*********************************************************/ 
/*函数名字:Spi_Write_Strobe                             */ 
/*输入参数:滤波命令                                     */  
/*输出参数:无                                           */ 
/*功能描述:写入滤波命令                                 */  
/*建造日期;2008年03月30日                               */ 
/*********************************************************/   
void Spi_Write_Strobe(unsigned char strobe)  
 { 
     CSN_L;                                      //片选使能                             
     while (MISO_H);                             //等待响应 
     SpiTxRx_Byte(strobe);                                 //写入命令 
     CSN_H;                                      //结束使能                          
 } 

/*********************************************************/ 
/*函数名字:Spi_Read_Byte                                */ 
/*输入参数:寄存器地址                                   */  
/*输出参数:寄存器配置                                   */ 
/*功能描述:单字节读取寄存器                             */  
/*建造日期;2008年03月30日                               */ 
/*********************************************************/  
unsigned char Spi_Read_Byte(unsigned char addr) 
 { 
     unsigned char value;             
                 
     CSN_L;                                      //片选使能     
     while (MISO_H);                             //等待响应  
     SpiTxRx_Byte((addr|Read_Byte));             //送出地址  
     value = SpiTxRx_Byte(0);                    //读寄存器 
     CSN_H;                                      //结束使能                           
          
     return value;                               //返回数据 
 } 


/*********************************************************/ 
/*函数名字:Spi_Read_Status                                */ 
/*输入参数:寄存器地址                                   */  
/*输出参数:寄存器配置                                   */ 
/*功能描述:单字节读取寄存器                             */  
/*建造日期;2008年03月30日                               */ 
/*********************************************************/  
unsigned char Spi_Read_Status(unsigned char addr) 
 { 
     unsigned char value;             
                 
     CSN_L;                                      //片选使能     
     while (MISO_H);                             //等待响应  
     SpiTxRx_Byte((addr|Read_Burst));             //送出地址  
     value = SpiTxRx_Byte(0);                    //读寄存器 
     CSN_H;                                      //结束使能                           
          
     return value;                               //返回数据 
 } 

/**********************************************************/ 
/*函数名字:Spi_Write_Byte                                */ 
/*输入参数:寄存器地址,配置                              */  
/*输出参数:无                                            */ 
/*功能描述:单字节写入寄存器                              */  
/*建造日期;2008年03月30日                                */ 
/**********************************************************/  
void Spi_Write_Byte(unsigned char addr,unsigned char value) 
 { 
     CSN_L;                                      //片选使能 
     while (MISO_H);                             //等待响应  
     SpiTxRx_Byte(addr);                         //送出地址 
     SpiTxRx_Byte(value);                        //写入配置 
     CSN_H;                                      //结束使能                          
 } 
  
/**********************************************************/ 
/*函数名字:Spi_Read_Burst                                */ 
/*输入参数:寄存器地址,接收缓冲区首址,接收字节数        */  
/*输出参数:结果存储在缓冲区地址                          */ 
/*功能描述:连续读取寄存器数据                            */  
/*建造日期;2008年03月30日                                */ 
/**********************************************************/  
void Spi_Read_Burst (unsigned char addr,unsigned char *buffer,unsigned char count)  
 { 
     unsigned char i; 
          
     CSN_L;                                      //片选使能 
     while (MISO_H);                             //等待响应  
         SpiTxRx_Byte((addr|Read_Burst));            //连续读取 
          
     for (i = 0; i < count; i++)                 // 
          { 
       buffer[i] = SpiTxRx_Byte(0);              //存储数据 
      } 
     CSN_H;                                      //结束使能                           
 }  
  
/**********************************************************/ 
/*函数名字:Spi_Write_Burst                               */ 
/*输入参数:寄存器地址,发射缓冲区首址,发送字节数        */  
/*输出参数:无                                            */ 
/*功能描述:连续写入寄存器数据                            */  
/*建造日期;2008年03月30日                                */ 
/**********************************************************/  
void Spi_Write_Burst(unsigned char addr,unsigned char *buffer,unsigned char count)  
{ 
     unsigned char i; 
         
     CSN_L;                                      //片选使能 
     while (MISO_H);                             //等待响应 
     SpiTxRx_Byte((addr|Write_Burst));           //连续写入 
     SpiTxRx_Byte(count);//长度
     for (i = 0; i < count; i++)                 // 
           { 
       SpiTxRx_Byte(buffer[i]);                  //送出数据 
      } 
     CSN_H;                                      //结束使能                            
 } 
   
/*********************************************************/ 
/*函数名字:Spi_Write_Packet                             */ 
/*输入参数:发送缓冲区首址,数组长度                      */  
/*输出参数:无                                           */ 
/*功能描述:发送缓冲区数据                               */  
/*建造日期;2008年03月30日                               */   
/*********************************************************/  
void Spi_Write_Packet(unsigned char *Tx_buffer,unsigned char size)  
 {    
     unsigned char i; 
           
         Spi_Write_Byte(CC_TXFIFO,size);             //先送长度 
         Spi_Write_Burst(CC_TXFIFO,Tx_buffer,size);  //发送数据 
         Spi_Write_Strobe(CC_STX);                   //发送模式 
          
         i = 0; 
         while (GDO0_L)                              //等待送出 
          { 
           if (i > 10) break;                        //限时等待 
           delay_nms(1);                             // 
           i++;                                      // 
          } 
         i = 0;  
         while (GDO0_H)                              //送出完毕 
          { 
           if (i > 10) break;                        //限时等待 
           delay_nms(1);                             // 
           i++;                                      // 
          } 
         delay_nms(1); 
         Spi_Write_Strobe(CC_SFTX);                  //清缓冲区 
         Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
         Spi_Write_Strobe(CC_SRX);                   //进入接收 
 } 

⌨️ 快捷键说明

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