Hi
I want to get the RSSI value of the received packet through the DTM test routine. Here is my DTM test routine, where I changed it
/**@brief Function for preparing the radio. At start of each test: Turn off RF, clear interrupt flags of RF, initialize the radio * at given RF channel. * *@param[in] rx boolean indicating if radio should be prepared in rx mode (true) or tx mode. */ static void radio_prepare(bool rx) { dtm_turn_off_test(); NRF_RADIO->CRCPOLY = m_crc_poly; NRF_RADIO->CRCINIT = m_crc_init; NRF_RADIO->FREQUENCY = (m_phys_ch << 1) + 2; // Actual frequency (MHz): 2400 + register value NRF_RADIO->PACKETPTR = (uint32_t)&m_pdu; // Setting packet pointer will start the radio NRF_RADIO->EVENTS_READY = 0; NRF_RADIO->SHORTS = (1 << RADIO_SHORTS_READY_START_Pos) | // Shortcut between READY event and START task (1 << RADIO_SHORTS_END_DISABLE_Pos)| // Shortcut between END event and DISABLE task (1 << RADIO_SHORTS_DISABLED_RSSISTOP_Pos); // Shortcut between END event and DISABLE task if (rx) { NRF_RADIO->EVENTS_END = 0; NRF_RADIO->TASKS_RXEN = 1; // shorts will start radio in RX mode when it is ready //changed NRF_RADIO->EVENTS_RSSIEND = 0; NRF_RADIO->TASKS_RSSISTART =1; } else // tx { NRF_RADIO->TXPOWER = m_tx_power; } } uint32_t dtm_wait(void) { // Enable wake-up on event SCB->SCR |= SCB_SCR_SEVONPEND_Msk; for (;;) { // Event may be the reception of a packet - // handle radio first, to give it highest priority: if (NRF_RADIO->EVENTS_END != 0) { NRF_RADIO->EVENTS_END = 0; NVIC_ClearPendingIRQ(RADIO_IRQn); if (m_state == STATE_RECEIVER_TEST) { NRF_RADIO->TASKS_RXEN = 1; if ((NRF_RADIO->CRCSTATUS == 1) && check_pdu()) { // Count the number of successfully received packets m_rx_pkt_count++; } //changed // Note that failing packets are simply ignored (CRC or contents error). if(NRF_RADIO->EVENTS_RSSIEND != 0) { NRF_RADIO->EVENTS_RSSIEND = 0; int8_t RSSI_RE = -1 * NRF_RADIO->RSSISAMPLE; NRF_RADIO->TASKS_RSSISTOP = 1; printf(">> RSSI: %d\r\n",RSSI_RE); } // Zero fill all pdu fields to avoid stray data memset(&m_pdu, 0, DTM_PDU_MAX_MEMORY_SIZE); } // If no RECEIVER_TEST is running, ignore incoming packets (but do clear IRQ!) } // Check for timeouts: if (mp_timer->EVENTS_COMPARE[0] != 0) { mp_timer->EVENTS_COMPARE[0] = 0; } else if (mp_timer->EVENTS_COMPARE[1] != 0) { // Reset timeout event flag for next iteration. mp_timer->EVENTS_COMPARE[1] = 0; NVIC_ClearPendingIRQ(m_timer_irq); return ++m_current_time; } // Other events: No processing } }
I got the result
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
>> RSSI: -127
Thank you for your reply