42#include "platform/nrf_802154_hp_timer.h"
43#include "hal/nrf_timer.h"
46#define HP_TIMER NRF_TIMER2
55#define HP_TIMER_FREQ_HZ 1000000UL
56#define HP_TIMER_PRESCALER NRF_TIMER_PRESCALER_CALCULATE( \
57 NRF_TIMER_BASE_FREQUENCY_GET(HP_TIMER), \
60static uint32_t unexpected_sync;
65 nrf_timer_task_trigger(HP_TIMER, (nrf_timer_task_t)NRF_TIMER_TASK_CAPTURE1);
66 return nrf_timer_cc_get(HP_TIMER, (nrf_timer_cc_channel_t)CAPTURE_CC);
70nrf_802154_hp_timer_init(
void)
72 nrf_timer_bit_width_set(HP_TIMER, NRF_TIMER_BIT_WIDTH_32);
73 nrf_timer_prescaler_set(HP_TIMER, HP_TIMER_PRESCALER);
74 nrf_timer_mode_set(HP_TIMER, NRF_TIMER_MODE_TIMER);
78nrf_802154_hp_timer_deinit(
void)
80 nrf_timer_task_trigger(HP_TIMER, NRF_TIMER_TASK_STOP);
81 nrf_timer_task_trigger(HP_TIMER, NRF_TIMER_TASK_CLEAR);
85nrf_802154_hp_timer_start(
void)
87 nrf_timer_task_trigger(HP_TIMER, NRF_TIMER_TASK_START);
91nrf_802154_hp_timer_stop(
void)
93 nrf_timer_task_trigger(HP_TIMER, NRF_TIMER_TASK_STOP);
94 nrf_timer_task_trigger(HP_TIMER, NRF_TIMER_TASK_CLEAR);
98nrf_802154_hp_timer_current_time_get(
void)
100 return timer_time_get();
104nrf_802154_hp_timer_sync_task_get(
void)
106 return nrf_timer_task_address_get(HP_TIMER,
107 (nrf_timer_task_t)NRF_TIMER_TASK_CAPTURE2);
111nrf_802154_hp_timer_sync_prepare(
void)
113 uint32_t past_time = timer_time_get() - 1;
115 unexpected_sync = past_time;
116 nrf_timer_cc_set(HP_TIMER, (nrf_timer_cc_channel_t)SYNC_CC, past_time);
120nrf_802154_hp_timer_sync_time_get(uint32_t *p_timestamp)
122 uint32_t sync_time = nrf_timer_cc_get(HP_TIMER, (nrf_timer_cc_channel_t)SYNC_CC);
124 if(sync_time != unexpected_sync) {
125 *p_timestamp = sync_time;
133nrf_802154_hp_timer_timestamp_task_get(
void)
135 return nrf_timer_task_address_get(HP_TIMER,
136 (nrf_timer_task_t)NRF_TIMER_TASK_CAPTURE3);
140nrf_802154_hp_timer_timestamp_get(
void)
142 return nrf_timer_cc_get(HP_TIMER, (nrf_timer_cc_channel_t)TIMESTAMP_CC);