Exemple #1
0
u8 xNRF_TxPacket(void *txbuf,u8 len,void *rxbuf,u8* rxlen)		//
{
	u8 sta;
	NRF_Write_Buf(WR_TX_PLOAD,txbuf,len);//写数据到TX FIFO
	NRF_CE=1; //启动发送
	while(NRF_IRQ == 1); //等待发送完成
	sta=NRF_Read_Reg(STATUS); //读取状态寄存器的值 
	NRF_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除 TX_DS或MAX_RT 中断标志
	
	if(sta&MAX_TX) //达到最大重发次数
	{
		NRF_Write_Reg(FLUSH_TX,0xff);//清除 TX FIFO 寄存器
		return MAX_TX;
	}
	if(sta&RX_OK)		//收到应答数据包
	{
		*rxlen = NRF_Read_Reg(R_RX_PL_WID);
		NRF_Read_Buf(RD_RX_PLOAD,rxbuf,*rxlen);//读取数据
		NRF_Write_Reg(FLUSH_RX,0xff);//清除 RX FIFO 寄存器 ???
		
		return RX_OK;
	}
	if(sta&TX_OK)//发送完成
	{
		return TX_OK;
	}
	return 0;//其他原因发送失败
}
//查询中断
void Nrf_Irq(void)
{
    uint8_t sta = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS);
    if(sta & (1<<RX_DR))//接收轮训标志位
    {
        NRF_Read_Buf(RD_RX_PLOAD,NRF24L01_RXDATA,RX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
        ReceiveDataFormNRF();      //自己做修改
    }
    NRF_Write_Reg(0x27, sta);//清除nrf的中断标志位
}
Exemple #3
0
u8 NRF_Check(void)
{
	u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
	u8 i;
//	SPI_SetSpeed(NRF_SPI,SPI_BaudRatePrescaler_8); //spi 速度为 9Mhz
	NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);//写入 5 个字节的地址.
	NRF_Read_Buf(TX_ADDR,buf,5); //读出写入的地址 
	for(i=0;i<5;i++)if(buf[i]!=0XA5)break;
	if(i!=5)return 1; //检测 24L01 错误 
	return 0; //检测到 24L01
} 
Exemple #4
0
/*
*****************************************************************
* 检测NRF是否正常,向nRF的写寄存器写入buf,然后读出来,如果nRF不正常,则无法读出或者读出数据不正确。
*****************************************************************
*/    
u8 NRF_CHECK(void)
{
	u8 buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5};
	u8 i;
	      
	NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5);  
	buf[0] = 0;
	NRF_Read_Buf(TX_ADDR,buf,5); 
	for(i=0;i<5;i++)if(buf[i]!=0XA5)break;                                                                   
	if(i!=5)return 0;     
	return 1;                
}
Exemple #5
0
u8 NRF_RxPacket(void *rxbuf)		//成功接收数据返回0
{
	u8 sta; 
	sta=NRF_Read_Reg(STATUS); //读取状态寄存器的值
	NRF_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除 TX_DS 或MAX_RT 中断标志
	
	if(sta&RX_OK)//接收到数据
	{
		NRF_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据
		NRF_Write_Reg(FLUSH_RX,0xff);//清除 RX FIFO 寄存器
		return 0;
	} 
	return 1;//没收到任何数据
} 
void Nrf_Check_Event(void)
{
	u8 sta = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS);
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<RX_DR))
	{	
		u8 rx_len = NRF_Read_Reg(R_RX_PL_WID);
		if(rx_len<33)
		{
			NRF_Read_Buf(RD_RX_PLOAD,NRF24L01_RXDATA,rx_len);// read receive payload from RX_FIFO buffer
			LED2_ON
			Data_Receive_Anl(NRF24L01_RXDATA,rx_len);
			
			Nrf_Erro = 0;
		}
		else
		{
			NRF_Write_Reg(FLUSH_RX,0xff);//Çå¿Õ»º³åÇø
		}
	}
	else
	{
		Nrf_Erro ++;
		if(Nrf_Erro>2000)	//³¬¹ý1sδ½ÓÊÕnrfÊý¾Ý £¬ÉÏËø
		{
			Nrf_Erro = 0;
			Rc_C.ARMED = 0;
		}
	}
	
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<TX_DS))
	{
		//LED1_ONOFF();
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<MAX_RT))
	{
		if(sta & 0x01)	//TX FIFO FULL
		{
			NRF_Write_Reg(FLUSH_TX,0xff);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	NRF_Write_Reg(NRF_WRITE_REG + NRFRegSTATUS, sta);
}
Exemple #7
0
//接受数据时放入新数据包
u8 xNRF_RxPacket(void *rxbuf,u8* rxlen,void *txbuf,u8 txlen)
{
	u8 sta;
	
	sta=NRF_Read_Reg(STATUS); 						//读取状态寄存器的值
	NRF_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除 TX_DS 或MAX_RT 中断标志
	
	if(sta&RX_OK)//接收到数据
	{
		*rxlen = NRF_Read_Reg(R_RX_PL_WID);
		NRF_Read_Buf(RD_RX_PLOAD,rxbuf,*rxlen);//读取数据
		NRF_Write_Reg(FLUSH_RX,0xff);//清除 RX FIFO 寄存器
		NRF_Write_Buf(W_ACK_PAYLOAD,txbuf,txlen);	//写入应答时携带的数据包
		return 0;
	} 
	return 1;//没收到任何数据
}
u8 Nrf24l01_Check(void)
{ 
	u8 buf1[5]; 
	u8 i; 
	/*写入5个字节的地址. */ 
	NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,5); 
	/*读出写入的地址 */ 
	NRF_Read_Buf(TX_ADDR,buf1,5); 
	/*比较*/ 
	for(i=0;i<5;i++) 
	{ 
		if(buf1[i]!=TX_ADDRESS[i]) 
			break; 
	} 
	if(i==5)
		return SUCCESS ; //MCU与NRF成功连接 
	else
		return ERROR ; //MCU与NRF不正常连接 
}
Exemple #9
0
uint8_t NRF_Check(void)
{ 
	uint8_t buf1[5]; 
	uint8_t i; 
	/*写入5个字节的地址. */ 
	NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,TX_ADDRESS,5); 
	/*读出写入的地址 */ 
	NRF_Read_Buf(TX_ADDR,buf1,5); 
	/*比较*/ 
	for(i=0;i<5;i++) 
	{ 
		if(buf1[i]!=TX_ADDRESS[i]) 
			break; 
	} 
	if(i==5)
		return 1; //MCU与NRF成功连接 
	else
		return 0; //MCU与NRF不正常连接 
}
void Nrf_Check_Event(void)	//将2401接收到的数据返回串口
{
	u8 sta = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS);
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<RX_DR))//接收中断
	{
		u8 rx_len = NRF_Read_Reg(R_RX_PL_WID);	//2401寄存器,值为0x60
		if(rx_len<33)
		{
			NRF_Read_Buf(RD_RX_PLOAD,NRF24L01_RXDATA,rx_len);// read receive payload from RX_FIFO buffer
			Uart1_Send_Buf(NRF24L01_RXDATA,rx_len);
		}
		else 
		{
			NRF_Write_Reg(FLUSH_RX,0xff);//清空缓冲区
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<TX_DS))//发送中断
	{
		//PC_Debug_Show(1,2);
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<MAX_RT))//应该是缓存溢出中断
	{
		static u16 max_cnt = 0;
		max_cnt++;
		PC_Debug_Show(7,max_cnt);
		
		if(sta & 0x01)	//TX FIFO FULL
		{
			NRF_Write_Reg(FLUSH_TX,0xff);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	NRF_Write_Reg(NRF_WRITE_REG + NRFRegSTATUS, sta);//??nrf??????
}
//判断SPI接口是否接入NRF芯片是否可用
u8 NRF24L01_Check(void) 
{ 
   u8 buf[5]={0xC2,0xC2,0xC2,0xC2,0xC2}; 
   u8 buf1[5]; 
   u8 i=0; 
    
   /*写入5 个字节的地址.  */ 
   NRF_Write_Buf(NRF_WRITE_REG+TX_ADDR,buf,5); 
     
   /*读出写入的地址 */ 
   NRF_Read_Buf(TX_ADDR,buf1,5); 
   
    /*比较*/ 
   for (i=0;i<5;i++) 
   { 
      if (buf1[i]!=0xC2) 
      break; 
   } 
  
   if (i==5)   {printf("初始化NRF24L01成功...\r\n");return 1 ;}        //MCU 与NRF 成功连接 
   else        {printf("初始化NRF24L01出错...\r\n");return 0 ;}        //MCU与NRF不正常连接    
} 
Exemple #12
0
void Nrf_Check_Event(void)
{
	u8 sta = NRF_Read_Reg(NRF_READ_REG + NRFRegSTATUS);
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<RX_DR))
	{
		u8 rx_len = NRF_Read_Reg(R_RX_PL_WID);
		if(rx_len<33)
		{
			NRF_Read_Buf(RD_RX_PLOAD,NRF24L01_RXDATA,rx_len);// read receive payload from RX_FIFO buffer
			//LED1_ONOFF();
			Data_Receive_Anl(NRF24L01_RXDATA,rx_len);
		}
		else 
		{
			NRF_Write_Reg(FLUSH_RX,0xff);//Çå¿Õ»º³åÇø
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<TX_DS))
	{
		Ledx_ONOFF(1);
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	if(sta & (1<<MAX_RT))
	{
		if(1)//sta & 0x01)	//TX FIFO FULL
		{
			NRF_Write_Reg(FLUSH_TX,0);
		}
	}
	////////////////////////////////////////////////////////////////
	////////////////////////////////////////////////////////////////
	NRF_Write_Reg(NRF_WRITE_REG + NRFRegSTATUS, sta);
}