void ANO_NRF::TxPacket(uint8_t * tx_buf, uint8_t len)
{	
	CE_L();		 //StandBy I模式	
	
	Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
	Write_Buf(WR_TX_PLOAD, tx_buf, len); 			 // 装载数据	
	CE_H();		 //置高CE,激发数据发送
}
Esempio n. 2
0
void ANO_NRF::Init(u8 model, u8 ch)
{
	CE_L();

	Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);	//写RX节点地址 
	Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH); 		//写TX节点地址  
	Write_Reg(NRF_WRITE_REG+EN_AA,0x01); 													//使能通道0的自动应答 
	Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x01);											//使能通道0的接收地址 
	Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);											//设置自动重发间隔时间:500us;最大自动重发次数:10次 2M波特率下
	Write_Reg(NRF_WRITE_REG+RF_CH,ch);														//设置RF通道为CHANAL
	Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); 												//设置TX发射参数,0db增益,2Mbps,低噪声增益开启
	//Write_Reg(NRF_WRITE_REG+RF_SETUP,0x07); 												//设置TX发射参数,0db增益,1Mbps,低噪声增益开启
/////////////////////////////////////////////////////////
	if(model==1)				//RX
	{
		Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);								//选择通道0的有效数据宽度 
		Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f);   		 // IRQ收发完成中断开启,16位CRC,主接收
	}
	else if(model==2)		//TX
	{
		Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);								//选择通道0的有效数据宽度 
		Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);   		 // IRQ收发完成中断开启,16位CRC,主发送
	}
	else if(model==3)		//RX2
	{
		Write_Reg(FLUSH_TX,0xff);
		Write_Reg(FLUSH_RX,0xff);
		Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f);   		 // IRQ收发完成中断开启,16位CRC,主接收
		
		RW(0x50);
		RW(0x73);
		Write_Reg(NRF_WRITE_REG+0x1c,0x01);
		Write_Reg(NRF_WRITE_REG+0x1d,0x06);
	}
	else								//TX2
	{
		Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);   		 // IRQ收发完成中断开启,16位CRC,主发送
		Write_Reg(FLUSH_TX,0xff);
		Write_Reg(FLUSH_RX,0xff);
		
		RW(0x50);
		RW(0x73);
		Write_Reg(NRF_WRITE_REG+0x1c,0x01);
		Write_Reg(NRF_WRITE_REG+0x1d,0x06);
	}
	CE_H();
		delayms(50);
	
}
Esempio n. 3
0
u8 ANO_NRF::NRF_Tx_Dat(u8 *txbuf,u8 *AckPacket)
{
	u8 state;  
 
	 /*ce为低,进入待机模式1*/
	CE_L();

	/*写数据到TX BUF 最大 32个字节*/						
   Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);

      /*CE为高,txbuf非空,发送数据包 */   
 	 CE_H();
	  	
	  /*等待发送完成中断 */                            
	while(NRF_Read_IRQ()!=0);

	 state = Read_Reg(NRFRegSTATUS);/*读取状态寄存器的值 */  
	 Write_Reg(NRF_WRITE_REG+NRFRegSTATUS,state); 	
	 
   if(state&RX_DR)
	 {
		 
		 Read_Buf(RD_RX_PLOAD, AckPacket, 32);
	 }
	 Write_Reg(FLUSH_TX,NOP);//清除TX FIFO寄存器 
	 
	 
	return state;   	 


} 
bool ANO_NRF::Check(void)
{ 
	u8 buf1[5]; 
	u8 i; 
	/*写入5个字节的地址. */ 
	Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,5); 
	/*读出写入的地址 */ 
	Read_Buf(TX_ADDR,buf1,5); 
	/*比较*/ 
	for(i=0;i<5;i++) 
	{ 
		if(buf1[i]!=TX_ADDRESS[i]) 
			break; 
	} 
	if(i==5)
		return true; //MCU与NRF成功连接 
	else
		return false; //MCU与NRF不正常连接 
}
void ANO_NRF::TxPacket_AP(uint8_t * tx_buf, uint8_t len)
{	
	CE_L();		 //StandBy I模式	
	Write_Buf(0xa8, tx_buf, len); 			 // 装载数据
	CE_H();		 //置高CE
}