Exemplo n.º 1
0
void NRF_transmit_data(BYTE *pBuffer, int nLen)
{
	int i;
	
	NRF_Select(TRUE);
	
	//Clear previous ints
	NRF_WriteRegister(0x27, 0x7E);

	//PWR_UP=1
	NRF_WriteRegister(0x20, 0x3A);
	delay_ms(2);	//Takes 1.5ms from PowerDown to Standby mode
	
	//Clear TX fifo
	NRF_WriteCommand(0xE1);
	
	//7 bytes payload
	NRF_WriteCommand(0xA0);
	
	//Store payload
	for(i=0; i<nLen; i++)
	{
		_spi_write(pBuffer[i]);
	}	
	NRF_Select(FALSE);
	
	//Pulse CE to start transmission
	delay_ms(1);
	NRF_Enable(TRUE);
	delay_ms(1);
	NRF_Enable(FALSE);
	
}
Exemplo n.º 2
0
void
service_net ()
{
	while (interrupts > 0)
	{
		NRF_CE_lo;
		uint8_t status = NRF_ReadRegister(NRF_STATUS);
		RXEN_lo;
	        // received a packet
	        if (status & 0x40)
     	   	{                
			printf("Radio received a packet\n");
		 	readPacket();
        	} else if (status & 0x20)
        	{ // packet was sent
                	printf("Radio successfully sent the packet\n");
         		NRF_WriteRegister(NRF_STATUS, 0x10);
		} else if (status & 0x10)
         	{ // packet failed to send              
			printf("Radio failed to send the packet\n");
			NRF_WriteRegister(NRF_STATUS, 0x20);
         	}
		RXEN_hi;
		NRF_CE_hi;
		INT_Disable();
		interrupts--;
		INT_Enable();
	}
}	
Exemplo n.º 3
0
void
sender_enable()
{
	status = SENDER;
	NRF_CE_lo;
	NRF_WriteRegister(NRF_STATUS, 0x7E); // reset status register
        NRF_WriteRegister(NRF_CONFIG, 0x0E); // PRIM_RX LO & PWR_UP
        NRF_CE_hi;
        NRF_SendCommand(NRF_FLUSH_TX, 0xFF); // Flush TX

}
Exemplo n.º 4
0
void
recv_setup()
{
    status = RECEIVER;
    //printf("enabling receiver");
    NRF_WriteRegister(NRF_STATUS, 0x7E); // reset status register
    NRF_SendCommand(NRF_FLUSH_RX, 0xFF);
    NRF_WriteRegister(NRF_CONFIG, 0x0F);
    NRF_CE_hi;
    NRF_Delay();
}
Exemplo n.º 5
0
void NRF_EnableRX(void)
{
  NRF_WriteRegister(NRF_STATUS, 0x7E);
  NRF_WriteRegister(NRF_CONFIG, 0x0F);
  NRF_SendCommand(NRF_FLUSH_RX, 0xFF);
  for (int i =0; i < 2; i++) {
    NRF_Delay();
  }
  NRF_CE_hi;
  for (int i =0; i < 2; i++) {
    NRF_Delay();
  }
  NRF_SendCommand(NRF_FLUSH_RX, 0xFF);
}
Exemplo n.º 6
0
void NRF_config_rx()
{
	NRF_Select(FALSE);
	NRF_Enable(FALSE);
	
	//PRX, CRC enabled
	NRF_WriteRegister(0x20, 0x39);
	
	//config RF interface, e.g. channel, address, data rate, etc
	NRF_config_rf();
	
	//PWR_UP=1
	NRF_WriteRegister(0x20, 0x3B);
	
	NRF_Select(FALSE);
	
	//Enter RX mode (CE=1 && PRX)
	NRF_Enable(TRUE);
}
Exemplo n.º 7
0
void NRF_TransmitPacket(uint8_t bytes, uint8_t *data)
{

  NRF_WriteRegister(NRF_CONFIG, 0x0E); // Power Up, Transmitter


  NRF_SendPayload(NRF_W_TX_PAYLOAD_NOACK, bytes, data);
  NRF_CE_hi;

}
Exemplo n.º 8
0
void NRF_config_tx()
{
	
	NRF_Enable(FALSE);	//RF Power down mode
	
	//PTX, CRC enabled
	NRF_WriteRegister(0x20, 0x38);
	
	//config RF interface, e.g. channel, address, data rate, etc
	NRF_config_rf();

}	
Exemplo n.º 9
0
void NRF_Carrier(void)
{
  volatile int j;

  NRF_CE_lo;
  NRF_WriteRegister(NRF_CONFIG, 0x00);
  for(j = 0; j < 500000; j++);
  NRF_WriteRegister(NRF_CONFIG, 0x02);
  NRF_WriteRegister(NRF_EN_AA, 0x00);
  NRF_WriteRegister(NRF_SETUP_RETR, 0x00);
  for(j = 0; j < 5000; j++);
  NRF_WriteRegister(NRF_RF_SETUP, 0x9E);
  NRF_WriteRegister(NRF_RF_CH, NODE_CH);
  NRF_CE_hi;
}
Exemplo n.º 10
0
void
readPacket () {
	action = READING;
	NRF_WriteRegister(NRF_STATUS, 0x70);
        NRF_ReceivePayload(NRF_R_RX_PAYLOAD, NET_PACKET_SIZE, unReadData);
	printf("in readPacket: type: %d id: %d seq: %d time_to_live: %d\n",unReadData[0],unReadData[1],unReadData[2], unReadData[3]);
        int aux = process_for_routing (unReadData);
        NRF_SendCommand(NRF_FLUSH_RX, 0xFF);
	action = WAITING;
	if (aux == 0) {// we have a packet to forward
		if (unReadData[3] < 3) {
			unReadData[3]++;
			net_send_packet(unReadData);	
		}
	} else {
		if (unReadData[2] > last_seq) {
			dataToRead = 1;
			last_seq = unReadData[2];
		}
	}
}
Exemplo n.º 11
0
void NRF_reset_rx()
{
	int i;
	
	//Read RX payload
	NRF_WriteCommand(0x61);
	
	for(i=0; i<NRF_PACKET_SIZE; i++)
	{
		gNRFPacket[i] = _spi_read();
	}
	
	gNRFPacket[NRF_PACKET_SIZE] = 0;
	
	//Flush rx FIFO
	NRF_WriteCommand(0xE2);
	
	//Reset int
	NRF_WriteRegister(0x27, 0x40);
	
	NRF_Select(FALSE);

}	
Exemplo n.º 12
0
void NRF_config_rf()
{
	//auto retransmit off
	//NRF_WriteRegister(0x24, 0x00);
	//Disable auto act
	//NRF_WriteRegister(0x21, 0x00);
	
	//auto retransmit 15 times, delay 500us
	NRF_WriteRegister(0x24, 0x1F);
	
	//Auto act on at all pipe 
	NRF_WriteRegister(0x21, 0x3F);
	
	//Address width = 5
	NRF_WriteRegister(0x23, 0x03);
	
	//Data rate = 1MB
	NRF_WriteRegister(0x26, 0x07);

	//7 bytes Payload
	NRF_WriteRegister(0x31, NRF_PACKET_SIZE);	
	
	
	//Set channel 2
	NRF_WriteRegister(0x25, 0x02);
	
	//Set TX address E7E7E7E7E7
	NRF_WriteCommand(0x30);
	_spi_write(0xE7);
	_spi_write(0xE7);
	_spi_write(0xE7);
	_spi_write(0xE7);
	_spi_write(0xE7);
	
	//Set RX address E7E7E7E7E7
	NRF_WriteCommand(0x2A);
	_spi_write(0xE7);
	_spi_write(0xE7);
	_spi_write(0xE7);
	_spi_write(0xE7);
	_spi_write(0xE7);
	
	NRF_Select(FALSE);

}
Exemplo n.º 13
0
void NRF_PowerUp(void)
{
  NRF_WriteRegister(NRF_CONFIG, NRF_ReadRegister(NRF_CONFIG) | 0x02);
}
Exemplo n.º 14
0
void NRF_PowerDown(void)
{
  GPIO->P[NRF_RXEN_PORT].DOUT &= ~(1 << NRF_RXEN_PIN);
  NRF_WriteRegister(NRF_CONFIG, NRF_ReadRegister(NRF_CONFIG) & (~0x02));
}
Exemplo n.º 15
0
void NRF_SetupTX(void)
{
  uint8_t addr_array[5];
  NRF_CE_lo;
  NRF_WriteRegister(NRF_CONFIG, 0x0C);
  //NRF_WriteRegister(NRF_EN_AA, 0x3F); // AutoAcknowledge
  NRF_WriteRegister(NRF_EN_AA, 0x3F);
  NRF_WriteRegister(NRF_EN_RXADDR, 0x3F); // Receive Pipe 0 enabled
  NRF_WriteRegister(NRF_SETUP_RETR, 15); // Retransmits
  NRF_WriteRegister(NRF_SETUP_AW, 0x03); // Address Width  (5 bytes)
  NRF_WriteRegister(NRF_RF_SETUP, 0x0F); // RF Setup
  //NRF_WriteRegister(NRF_RF_SETUP, 0x08);  // -28dB
  NRF_WriteRegister(NRF_RF_CH, NODE_CH); // RF Channel
  NRF_WriteRegister(NRF_RX_PW_P0, 32); // RX Payload Width
  NRF_WriteRegister(NRF_FEATURE, 0x01);

#if NODE_ID == 1
  addr_array[0] = 0xE7;
  addr_array[1] = 0xE7;
  addr_array[2] = 0xE7;
  addr_array[3] = 0xE7;
  addr_array[4] = 0xE7;
#else
  addr_array[0] = 0xC0 + NODE_ID;
  addr_array[1] = 0xC2;
  addr_array[2] = 0xC2;
  addr_array[3] = 0xC2;
  addr_array[4] = 0xC2;
#endif

  NRF_WriteRegisterMulti(NRF_TX_ADDR, 5, addr_array);
  NRF_WriteRegisterMulti(NRF_RX_ADDR_P0, 5, addr_array);
  //NRF_WriteRegister(NRF_RX_ADDR_P1, 2);
  NRF_WriteRegister(NRF_STATUS, 0x7E); // Clear Interrupts
  //NRF_WriteRegister(NRF_CONFIG, 0x0E); // Power Up, Transmitter
  NRF_SendCommand(NRF_FLUSH_TX, 0xFF);
  NRF_WriteRegister(NRF_CONFIG, 0x0E);
}
Exemplo n.º 16
0
void
net_init()
{
    uint8_t addr_array[5] = {0xE7, 0xE7, 0xE7, 0xE7, 0xE7};

    RXEN_hi; // enable amp

    NRF_CE_lo;
    NRF_WriteRegister(NRF_CONFIG, 0x3C); // Enable CRC and disable TX interrupts
    NRF_WriteRegister(NRF_EN_AA, 0x0); // Disable auto ACK
    NRF_WriteRegister(NRF_EN_RXADDR, 0x3F); // Receive Pipe 0 enabled
    NRF_WriteRegister(NRF_SETUP_RETR, 0); // Retransmits
    NRF_WriteRegister(NRF_SETUP_AW, 0x03); // Address Width  (5 bytes)
    NRF_WriteRegister(NRF_RF_SETUP, bandwidth | power); // set up
    NRF_WriteRegister(NRF_RF_CH, channel); // RF Channel
    NRF_WriteRegister(NRF_RX_PW_P0, 16); // RX Payload Width
    NRF_WriteRegister(NRF_FEATURE, 0x01);

    NRF_WriteRegisterMulti(NRF_TX_ADDR, 5, addr_array);
    NRF_WriteRegisterMulti(NRF_RX_ADDR_P0, 5, addr_array);
    NRF_WriteRegister(NRF_STATUS, 0x7E); // Clear Interrupts
    NRF_SendCommand(NRF_FLUSH_TX, 0xFF);
    NRF_WriteRegister(NRF_CONFIG, 0x0E);

    recv_setup();

    NRF_WriteRegister(NRF_STATUS, 0x70); // clear radio interrupts

    uint8_t status = NRF_ReadRegister(NRF_STATUS);

    if (status == 0x0E)
    {
    	printf("Radio is ready\n");
    }
    else
    {
        printf("Radio failed to initialize\n");
    }
}