예제 #1
0
/*
*****************************************************************
* 写寄存器
*****************************************************************
*/
uint8_t NRF_Write_Reg(uint8_t reg, uint8_t value)
{
	uint8_t status;
	SPI_CSN_L();					  /* 选通器件 */
	status = Spi_RW(reg);  /* 写寄存器地址 */
	Spi_RW(value);		  /* 写数据 */
	SPI_CSN_H();					  /* 禁止该器件 */
  return 	status;
}
예제 #2
0
/*
*****************************************************************
* 读寄存器
*****************************************************************
*/
uint8_t NRF_Read_Reg(uint8_t reg)
{
	uint8_t reg_val;
	SPI_CSN_L();					  /* 选通器件 */
	Spi_RW(reg);			  /* 写寄存器地址 */
	reg_val = Spi_RW(0);	  /* 读取该寄存器返回数据 */
	SPI_CSN_H();					  /* 禁止该器件 */
    return 	reg_val;
}
예제 #3
0
/*
24L01初始化
model:24L01 模式
ch:   通道
*/
void Nrf24l01_Init(u8 model, u8 ch)
{
#ifdef NRF24L01_SPI1
    Nrf_Spi1_Init();
#elif defined NRF24L01_SPI2
    Nrf_Spi2_Init();
#elif defined NRF24L01_SPI0
    Nrf_Spi0_Init();
#else
#error
#endif
    SPI_CE_L();
    NRF_Write_Buf(NRF_WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH);//写RX节点地址
    NRF_Write_Buf(NRF_WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);   //写TX节点地址
    NRF_Write_Reg(NRF_WRITE_REG + EN_AA, 0x01);                         //使能通道0的自动应答
    NRF_Write_Reg(NRF_WRITE_REG + EN_RXADDR, 0x01);                     //使能通道0的接收地址
    NRF_Write_Reg(NRF_WRITE_REG + SETUP_RETR, 0x1a);                    //设置自动重发间隔时间:500us;最大自动重发次数:10次
    NRF_Write_Reg(NRF_WRITE_REG + RF_CH, ch);                           //设置RF通道为CHANAL
    NRF_Write_Reg(NRF_WRITE_REG + RF_SETUP, 0x0f);                      //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
    //NRF_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x07);                       //设置TX发射参数,0db增益,1Mbps,低噪声增益开启
    /////////////////////////////////////////////////////////
    if (model == 1)             //RX
    {
        NRF_Write_Reg(NRF_WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);                            //选择通道0的有效数据宽度
        NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f);         // IRQ收发完成中断开启,16位CRC,主接收
    }
    else if (model == 2)    //TX
    {
        NRF_Write_Reg(NRF_WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);                            //选择通道0的有效数据宽度
        NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);         // IRQ收发完成中断开启,16位CRC,主发送
    }
    else if (model == 3)    //RX2
    {
        NRF_Write_Reg(FLUSH_TX, 0xff);
        NRF_Write_Reg(FLUSH_RX, 0xff);
        NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0f);         // IRQ收发完成中断开启,16位CRC,主接收

        Spi_RW(0x50);
        Spi_RW(0x73);
        NRF_Write_Reg(NRF_WRITE_REG + 0x1c, 0x01);
        NRF_Write_Reg(NRF_WRITE_REG + 0x1d, 0x07);
    }
    else if (model == 4)    //TX2
    {
        NRF_Write_Reg(NRF_WRITE_REG + CONFIG, 0x0e);         // IRQ收发完成中断开启,16位CRC,主发送
        NRF_Write_Reg(FLUSH_TX, 0xff);
        NRF_Write_Reg(FLUSH_RX, 0xff);

        Spi_RW(0x50);
        Spi_RW(0x73);
        NRF_Write_Reg(NRF_WRITE_REG + 0x1c, 0x01);
        NRF_Write_Reg(NRF_WRITE_REG + 0x1d, 0x07);
    }
    SPI_CE_H();
}
예제 #4
0
/*
*****************************************************************
* 读缓冲区
*****************************************************************
*/
uint8_t NRF_Read_Buf(uint8_t reg, uint8_t *pBuf, uint8_t uchars)
{
	uint8_t i;
	uint8_t status;
	SPI_CSN_L();						/* 选通器件 */
	status = Spi_RW(reg);	/* 写寄存器地址 */
	for(i=0; i<uchars; i++)
	{
		pBuf[i] = Spi_RW(0); /* 读取返回数据 */ 	
	}
	SPI_CSN_H();						/* 禁止该器件 */
    return 	status;
}
예제 #5
0
/*
*****************************************************************
*
* 写缓冲区
*
*****************************************************************
*/
uint8_t NRF_Write_Buf(uint8_t reg, uint8_t *pBuf, uint8_t uchars)
{
	uint8_t i;
	uint8_t status;
	SPI_CSN_L();				        /* 选通器件 */
	status = Spi_RW(reg);	/* 写寄存器地址 */
	for(i=0; i<uchars; i++)
	{
		Spi_RW(pBuf[i]);		/* 写数据 */
	}
	SPI_CSN_H();						/* 禁止该器件 */
    return 	status;	
}