Example #1
0
/**
  * @brief   用于从NRF的接收缓冲区中读出数据
  * @param   
  *		@arg rxBuf :用于接收该数据的数组,外部定义	
  * @retval 
  *		@arg 接收结果
  */
u8 NRF_Rx_Dat(u8 *rxbuf)
{
		u8          state; 
	  u16  link_count=0;
		NRF_CE_HIGH();	 //进入接收状态
		 /*等待接收中断*/
		while(NRF_Read_IRQ()!=0)
		{
			  link_count ++;
			  if(link_count == 5000)  //5000为最大重连次数
					return ERROR;
		}			
		
		NRF_CE_LOW();  	 //进入待机状态
		/*读取status寄存器的值  */               
		state=SPI_NRF_ReadReg(STATUS);
		 
		/* 清除中断标志*/      
		SPI_NRF_WriteReg(NRF_WRITE_REG+STATUS,state);

		/*判断是否接收到数据*/
		if(state&RX_DR)                                 //接收到数据
		{
			SPI_NRF_ReadBuf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据
			SPI_NRF_WriteReg(FLUSH_RX,NOP);          //清除RX FIFO寄存器
			return RX_DR; 
		}
		else    
			return ERROR;                    //没收到任何数据
}
Example #2
0
/*
 * 函数名:NRF_Check
 * 描述  :主要用于NRF与MCU是否正常连接
 * 输入  :无	
 * 输出  :SUCCESS/ERROR 连接正常/连接失败
 * 调用  :外部调用
 */
u8 NRF_Check(void)
{
	u8 buf[5]={0xC2,0xC2,0xC2,0xC2,0xC2};
	u8 buf1[5];
	u8 i; 
	 
	/*写入5个字节的地址.  */  
	SPI_NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,buf,5);

	/*读出写入的地址 */
	SPI_NRF_ReadBuf(TX_ADDR,buf1,5); 
	 
	/*比较*/               
	for(i=0;i<5;i++)
	{
		if(buf1[i]!=0xC2)
		break;
	} 
	       
	if(i==5)
		return SUCCESS ;        //MCU与NRF成功连接 
	else
		return ERROR ;        //MCU与NRF不正常连接
}