16
16
#include "us_ticker_api.h"
17
17
#include "common_rtc.h"
18
18
#include "app_util.h"
19
+ #include "lp_ticker_api.h"
19
20
20
21
21
22
//------------------------------------------------------------------------------
@@ -51,6 +52,8 @@ void COMMON_RTC_IRQ_HANDLER(void)
51
52
if (nrf_rtc_event_pending (COMMON_RTC_INSTANCE , event )) {
52
53
nrf_rtc_event_clear (COMMON_RTC_INSTANCE , event );
53
54
nrf_rtc_event_disable (COMMON_RTC_INSTANCE , int_mask );
55
+
56
+ lp_ticker_irq_handler ();
54
57
}
55
58
#endif
56
59
@@ -128,27 +131,16 @@ uint32_t common_rtc_32bit_ticks_get(void)
128
131
ticks += (m_common_rtc_overflows << RTC_COUNTER_BITS );
129
132
return ticks ;
130
133
}
131
- //------------------------------------------------------------------------------
132
-
133
-
134
- void us_ticker_init (void )
135
- {
136
- common_rtc_init ();
137
- }
138
134
139
- static uint64_t us_ticker_64bit_get (void )
135
+ uint64_t common_rtc_64bit_us_get (void )
140
136
{
141
137
uint32_t ticks = common_rtc_32bit_ticks_get ();
142
138
// [ticks -> microseconds]
143
139
return ROUNDED_DIV (((uint64_t )ticks ) * 1000000 , RTC_INPUT_FREQ );
144
140
}
145
141
146
- uint32_t us_ticker_read ()
147
- {
148
- return (uint32_t )us_ticker_64bit_get ();
149
- }
150
-
151
- void us_ticker_set_interrupt (timestamp_t timestamp )
142
+ void common_rtc_set_interrupt (uint32_t us_timestamp , uint32_t cc_channel ,
143
+ uint32_t int_mask )
152
144
{
153
145
// The internal counter is clocked with a frequency that cannot be easily
154
146
// multiplied to 1 MHz, therefore besides the translation of values
@@ -159,12 +151,13 @@ void us_ticker_set_interrupt(timestamp_t timestamp)
159
151
// is then translated to counter ticks. Finally, the lower 24 bits of thus
160
152
// calculated value is written to the counter compare register to prepare
161
153
// the interrupt generation.
162
- uint64_t current_time64 = us_ticker_64bit_get ();
154
+ uint64_t current_time64 = common_rtc_64bit_us_get ();
163
155
// [add upper 32 bits from the current time to the timestamp value]
164
- uint64_t timestamp64 = timestamp + (current_time64 & ~(uint64_t )0xFFFFFFFF );
156
+ uint64_t timestamp64 = us_timestamp +
157
+ (current_time64 & ~(uint64_t )0xFFFFFFFF );
165
158
// [if the original timestamp value happens to be after the 32 bit counter
166
159
// of microsends overflows, correct the upper 32 bits accordingly]
167
- if (timestamp < (uint32_t )(current_time64 & 0xFFFFFFFF )) {
160
+ if (us_timestamp < (uint32_t )(current_time64 & 0xFFFFFFFF )) {
168
161
timestamp64 += ((uint64_t )1 << 32 );
169
162
}
170
163
// [microseconds -> ticks, always round the result up to avoid too early
@@ -182,9 +175,26 @@ void us_ticker_set_interrupt(timestamp_t timestamp)
182
175
compare_value = closest_safe_compare ;
183
176
}
184
177
185
- nrf_rtc_cc_set (COMMON_RTC_INSTANCE , US_TICKER_CC_CHANNEL ,
186
- RTC_WRAP (compare_value ));
187
- nrf_rtc_event_enable (COMMON_RTC_INSTANCE , US_TICKER_INT_MASK );
178
+ nrf_rtc_cc_set (COMMON_RTC_INSTANCE , cc_channel , RTC_WRAP (compare_value ));
179
+ nrf_rtc_event_enable (COMMON_RTC_INSTANCE , int_mask );
180
+ }
181
+ //------------------------------------------------------------------------------
182
+
183
+
184
+ void us_ticker_init (void )
185
+ {
186
+ common_rtc_init ();
187
+ }
188
+
189
+ uint32_t us_ticker_read ()
190
+ {
191
+ return (uint32_t )common_rtc_64bit_us_get ();
192
+ }
193
+
194
+ void us_ticker_set_interrupt (timestamp_t timestamp )
195
+ {
196
+ common_rtc_set_interrupt (timestamp ,
197
+ US_TICKER_CC_CHANNEL , US_TICKER_INT_MASK );
188
198
}
189
199
190
200
void us_ticker_disable_interrupt (void )
0 commit comments