void nrf_tx_config() // Configure radio parameters for pTX { uint8_t ram_NRF_ADDR[5]; // Make sure radio is in standby CE_LOW // SET RADIO TO TX MODE TX_POWERUP // Configure NRF RX ADDRESS // LOAD eeNRF_ADDRESS from EEPROM into ramNRF_ADDR eeprom_read_block((void *)&ram_NRF_ADDR, (const void *)&eeNRF_ADDRESS,5); // Configure radio channel nrf_config_register(RF_CH,eeprom_read_byte(&CH)); // Configure NRF RX ADDRESS nrf_write_register(RX_ADDR_P0, ram_NRF_ADDR, 5); // Configure NRF TX ADDRESS nrf_write_register(TX_ADDR, ram_NRF_ADDR, 5); // This reset the NRF IRQ , RX_DR, TX_DS, MAX_RT nrf_config_register(STATUS,(1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT)); }
void nrf_rx_config() // Configure radio parameters for pRX { uint8_t ram_NRF_ADDR[5]; // Make sure radio is in standby CE_LOW // Set radio to RX Mode RX_POWERUP // Configure NRF RX ADDRESS // LOAD eeNRF_ADDRESS from EEPROM into ramNRF_ADDR eeprom_read_block((void *)&ram_NRF_ADDR, (const void *)&eeNRF_ADDRESS,5); // Configure radio channel nrf_config_register(RF_CH,eeprom_read_byte(&CH)); // Configure NRF RX ADDRESS nrf_write_register(RX_ADDR_P0, ram_NRF_ADDR, 5); // Configure Payload Width for this Pipe nrf_config_register(RX_PW_P0, PAYLOAD_WIDTH); // This reset the NRF IRQ , RX_DR, TX_DS, MAX_RT nrf_config_register(STATUS,(1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT)); // Flush any data in RX register. nrf_command(FLUSH_RX); // Activate PRX Mode CE_HIGH }
void remote_nrf_config(void) { // NRF Default Configuration uint8_t default_NRF_ADDR[5] = {0xE7,0xE7,0xE7,0xE7,0xE7}; uint8_t default_NRF_CH = 2; // Deactivate radio before changing configuration CE_LOW // Set radio to RX Mode RX_POWERUP // This reset the NRF IRQ , RX_DR, TX_DS, MAX_RT nrf_config_register(STATUS,(1<<RX_DR)|(1<<TX_DS)|(1<<MAX_RT)); // Configure default radio channel nrf_config_register(RF_CH,default_NRF_CH); // Configure P0 to default values nrf_write_register(RX_ADDR_P0, default_NRF_ADDR, 5); // Load address in NRF nrf_config_register(RX_PW_P0, CFG_PAYLOAD_WIDTH); // Configure Payload Width for this Pipe // Activate PRX Mode CE_HIGH nrf_command(FLUSH_RX); // Flush any data in RX register. // Enable Radio Interrupt EIMSK |= (1<<INT0); }
int main(void) { ADCON1 = 0x0F; CMCON = 0x07; TRISA = 0x00; PORTA = 0x00; interrupt_initialize(); timer_initialize(); nrf_initialize(nrf_transmit_mode, nrf_channel_0, CAFE_ADDRESS | NODE_ID); nrf_packet_t packet; uint8_t differ = 0x00; PORTA = 0x00; while(1) { #if CONSTANT_TRANSMIT #if SEND_TO_APP packet.address = CAFE_ADDRESS | HUB_ID; packet.payload_length = 18; packet.payload[0] = 0x05; // Branch packet.payload[1] = (NODE_ID >> 8); // Source ID packet.payload[2] = (NODE_ID & 0xFF); packet.payload[3] = (HUB_ID >> 8); // Destination ID packet.payload[4] = (HUB_ID & 0xFF); packet.payload[5] = 0x00; // Source App packet.payload[6] = 0x00; packet.payload[7] = 0x80; // Destination App packet.payload[8] = 0x41; packet.payload[9] = 0x07; // Command packet.payload[10] = 0x00; // Sub-Command packet.payload[11] = 0x06; // Payload Length packet.payload[12] = 0xba; // Payload packet.payload[13] = 0xba; packet.payload[14] = 0xde; packet.payload[15] = 0xca; packet.payload[16] = 0xfe; packet.payload[17] = differ++; nrf_set_mode(nrf_transmit_mode, true); nrf_flush_fifo(true); nrf_transmit_packet(packet, false); while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10)); PORTA ^= 0x01; timer_delay_ms(1000); #endif #if SEND_TO_HUB_APP packet.address = CAFE_ADDRESS | HUB_ID; packet.payload_length = 12; packet.payload[0] = 0x05; // Branch packet.payload[1] = (NODE_ID >> 8); // Source ID packet.payload[2] = (NODE_ID & 0xFF); packet.payload[3] = (HUB_ID >> 8); // Destination ID packet.payload[4] = (HUB_ID & 0xFF); packet.payload[5] = 0x00; // Source App packet.payload[6] = 0x00; packet.payload[7] = 0x00; // Destination App packet.payload[8] = 0x00; packet.payload[9] = 0x04; // Command packet.payload[10] = 0x05; // Sub-Command packet.payload[11] = 0x00; // Payload Length nrf_set_mode(nrf_transmit_mode, true); nrf_flush_fifo(true); nrf_transmit_packet(packet, false); while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10)); PORTA ^= 0x02; timer_delay_ms(1000); #endif #if SEND_TO_HUB packet.address = CAFE_ADDRESS; packet.payload_length = 13; packet.payload[0] = 0x05; // Branch packet.payload[1] = (NODE_ID >> 8); // Source ID packet.payload[2] = (NODE_ID & 0xFF); packet.payload[3] = 0x00; // Destination ID packet.payload[4] = 0x00; packet.payload[5] = 0x00; // Source App packet.payload[6] = 0x00; packet.payload[7] = 0x00; // Destination App packet.payload[8] = 0x00; packet.payload[9] = 0x05; // Command packet.payload[10] = 0x05; // Sub-Command packet.payload[11] = 0x01; // Payload Length packet.payload[11] = differ; // Payload nrf_set_mode(nrf_transmit_mode, true); nrf_flush_fifo(true); nrf_transmit_packet(packet, false); while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10)); PORTA ^= 0x02; timer_delay_ms(1000); #endif #if SEND_HUB_ID_REQUEST packet.address = CAFE_ADDRESS | HUB_ID; packet.payload_length = 13; packet.payload[0] = 0x05; // Branch packet.payload[1] = (NODE_ID >> 8); // Source ID packet.payload[2] = (NODE_ID & 0xFF); packet.payload[3] = (HUB_ID >> 8); // Destination ID packet.payload[4] = (HUB_ID & 0xFF); packet.payload[5] = 0x00; // Source App packet.payload[6] = 0x00; packet.payload[7] = 0x00; // Destination App packet.payload[8] = 0x00; packet.payload[9] = 0x06; // Command packet.payload[10] = 0x05; // Sub-Command packet.payload[11] = 0x01; // Payload Length packet.payload[12] = 0x01; // Payload nrf_set_mode(nrf_transmit_mode, true); nrf_flush_fifo(true); nrf_transmit_packet(packet, false); while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10)); PORTA ^= 0x02; timer_delay_ms(1000); #endif #elif SEND_PACKETS packet.address = CAFE_ADDRESS | HUB_ID; packet.payload_length = 18; packet.payload[0] = 0x05; // Branch packet.payload[1] = (NODE_ID >> 8); // Source ID packet.payload[2] = (NODE_ID & 0xFF); packet.payload[3] = (HUB_ID >> 8); // Destination ID packet.payload[4] = (HUB_ID & 0xFF); packet.payload[5] = 0x00; // Source App packet.payload[6] = 0x00; packet.payload[7] = 0x00; // Destination App packet.payload[8] = 0x02; packet.payload[9] = 0x01; // Command packet.payload[10] = 0x00; // Sub-Command packet.payload[11] = 0x00; // Payload Length PORTA ^= 0x01; nrf_set_mode(nrf_transmit_mode, true); nrf_flush_fifo(true); nrf_transmit_packet(packet, false); while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10)); PORTA ^= 0x01; nrf_set_mode(nrf_receive_mode, true); nrf_flush_fifo(false); uint8_t delay_count = 0; PORTA ^= 0x02; while((nrf_read_register(NRF_REG_FIFO_STATUS) & 0x01) && (delay_count < 40)) { timer_delay_ms(25); delay_count++; } PORTA ^= 0x02; if(delay_count < 40) { if(nrf_read_packet(&packet) != SUCCESS) delay_count = 40; else PORTA ^= 0x04; } if(delay_count < 40) timer_delay_ms(2000); timer_delay_ms(2000); #elif RECEIVE_PACKETS nrf_set_mode(nrf_receive_mode, false); while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x01)) { timer_delay_ms(50); PORTA ^= 0x02; nrf_read_packet(&packet); uint16_t temp; temp = (packet.payload[1] << 8); temp |= packet.payload[2]; packet.address = CAFE_ADDRESS | temp; packet.payload_length = 12; packet.payload[1] = (NODE_ID >> 8); packet.payload[2] = (NODE_ID & 0xFF); packet.payload[3] = (temp >> 8); packet.payload[4] = (temp & 0xFF); temp = (packet.payload[5] << 8); temp |= packet.payload[6]; packet.payload[5] = packet.payload[7]; packet.payload[6] = packet.payload[8]; packet.payload[7] = (temp >> 8); packet.payload[8] = (temp & 0xFF); packet.payload[9] ^= 0x80; packet.payload[10] = differ++; packet.payload[11] = 0x00; PORTA ^= 0x01; nrf_set_mode(nrf_transmit_mode, true); nrf_flush_fifo(true); nrf_transmit_packet(packet, false); while(!(nrf_read_register(NRF_REG_FIFO_STATUS) & 0x10)); PORTA ^= 0x01; nrf_set_mode(nrf_receive_mode, false); nrf_write_register(NRF_REG_STATUS, 0x20); } #endif } }