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(); } }
void NRF_DumpRegister() { int i; int ch; for(i=0; i<0x18; i++) { ch = 0; ch = NRF_ReadRegister(i); TRACE2("REG 0x%02X= 0x%02X\r\n", i, ch); } }
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"); } }
void NRF_PowerUp(void) { NRF_WriteRegister(NRF_CONFIG, NRF_ReadRegister(NRF_CONFIG) | 0x02); }
void NRF_PowerDown(void) { GPIO->P[NRF_RXEN_PORT].DOUT &= ~(1 << NRF_RXEN_PIN); NRF_WriteRegister(NRF_CONFIG, NRF_ReadRegister(NRF_CONFIG) & (~0x02)); }