22 #include "hal_radio.h" 26 #include "isr_manager.h" 31 #define SHORT_READY_START \ 32 (RADIO_SHORTS_READY_START_Enabled << RADIO_SHORTS_READY_START_Pos) 34 #define SHORT_END_DIS \ 35 (RADIO_SHORTS_END_DISABLE_Enabled << RADIO_SHORTS_END_DISABLE_Pos) 37 #define SHORT_DIS_TXEN \ 38 (RADIO_SHORTS_DISABLED_TXEN_Enabled << RADIO_SHORTS_DISABLED_TXEN_Pos) 40 #define SHORT_DIS_RXEN \ 41 (RADIO_SHORTS_DISABLED_RXEN_Enabled << RADIO_SHORTS_DISABLED_RXEN_Pos) 45 #define MAX_PAYLOAD_BYTES 255 48 #define ADDR 0x8E89BE35 64 uint8_t p_payload[MAX_PAYLOAD_BYTES - 1];
71 void (* pb_tx_done_handler) (
void * buff, uint32_t len);
73 void (* pb_rx_done_handler) (
void * buff, uint32_t len);
87 if(NRF_CLOCK->HFCLKSTAT !=
88 ((CLOCK_HFCLKSTAT_STATE_Running << CLOCK_HFCLKSTAT_STATE_Pos) |
89 (CLOCK_HFCLKSTAT_SRC_Xtal << CLOCK_HFCLKSTAT_SRC_Pos)))
91 NRF_CLOCK->TASKS_HFCLKSTART = 1;
95 NRF_RADIO->POWER = RADIO_POWER_POWER_Enabled;
98 NRF_RADIO->MODE = (RADIO_MODE_MODE_Ble_2Mbit << RADIO_MODE_MODE_Pos)&RADIO_MODE_MODE_Msk;
101 NRF_RADIO->PCNF0 = ((0UL << RADIO_PCNF0_S0LEN_Pos) & RADIO_PCNF0_S0LEN_Msk)
102 | ((8UL << RADIO_PCNF0_LFLEN_Pos) & RADIO_PCNF0_LFLEN_Msk)
103 | ((0UL << RADIO_PCNF0_S1LEN_Pos) & RADIO_PCNF0_S1LEN_Msk);
105 NRF_RADIO->PCNF1 = ((RADIO_PCNF1_ENDIAN_Little << RADIO_PCNF1_ENDIAN_Pos) & RADIO_PCNF1_ENDIAN_Msk)
106 | ((MAX_PAYLOAD_BYTES << RADIO_PCNF1_MAXLEN_Pos) & RADIO_PCNF1_MAXLEN_Msk)
107 | ((RADIO_PCNF1_WHITEEN_Enabled << RADIO_PCNF1_WHITEEN_Pos) & RADIO_PCNF1_WHITEEN_Msk)
108 | ((3UL << RADIO_PCNF1_BALEN_Pos) & RADIO_PCNF1_BALEN_Msk);
111 NRF_RADIO->CRCCNF = ((RADIO_CRCCNF_LEN_Three << RADIO_CRCCNF_LEN_Pos) & RADIO_CRCCNF_LEN_Msk)
112 | ((RADIO_CRCCNF_SKIPADDR_Skip << RADIO_CRCCNF_SKIPADDR_Pos) & RADIO_CRCCNF_SKIPADDR_Msk);
114 NRF_RADIO->CRCPOLY = 0x100065B;
118 NRF_RADIO->DATAWHITEIV = 0x8888;
119 NRF_RADIO->FREQUENCY = radio_init_config->
freq;
123 NRF_RADIO->BASE0 = (ADDR << 8) & 0xFFFFFF00;
124 NRF_RADIO->PREFIX0 = (ADDR >> 24) & 0xFF;
125 NRF_RADIO->CRCINIT = 0x012345;
127 NRF_RADIO->TXADDRESS =((0<<RADIO_TXADDRESS_TXADDRESS_Pos)&RADIO_TXADDRESS_TXADDRESS_Msk);
128 NRF_RADIO->TXPOWER = 4;
130 NRF_RADIO->RXADDRESSES = ((RADIO_RXADDRESSES_ADDR0_Enabled << RADIO_RXADDRESSES_ADDR0_Pos)
131 & RADIO_RXADDRESSES_ADDR0_Msk);
134 NRF_RADIO->INTENSET |= ((RADIO_INTENSET_CRCERROR_Enabled
135 << RADIO_INTENSET_CRCERROR_Pos) & RADIO_INTENSET_CRCERROR_Msk)
136 | ((RADIO_INTENSET_END_Enabled << RADIO_INTENSET_END_Pos) & RADIO_INTENSET_END_Msk)
137 | ((RADIO_INTENSET_CRCOK_Enabled << RADIO_INTENSET_CRCOK_Pos) & RADIO_INTENSET_CRCOK_Msk);
138 NRF_RADIO->SHORTS = SHORT_READY_START | SHORT_END_DIS;
139 NRF_RADIO->PACKETPTR = (uint32_t) &payload_buff;
140 NVIC_SetPriority (RADIO_IRQn, radio_init_config->
irq_priority);
141 NVIC_EnableIRQ (RADIO_IRQn);
147 memcpy (payload_buff.
p_payload, p_payload, len);
152 NRF_RADIO->TASKS_TXEN = 1;
158 NRF_RADIO->TASKS_RXEN = 1;
163 NRF_RADIO->TASKS_DISABLE = 1;
164 NRF_RADIO->TASKS_STOP = 1;
169 NVIC_DisableIRQ (RADIO_IRQn);
170 NRF_RADIO->INTENCLR = 0xFFFFFFFF;
171 NRF_RADIO->TASKS_DISABLE = 1;
172 NRF_RADIO->POWER = (RADIO_POWER_POWER_Disabled << RADIO_POWER_POWER_Pos) &
173 RADIO_POWER_POWER_Msk;
178 return (NRF_RADIO->STATE != RADIO_STATE_STATE_Disabled) ? true :
false;
183 void hal_radio_Handler ()
185 void RADIO_IRQHandler ()
188 if(NRF_RADIO->EVENTS_CRCOK == 1)
190 #if ISR_MANAGER == false 191 NRF_RADIO->EVENTS_CRCOK = 0;
193 if(pb_rx_done_handler != NULL)
198 if(NRF_RADIO->EVENTS_CRCERROR == 1)
200 #if ISR_MANAGER == false 201 NRF_RADIO->EVENTS_CRCERROR = 0;
205 if(NRF_RADIO->EVENTS_END == 1)
207 #if ISR_MANAGER == false 208 NRF_RADIO->EVENTS_END = 0;
210 if(pb_tx_done_handler != NULL)
bool hal_radio_is_on()
Function to check status of radio peripheral.
void hal_radio_deinit()
Function to de-initiate the radio peripheral.
Structure to store payload.
void hal_radio_start_rx()
Function to start data reception.
void hal_radio_set_tx_payload_data(void *p_payload, uint32_t len)
Function to Set the payload data for transmission.
void hal_radio_init(hal_radio_config_t *radio_init_config)
Function to Initiate Radio peripheral.
void hal_radio_start_tx()
Function to start data transmission.
void(* rx_done_handler)(void *p_buff, uint32_t len)
Structure used to store the data required for radio configuration.
void(* tx_done_handler)(void *p_buff, uint32_t len)
uint8_t p_payload[MAX_PAYLOAD_BYTES - 1]
void hal_radio_stop()
Function to stop radio peripheral.
app_irq_priority_t irq_priority