コード例 #1
0
 /*
 * 函数名:NRF_Rx_Dat
 * 描述  :用于从NRF的接收缓冲区中读出数据
 * 输入  :rxBuf:用于接收该数据的数组,外部定义	
 * 输出  :接收结果,
 * 调用  :外部调用
 */ 
u8 NRF_Rx_Dat(u8 *rxbuf)
{
	u8 state; 
    
    if( nrf_mode != RX_MODE)
    {
        NRF_RX_Mode();
    }
    
	NRF_CE_HIGH();	 //进入接收状态
	 /*等待接收中断*/
	while(NRF_Read_IRQ()!=0); 
	
	NRF_CE_LOW();  	 //进入待机状态
	/*读取status寄存器的值  */               
	state=NRF_ReadReg(STATUS);
	 
	/* 清除中断标志*/      
	NRF_WriteReg(NRF_WRITE_REG+STATUS,state);

	/*判断是否接收到数据*/
	if(state & RX_DR)                                 //接收到数据
	{
	    NRF_ReadBuf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据
	    NRF_WriteReg(FLUSH_RX,NOP);                     //清除RX FIFO寄存器
	    return RX_DR; 
	}
	else
    {
		return ERROR;                    //没收到任何数据
    }
}
コード例 #2
0
ファイル: nrf24l01.c プロジェクト: cross-sky/4axis
uint8_t NRF24L01_RxPacket(uint8_t *rxbuf)
{
	uint8_t sta;//spi速度为9Mhz(24L01的最大SPI时钟为10Mhz) 
	sta= NRF_ReadReg(NRFRegSTATUS);//读取状态寄存器的值 
	NRF_WriteReg(NRF_WRITE_REG+NRFRegSTATUS, sta);//清除TX_DS或MAX_RT中断标志
	if (sta & RX_OK)
	{
		NRF_ReadBuf(RD_RX_PLOAD, rxbuf, RX_PLOAD_WIDTH);//读取数据
		NRF_WriteReg(FLUSH_RX, 0xff);//清除RX FIFO寄存器 
		return 1;
	}
	return 0;//没收到任何数据
}
コード例 #3
0
//由中断服务函数调用
void NRF_ISR_Rx_Handler(void)
{
    u8 state;
    
	NRF_CE_LOW();  	 //进入待机状态
    
	/*读取status寄存器的值  */               
	state=NRF_ReadReg(STATUS);
	 
	/* 清除中断标志*/      
	NRF_WriteReg(NRF_WRITE_REG+STATUS,state);
    
    if(re_flag == QUEUE_FULL)       //满了就直接清FIFO,退出
    {
        NRF_WriteReg(FLUSH_RX,NOP);                     //清除RX FIFO寄存器
        NRF_CE_HIGH();  	 //进入接收模式
        return;       //接收队列满了,不进行处理
    }
    
    //还没满,则继续接收

	/*判断是否接收到数据*/
	if(state & RX_DR)                                 //接收到数据
	{
	    NRF_ReadBuf(RD_RX_PLOAD,(u8 *)&(RX_ISR_FIFO[rear]),RX_PLOAD_WIDTH);  //读取数据
	    NRF_WriteReg(FLUSH_RX,NOP);                     //清除RX FIFO寄存器

        rear++;
        
        if(rear >= RX_ISR_FIFO_PACKET)
        {
            rear=0;                         //重头开始
        }
        
        if(rear == front)                   //追到屁股了,满了
        {
            re_flag = QUEUE_FULL;   
        }
        else
        {
            re_flag = QUEUE_NORMAL;
        } 
	}
	else    
    {
		                  //没收到任何数据
    }
    
    NRF_CE_HIGH();  	 //进入接收模式

}
コード例 #4
0
/*=====================================================================================================*/
static u8 NRF_Check( void )
{
  u8 i;
  u8 buf[5] = {0};

  NRF_WriteBuf(CMD_W_REG | NRF_TX_ADDR, TX_ADDRESS, 5);
  NRF_ReadBuf(CMD_R_REG | NRF_TX_ADDR, buf, 5);

  for(i=0; i<5; i++)
    if(buf[i]!=TX_ADDRESS[i])
      return ERROR;

  return SUCCESS;
}
コード例 #5
0
/*=====================================================================================================*/
u8 NRF_Check( void )
{
  u8 i;
  u8 SendBuf[5] = {0xc2, 0xb5, 0x81, 0xd0, 0xa9};
  u8 RecvBuf[5] = {0};

  NRF_WriteBuf(CMD_W_REG | NRF_TX_ADDR, SendBuf, 5);
  NRF_ReadBuf(CMD_R_REG | NRF_TX_ADDR, RecvBuf, 5);

  for(i=0; i<5; i++)
    if(RecvBuf[i]!=SendBuf[i])
      return ERROR;

  return SUCCESS;
}
コード例 #6
0
ファイル: nrf24l01.c プロジェクト: cross-sky/4axis
//判断SPI接口是否接入NRF芯片是否可用
uint8_t NRF24L01_Check(void)
{
	uint8_t buf[5] = {0xC2,0xC2,0xC2,0xC2,0xC2};
	uint8_t buf1[5] = {0};
	uint8_t i;
	NRF_WriteBuf(NRF_WRITE_REG + TX_ADDR, buf, 5);
	NRF_ReadBuf(TX_ADDR, buf1, 5);

	for (i=0;i<5;i++) 
	{ 
		if (buf1[i]!=0xC2) 
			break; 
	} 

	if (i==5)   {printf("NRF24L01 is working...\r\n");return 1 ;}        //MCU 与NRF 成功连接 
	else        {printf("NRF24L01 wrong...\r\n");return 0 ;}        //MCU与NRF不正常连接 

}
コード例 #7
0
/*
 * 函数名:NRF_Check
 * 描述  :主要用于NRF与MCU是否正常连接
 * 输入  :无	
 * 输出  :SUCCESS/ERROR 连接正常/连接失败
 * 调用  :外部调用
 */
u8 NRF_Check(void)
{
#define NRF_CHECH_DATA  0xC2
	u8 buf[5]={NRF_CHECH_DATA,NRF_CHECH_DATA,NRF_CHECH_DATA,NRF_CHECH_DATA,NRF_CHECH_DATA};
	u8 buf1[5];
	u8 i; 

	/*写入5个字节的地址.  */ 
    NRF_WriteBuf(NRF_WRITE_REG+TX_ADDR,buf,5);
    
	/*读出写入的地址 */
	NRF_ReadBuf(TX_ADDR,buf1,5); 
	
	/*比较*/
	for(i=0;i<5;i++)
	{
		if(buf1[i] != NRF_CHECH_DATA)
        {
            return 0 ;        //MCU与NRF不正常连接
        }
	} 
	return 1 ;             //MCU与NRF成功连接 	
}
コード例 #8
0
/*=====================================================================================================*/
static void NRF_RxData( u8 *RxBuf )
{
  NRF_ReadBuf(CMD_R_RX_PLOAD, RxBuf, NRF_RX_PL_WIDTH);
  NRF_FlushRxFIFO();
}