This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

nRF52 receive advertisement with raw register access

Hi,

I am trying to receive BLE advertisements on Ch38 (=2426MHz) without using SoftDevice, i.e. with direct register access.
However "EVENTS_DISABLED" is very rarely called (if at all). Any ideas what I might be doing wrong?

	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	NRF_RADIO->MODECNF0 = (RADIO_MODECNF0_RU_Fast << RADIO_MODECNF0_RU_Pos);
	NRF_RADIO->FREQUENCY =  26;
	NRF_RADIO->MODE = (RADIO_MODE_MODE_Ble_1Mbit << RADIO_MODE_MODE_Pos);
	NRF_RADIO->DATAWHITEIV = 38;
		
	uint32_t m_address = 0x8E89BED6;
	
	NRF_RADIO->PREFIX0     = 0;
	NRF_RADIO->PREFIX0    &= ~RADIO_PREFIX0_AP0_Msk;
    NRF_RADIO->PREFIX0    |= (m_address >> 24) & RADIO_PREFIX0_AP0_Msk;
    NRF_RADIO->BASE0       = m_address << 8;
    NRF_RADIO->RXADDRESSES = RADIO_RXADDRESSES_ADDR0_Enabled << RADIO_RXADDRESSES_ADDR0_Pos;
    NRF_RADIO->TXADDRESS   = (0x00 << RADIO_TXADDRESS_TXADDRESS_Pos) & RADIO_TXADDRESS_TXADDRESS_Msk;

	
	NRF_RADIO->EVENTS_DISABLED = 0;
	NRF_RADIO->EVENTS_END = 0;
	NRF_RADIO->EVENTS_READY = 0;
	NRF_RADIO->TASKS_RXEN = 1;	
	while (!NRF_RADIO->EVENTS_DISABLED ); // gets stuck
	NRF_RADIO->EVENTS_DISABLED = 0;

Best,
Paul

Related