30
30
*/
31
31
#define RTC_HALF (RTC_MASK / 2)
32
32
33
- #define RTC_TICKS_PER_SYS_TICK ((u32_t)((((u64_t)1000000UL / \
34
- sys_clock_ticks_per_sec) * \
35
- 1000000000UL) / 30517578125UL) & RTC_MASK)
36
-
37
- extern s32_t _sys_idle_elapsed_ticks ;
38
-
39
33
/*
40
34
* rtc_past holds the value of RTC_COUNTER at the time the last sys tick was
41
35
* announced, in RTC ticks. It is therefore always a multiple of
42
- * RTC_TICKS_PER_SYS_TICK .
36
+ * sys_clock_hw_cycles_per_tick .
43
37
*/
44
38
static u32_t rtc_past ;
45
39
@@ -115,12 +109,12 @@ static void rtc_announce_set_next(void)
115
109
/* If no sys ticks have elapsed, there is no point in incrementing the
116
110
* counters or announcing it.
117
111
*/
118
- if (rtc_elapsed >= RTC_TICKS_PER_SYS_TICK ) {
112
+ if (rtc_elapsed >= sys_clock_hw_cycles_per_tick ) {
119
113
#ifdef CONFIG_TICKLESS_IDLE
120
114
/* Calculate how many sys ticks elapsed since the last sys tick
121
115
* and notify the kernel if necessary.
122
116
*/
123
- sys_elapsed = rtc_elapsed / RTC_TICKS_PER_SYS_TICK ;
117
+ sys_elapsed = rtc_elapsed / sys_clock_hw_cycles_per_tick ;
124
118
125
119
if (sys_elapsed > expected_sys_ticks ) {
126
120
/* Never announce more sys ticks than the kernel asked
@@ -142,15 +136,15 @@ static void rtc_announce_set_next(void)
142
136
* has passed.
143
137
*/
144
138
rtc_past = (rtc_past +
145
- (sys_elapsed * RTC_TICKS_PER_SYS_TICK )
139
+ (sys_elapsed * sys_clock_hw_cycles_per_tick )
146
140
) & RTC_MASK ;
147
141
148
142
_sys_idle_elapsed_ticks = sys_elapsed ;
149
143
_sys_clock_tick_announce ();
150
144
}
151
145
152
146
/* Set the RTC to the next sys tick */
153
- rtc_compare_set (rtc_past + RTC_TICKS_PER_SYS_TICK );
147
+ rtc_compare_set (rtc_past + sys_clock_hw_cycles_per_tick );
154
148
}
155
149
#endif
156
150
@@ -197,16 +191,16 @@ void _timer_idle_enter(s32_t sys_ticks)
197
191
#else
198
192
/* Restrict ticks to max supported by RTC without risking overflow*/
199
193
if ((sys_ticks < 0 ) ||
200
- (sys_ticks > (RTC_HALF / RTC_TICKS_PER_SYS_TICK ))) {
201
- sys_ticks = RTC_HALF / RTC_TICKS_PER_SYS_TICK ;
194
+ (sys_ticks > (RTC_HALF / sys_clock_hw_cycles_per_tick ))) {
195
+ sys_ticks = RTC_HALF / sys_clock_hw_cycles_per_tick ;
202
196
}
203
197
204
198
expected_sys_ticks = sys_ticks ;
205
199
206
200
/* If ticks is 0, the RTC interrupt handler will be set pending
207
201
* immediately, meaning that we will not go to sleep.
208
202
*/
209
- rtc_compare_set (rtc_past + (sys_ticks * RTC_TICKS_PER_SYS_TICK ));
203
+ rtc_compare_set (rtc_past + (sys_ticks * sys_clock_hw_cycles_per_tick ));
210
204
#endif
211
205
}
212
206
@@ -265,7 +259,7 @@ u32_t _get_elapsed_program_time(void)
265
259
} while (rtc_prev != rtc_now );
266
260
267
261
/*Convert number of Machine cycles to SYS TICS*/
268
- return (rtc_elapsed / RTC_TICKS_PER_SYS_TICK );
262
+ return (rtc_elapsed / sys_clock_hw_cycles_per_tick );
269
263
}
270
264
271
265
@@ -289,14 +283,14 @@ void _set_time(u32_t time)
289
283
expected_sys_ticks = time ;
290
284
_sys_clock_tick_count = _get_elapsed_clock_time ();
291
285
/* Update rtc_past to track rtc timer count*/
292
- rtc_past = (_sys_clock_tick_count * RTC_TICKS_PER_SYS_TICK ) & RTC_MASK ;
286
+ rtc_past = (_sys_clock_tick_count * sys_clock_hw_cycles_per_tick ) & RTC_MASK ;
293
287
294
288
expected_sys_ticks = expected_sys_ticks > _get_max_clock_time () ?
295
289
_get_max_clock_time () : expected_sys_ticks ;
296
290
297
291
/* Programe RTC compare register to generate interrupt*/
298
292
rtc_compare_set (rtc_past +
299
- (expected_sys_ticks * RTC_TICKS_PER_SYS_TICK ));
293
+ (expected_sys_ticks * sys_clock_hw_cycles_per_tick ));
300
294
301
295
}
302
296
@@ -324,8 +318,8 @@ s32_t _get_max_clock_time(void)
324
318
} while (rtc_now != rtc_prev );
325
319
326
320
/* Convert RTC Ticks to SYS TICKS*/
327
- if (rtc_away >= RTC_TICKS_PER_SYS_TICK ) {
328
- sys_away = rtc_away / RTC_TICKS_PER_SYS_TICK ;
321
+ if (rtc_away >= sys_clock_hw_cycles_per_tick ) {
322
+ sys_away = rtc_away / sys_clock_hw_cycles_per_tick ;
329
323
}
330
324
return sys_away ;
331
325
}
@@ -366,9 +360,9 @@ u64_t _get_elapsed_clock_time(void)
366
360
rtc_now = RTC_COUNTER ;
367
361
} while (rtc_now != rtc_prev );
368
362
369
- if (rtc_elapsed >= RTC_TICKS_PER_SYS_TICK ) {
363
+ if (rtc_elapsed >= sys_clock_hw_cycles_per_tick ) {
370
364
/* Convert RTC cycles to SYS TICKS*/
371
- sys_elapsed = rtc_elapsed / RTC_TICKS_PER_SYS_TICK ;
365
+ sys_elapsed = rtc_elapsed / sys_clock_hw_cycles_per_tick ;
372
366
/* Update total number of SYS_TICKS passed*/
373
367
elapsed += sys_elapsed ;
374
368
}
@@ -502,7 +496,7 @@ int _sys_clock_driver_init(struct device *device)
502
496
503
497
/* TODO: replace with counter driver to access RTC */
504
498
SYS_CLOCK_RTC -> PRESCALER = 0 ;
505
- SYS_CLOCK_RTC -> CC [0 ] = RTC_TICKS_PER_SYS_TICK ;
499
+ SYS_CLOCK_RTC -> CC [0 ] = sys_clock_hw_cycles_per_tick ;
506
500
SYS_CLOCK_RTC -> EVTENSET = RTC_EVTENSET_COMPARE0_Msk ;
507
501
SYS_CLOCK_RTC -> INTENSET = RTC_INTENSET_COMPARE0_Msk ;
508
502
@@ -531,7 +525,7 @@ u32_t _timer_cycle_get_32(void)
531
525
do {
532
526
sys_clock_tick_count = _sys_clock_tick_count ;
533
527
elapsed_cycles = (rtc_now - (sys_clock_tick_count *
534
- RTC_TICKS_PER_SYS_TICK )) &
528
+ sys_clock_hw_cycles_per_tick )) &
535
529
RTC_MASK ;
536
530
rtc_prev = rtc_now ;
537
531
rtc_now = RTC_COUNTER ;
0 commit comments