@@ -179,6 +179,17 @@ static bool NRF5_ESB_initialize()
179
179
// Stop timer when CC0 reached
180
180
NRF5_RADIO_TIMER->SHORTS =
181
181
TIMER_SHORTS_COMPARE3_CLEAR_Msk | TIMER_SHORTS_COMPARE3_STOP_Msk;
182
+ // Reset timer
183
+ NRF5_RADIO_TIMER->TASKS_CLEAR = 1 ;
184
+
185
+ // Reset compare events
186
+ #ifdef NRF51
187
+ for (uint8_t i=0 ; i<4 ; i++) {
188
+ #else
189
+ for (uint8_t i=0 ; i<6 ; i++) {
190
+ #endif
191
+ NRF5_RADIO_TIMER->EVENTS_COMPARE [i] = 0 ;
192
+ }
182
193
183
194
// Enable interrupt
184
195
NRF5_RADIO_TIMER->INTENSET = TIMER_INTENSET_COMPARE1_Enabled << TIMER_INTENSET_COMPARE1_Pos;
@@ -339,6 +350,7 @@ void NRF5_ESB_starttx()
339
350
NRF_RADIO->SHORTS = NRF5_ESB_SHORTS_TX;
340
351
341
352
// reset timer
353
+ NRF_RESET_EVENT (NRF5_RADIO_TIMER->EVENTS_COMPARE [3 ]);
342
354
_stopTimer ();
343
355
NRF5_RADIO_TIMER->TASKS_CLEAR = 1 ;
344
356
// Set retransmit time
@@ -516,19 +528,6 @@ inline void _stopTimer()
516
528
NRF5_RADIO_TIMER->TASKS_STOP = 1 ;
517
529
// NRF52 PAN#78
518
530
NRF5_RADIO_TIMER->TASKS_SHUTDOWN = 1 ;
519
-
520
- // Reset timer
521
- NRF5_RADIO_TIMER->TASKS_CLEAR = 1 ;
522
-
523
- // Reset compare events
524
- #ifdef NRF51
525
- for (uint8_t i=0 ; i<4 ; i++) {
526
- #else
527
- for (uint8_t i=0 ; i<6 ; i++) {
528
- #endif
529
- NRF5_RADIO_TIMER->EVENTS_COMPARE [i] = 0 ;
530
- }
531
-
532
531
}
533
532
534
533
inline void _stopACK ()
@@ -698,6 +697,7 @@ extern "C" {
698
697
{
699
698
if (NRF5_RADIO_TIMER->EVENTS_COMPARE [3 ] == 1 ) {
700
699
_stopTimer ();
700
+ NRF_RESET_EVENT (NRF5_RADIO_TIMER->EVENTS_COMPARE [1 ]);
701
701
if (ack_received == false ) {
702
702
// missing ACK, start TX again
703
703
NRF5_ESB_starttx ();
0 commit comments