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

📄 nrf905.c

📁 NRF905无线通信处理器及SPI接口程序
💻 C
字号:
#include <ipOS.h>
#include "NRF905.h"
#include "SPI.h"


#define uchar unsigned char 
#define uint  unsigned int

u8_t TxAddress[4]={TX_ADDR_Byte0,TX_ADDR_Byte1,TX_ADDR_Byte2,TX_ADDR_Byte3};

RFConfig RxTxConf =
{
	10,
	{RFConfig_Bit0, RFConfig_Bit1, 	RFConfig_Bit2, 	RFConfig_Bit3, 	RFConfig_Bit4,
	RFConfig_Bit5, 	RFConfig_Bit6, 	RFConfig_Bit7, 	RFConfig_Bit8, 	RFConfig_Bit9}	
};


//static 
void Delay(u8_t n)
{
	u8_t i;
	while(n--)
	for(i=0;i<140;i++);
	 ;	
}


/*******************************************************************************************/
//function InitIO();		初始化IO
/*******************************************************************************************/
void nRF905Init(void)
{
	/*SPI init*/
	SpiInit();
        /*
	TX_EN_DDR	= 1;
	TRX_CE_DDR	= 1;
	PWR_UP_DDR	= 1;
	DR_DDR		= 0;
	CD_DDR		= 0;
        PAE_DDR         = 1;
	*/
	*(u8_t *)RCDIR=0xF0;
	*(u8_t *)RBDIR=0x07;
        //asm("clrb RCOUT,3");  //PAE      =0;// disable the pa
  
	/*ICO*/
//	DR=1;						// Init DR for input
//	AM=1;						// Init AM for input
//	CD=1;						// Init CD for input
	/*模式设置
	PWR_UP=1;nRF905 power on
	TRX_CE=0;Set nRF905 in standby mode
	TX_EN=0;set radio in Rx mode	*/
	asm("setb RCOUT,2
	     clrb RCOUT,1
             clrb RCOUT,0");
}        


/*******************************************************************************************/
//function WriteTxAddress();	写入目标地址
/*******************************************************************************************/
void WriteTxAddress(void)
{
	u8_t i;
	asm("clrb RFOUT,5");   //SPI_CSN=0;						// Spi enable for write a spi command	
	SpiWrite(WTA);				// Write address command
	for (i=0;i<TX_AWF;i++)
	{
		SpiWrite(TxAddress[i]);
	}	
	asm("setb RFOUT,5");   //SPI_CSN=1;						// Spi disable
}


/*******************************************************************************************/
//function Config905();			//配置905寄存器
/*******************************************************************************************/
void Config905(void)
{
	u8_t i;					
	asm("clrb RFOUT,5");  //SPI_CSN=0;						// Spi enable for write a spi command
	SpiWrite(WC);				// Write config command写放配置命令
	for (i=0;i<RxTxConf.n;i++)	// Write configration words  写放配置字
	{
		SpiWrite(RxTxConf.buf[i]);
	}
	asm("setb RFOUT,5");  //SPI_CSN=1;						// Disable Spi

	WriteTxAddress();
}




/*******************************************************************************************/
//function SetTxMode();			设置为发送模式
/*******************************************************************************************/
void SetTxMode(void)				
{	
        asm("setb RCOUT,3"); //PAE= 1;// Enable the pa
	/*TRX_CE=0;
	TX_EN=1;*/
	asm("setb RCOUT,0
             clrb RCOUT,1");
	Delay(1); 					// delay for mode change(>=650us)
}				

/*******************************************************************************************/
//function SetRxMode();			设置为接收模式
/*******************************************************************************************/
void SetRxMode(void)
{
        asm("clrb RCOUT,3");  //PAE= 0;// disnable the pa
	/*TX_EN=0;
	TRX_CE=1;*/
	asm("clrb RCOUT,0
             setb RCOUT,1");
        
	Delay(1); 					// delay for mode change(>=650us)				
}




//发送数据包
/*******************************************************************************************/
void TxPacket(unsigned char *TxBuf)
{
	u8_t i;
	asm("clrb RFOUT,5");  //SPI_CSN=0;						// Spi enable for write a spi command	
	SpiWrite(WTP);				// Write payload command
	for (i=0;i<TX_PW;i++)
	{
		SpiWrite(TxBuf[i]);		// Write 32 bytes Tx data
	}
	asm("setb RFOUT,5");  //SPI_CSN=1;						// Spi disable						
        asm("setb RCOUT,1");
        asm("setb RCOUT,3"); //PAE= 1;// Enable the pa
        Delay(100);
	   //TRX_CE=1;					// Set TRX_CE high,start Tx data transmission
	//Delay(1);					// while (DR!=1);
        //
        while (!((*(u8_t *)RBIN)&0x04));
	asm("clrb RCOUT,1");  //TRX_CE=0,Set TRX_CE low
        asm("clrb RCOUT,0");
        asm("clrb RCOUT,3");  //PAE= 0;
        //Delay(2);// 限制发包数率	
}

u8_t RxPacket(u8_t *RxBuf)
{
	uchar i;
        asm("clrb RCOUT,3"); //PAE= 0;// if pa enable,disnable 
	if ((*(u8_t *)RBIN)&0x04)		//DR 高电平		有接收到数据
	{
		asm("clrb RCOUT,1"); //TRX_CE=0;					// Set nRF905 in standby mode	
		asm("clrb RFOUT,5"); //SPI_CSN=0;						// Spi enable for write a spi command
		SpiWrite(RRP);				// Read payload command	
		for (i = 0 ;i < RX_PW ;i++)
		{
			RxBuf[i]=SpiRead();		// Read data and save to buffer		
		}
		asm("setb RFOUT,5"); //SPI_CSN=1;						// Disable spi
		//while((*(u8_t *)RBIN)&0x04);//||AM);	

		asm("setb RCOUT,1"); //TRX_CE=1;

		return 1;
	}
	else
	{
		return 0;
	}
}

/*******************************************************************************************/
//#ifdef SETST_BYMODE_ENABLE
	void SetST_BYmode(void)
	{
                asm("clrb RCOUT,3");  //PAE= 0;// if pa enable,disnable 
		/*TX_EN=0;
		TRX_CE=0;*/
	        asm("clrb RCOUT,1
                     clrb RCOUT,0");
		Delay(1); 					// delay for mode change(>=650us)				
	}
//#endif

void ReadStatic(void)
{
	volatile u8_t R0,R1,R2,R3,R4,R5,R6,R7,R8,R9;
	SetST_BYmode();
	asm("clrb RFOUT,5");
	SpiWrite(RC);
	R0=SpiRead();
        R1=SpiRead();
        R2=SpiRead();
        R3=SpiRead();
        R4=SpiRead();
        R5=SpiRead();
        R6=SpiRead();
        R7=SpiRead();
        R8=SpiRead();
        R9=SpiRead();
}


⌨️ 快捷键说明

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