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

📄 nrf905._c

📁 nrf905无线收发模块利用模拟spi通信的程序 经此程序可转成串口通信
💻 _C
字号:
#include <iom128v.h>
#include <iom128.h>
#include <macros.h>
//#include <BIT.h>
#include "NRF905.h"
#include "spi.c"

#define  TX_EN   _PD6
#define  TRX_CE  _PD4
#define  PWR_UP  _PD2
#define  CD      READ_PD5
#define  AM      READ_PD7
#define  DR      READ_PD3

#define uchar unsigned char 
#define uint  unsigned int

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

RFConfig RxTxConf =
{
	10,
	RFConfig_Byte0, 	RFConfig_Byte1, 	RFConfig_Byte2, 	RFConfig_Byte3, 	RFConfig_Byte4,
	RFConfig_Byte5, 	RFConfig_Byte6, 	RFConfig_Byte7, 	RFConfig_Byte8, 	RFConfig_Byte9	
};


static void Delay(uchar n)
{
	uint i;
	while(n--)
	for(i=0;i<1000;i++);	
}

/*******************************************************************************************/
//function InitIO();		初始化IO
/*******************************************************************************************/
void nRF905Init(void)
{
	/*SPI init*/
	DDRD|=BIT(2)|BIT(4)|BIT(6);
	DDRD&=~(BIT(5)|BIT(7)|BIT(3));
	SpiInit();
	//CSN=1;						// Spi 	disable						
	//SCK=0;						// Spi clock line init high
	DR=1;						// Init DR for input
	AM=1;						// Init AM for input
	PWR_UP=1;					// nRF905 power on
	Delay(4);
	TRX_CE=0;					// Set nRF905 in standby mode
	TX_EN=0;					// set radio in Rx mode	

	//====================
	/*
	TX_EN_DDR	= 1;
	TRX_CE_DDR	= 1;
	PWR_UP_DDR	= 1;
	DR_DDR		= 0;
	CD_DDR		= 0;
	*/
	//====================
}

/*******************************************************************************************/
//function WriteTxAddress();	写入目标地址
/*******************************************************************************************/
void WriteTxAddress(void)
{
	unsigned char i;
	unsigned char len= (RxTxConf.buf[2]>>4);
	CSN=0;						// Spi enable for write a spi command	
	SpiWrite(WTA);				// Write address command
	//for (i=0;i<TX_AWF;i++) 
	for (i=0;i<len;i++)
	{
		SpiWrite(TxAddress[i]);
		delayus(10);
	}	
	CSN=1;						// Spi disable
}

/*******************************************************************************************/
//function Config905();			//配置905寄存器
/*******************************************************************************************/
void Config905(void)
{
	uchar i;					
	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]);
		delayus(10);
	}
	CSN=1;						// Disable Spi
	WriteTxAddress();
}

/*******************************************************************************************/
//function SetTxMode();			设置为发送模式
/*******************************************************************************************/
void SetTxMode(void)				
{	
	TRX_CE=0;
	TX_EN=1;
	Delay(1); 					// delay for mode change(>=650us)
}				

/*******************************************************************************************/
//function SetRxMode();			设置为接收模式
/*******************************************************************************************/
void SetRxMode(void)
{
	TX_EN=0;
	TRX_CE=1;
	Delay(1); 					// delay for mode change(>=650us)				
}

//发送数据包
/*******************************************************************************************/
void TxPacket(unsigned char *TxBuf)
{
	uchar i;

	CSN=0;						// Spi enable for write a spi command	
	SpiWrite(WTP);				// Write payload command
	//for (i=0;i<TX_PW;i++)
	for (i=0;i<RxTxConf.buf[4];i++)
	{
		SpiWrite(TxBuf[i]);		// Write 32 bytes Tx data
		delayus(10);
	}
	CSN=1;						// Spi disable						

	TRX_CE=1;					// Set TRX_CE high,start Tx data transmission
	Delay(1);					// while (DR!=1);
	TRX_CE=0;					// Set TRX_CE low
}

/*
*******************************************************************************************
*	读取数据包
*	返回值:		1-成功接收到数据		0-没有接收到数据
*******************************************************************************************
*/
unsigned char RxPacket(unsigned char *RxBuf)
{
	uchar i;
	if (DR)		//DR 高电平		有接收到数据
	{
		TRX_CE=0;					// Set nRF905 in standby mode	

		CSN=0;						// Spi enable for write a spi command
		SpiWrite(RRP);				// Read payload command	
		//for (i = 0 ;i < RX_PW ;i++)
		for (i = 0 ;i < RxTxConf.buf[3] ;i++)
		{
			RxBuf[i]=SpiRead();		// Read data and save to buffer		
			delayus(10);
		}
		CSN=1;						// Disable spi
		while(DR);//||AM);	

		TRX_CE=1;

		return 1;
	}
	else
	{
		return 0;
	}
}

⌨️ 快捷键说明

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