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

📄 rf211s.c

📁 rf211s射频控制IC
💻 C
字号:
//#include "STC89LC52.H"
//#include "header.h"
#include <STRING.H>
#include <Intrins.h>
#include "global.h"

//------------------------------------------------------------------
//返回32位数据
//------------------------------------------------------------------
ulong read_data_spi(uchar addr)
{
	uchar i ,j;
	uchar temp_data ;
	ulong v_return ;
	temp_data = addr;
	v_return = 0 ;
	SPI_SCK = 0 ;
	_nop_();
		_nop_();
	_nop_();
	_nop_();
	SPI_SLE = 0 ;
	_nop_() ;
	_nop_() ;
		_nop_();
	_nop_();
//	temp_data = temp_data << 4 ;
	for(i=0;i<4;i++)
	{
		if(temp_data&(0x01<<(3-i)))
		{
			SPI_SDATA = 1 ;
		}
		else
		{
			SPI_SDATA = 0 ;
		}
	  _nop_();
	  _nop_();		
	  	_nop_();
	_nop_();
  	SPI_SCK = 1 ;		
	  _nop_();
	  _nop_();
	  _nop_();
	  _nop_();
	  	_nop_();
	_nop_();
//    temp_data  = temp_data << 1 ;
  	SPI_SCK = 0 ;
	  _nop_();  			  	  	
	  	_nop_();
	_nop_();
	}
	//-----读标识----------------
  SPI_SDATA = 0 ;
	_nop_();
	_nop_();		
		_nop_();
	_nop_();
  SPI_SCK = 1 ;		
	_nop_();
	_nop_();
		_nop_();
	_nop_();
	_nop_();
	_nop_();
  SPI_SCK = 0 ;
  	_nop_();
	_nop_();
		_nop_();
	_nop_();
  SPI_SDATA = 1 ;  //设置值
	_nop_();
    	_nop_();
	_nop_();
  for(j=0;j<4;j++)
   {	
    temp_data = 0 ;
  	for(i=0;i<8;i++)
	  {
		
	    SPI_SCK = 1 ;
	    _nop_() ;
			_nop_();
	_nop_();
      Flag_spi_data =  SPI_SDATA ;
//	    temp_data |= (uchar)SPI_SDATA ;
	    temp_data |= ((uchar)Flag_spi_data << (7-i)) ;
     	_nop_();
	    _nop_();
      _nop_() ;
      SPI_SCK = 0 ;
     	_nop_();
	_nop_();
	  _nop_() ;
      _nop_() ;
	}
	v_return =v_return << 8 ;
	v_return += (ulong)temp_data ;
    	_nop_();
	_nop_();
  }
/*
 	for(i=0;i<16;i++)
	{
		
		SPI_SCK = 1 ;
		_nop_() ;
		CY = SPI_SDATA ;
		temp_data = temp_data >> 1 ;
		_nop_() ;
    SPI_SCK = 0 ;
    _nop_() ;
    _nop_() ;
	}
	v_return+=(temp_data<<16) ;
*/
	SPI_SLE = 1 ;
	_nop_() ;
	return(v_return) ;
}	
		
void write_data_spi(char addr,uchar num,uchar *pd)
{
	uchar i , k , m = 0;
	uchar temp_data = addr;
	ulong temp = 0  ;
	SPI_SCK = 0 ;
	_nop_();
	_nop_();
		_nop_();
	_nop_();
	SPI_SLE = 0 ;
	_nop_() ;
	_nop_() ;
		_nop_();
	_nop_();
	for(i=0;i<4;i++)
	{
		if(temp_data&(0x01<<(3-i)))
		{
			SPI_SDATA = 1 ;
		}
		else
		{
			SPI_SDATA = 0 ;
		}
	  _nop_();
	  _nop_();		
	  	_nop_();
	_nop_();
      SPI_SCK = 1 ;		
	  _nop_();
	  _nop_();
	  _nop_();
	  _nop_();
  	SPI_SCK = 0 ;
	  _nop_();  			  	  	
	  	_nop_();
	_nop_();
	}
	//-----写标识----------------
  SPI_SDATA = 1 ;
	_nop_();
	_nop_();		
		_nop_();
	_nop_();
  SPI_SCK = 1 ;		
	_nop_();
	_nop_();
	_nop_();
	_nop_();
		_nop_();
	_nop_();
  SPI_SCK = 0 ;
	_nop_();
  		_nop_();
	_nop_();
	i = 0;
	//-------写数据-----------------------	
  temp = (ulong)*pd++ ;
  temp = (temp << 8 )+(ulong)*pd++ ;
  temp = (temp << 8 )+(ulong)*pd++ ;
  temp = (temp << 8 )+(ulong)*pd ;

	  for(i=0;i<num;i++)
	  {

		if(temp&(((ulong)0x01)<<(num-i-1)))
		{
			SPI_SDATA = 1 ;
		}
		else
		{
			SPI_SDATA = 0 ;
		}
	    _nop_();
	    _nop_();		
			_nop_();
	_nop_();
  	    SPI_SCK = 1 ;		
	    _nop_();
	    _nop_();
	    _nop_();
	    _nop_();
			_nop_();
	_nop_();
  	   SPI_SCK = 0 ;
	    _nop_();  			  	  	
			_nop_();
	_nop_();
	  }		

	SPI_SLE = 1 ;	
		_nop_();
	_nop_();
	return ;
}

void Set_TxOrRx(bit temp)   
{
	ulong temp_data ;
	if(temp==RX_SETTING)
	{
		temp_data = DATA_RX_CTRL1 ;
    write_data_spi(ADDR_CTRL1 ,32, &temp_data);
	}
	else
	{
	temp_data = DATA_TX_CTRL1 ;
    write_data_spi(ADDR_CTRL1 ,32, &temp_data);
	}
		temp_data = DATA_CTRL2 ;
    write_data_spi(ADDR_CTRL2 ,32, &temp_data);  
    temp_data = DATA_DTR ;
    write_data_spi(ADDR_DTR ,32, &temp_data);  
}


void SetChannel(uchar temp)
{
	uchar j ;
	ulong temp_f0 ;
	uchar data temp_data[12] ;
	uchar code *pd = &FREQUENCY_TABLE[temp*12];
	for(j=0;j<12;j++)
	{
	  temp_data[j]=(uchar)*pd++ ;//FREQUENCY_TABLE[i++] ;
	}
  write_data_spi(ADDR_F0,32,&temp_data[0]);
  write_data_spi(ADDR_F1,32,&temp_data[4]);
  write_data_spi(ADDR_F2,32,&temp_data[8]);
//  temp_f0 = read_data_spi(ADDR_F0) ;	  
//  temp_f0 = read_data_spi(ADDR_F1) ;	  
//  temp_f0 = read_data_spi(ADDR_F2) ;	
//  temp_f0 = read_data_spi(ADDR_F3) ;	  
  return ;
//	write_data_spi(0,12,temp_data[0]) ;
}
/*
void  reset_rf(void)
{
	ulong temp ;
	uint i ;
	temp = 0x00000000 ;
  write_data_spi(ADDR_RESET ,1, &temp);
	for(i=0;i<2000;i++)
	{
	  _nop_();
	}
  temp = 0xFFFFFFFF ;
  write_data_spi(ADDR_RESET ,1, &temp);
  for(i=0;i<2000;i++)
	{
	  _nop_();
	}
}
*/

⌨️ 快捷键说明

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