]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/RISC-V_RV32_SiFive_HiFive1_FreedomStudio/freedom-metal/src/drivers/fixed-factor-clock.c
Update RISCC-V-RV32-SiFive_HiFive1_FreedomStudio project to latest tools and metal...
[freertos] / FreeRTOS / Demo / RISC-V_RV32_SiFive_HiFive1_FreedomStudio / freedom-metal / src / drivers / fixed-factor-clock.c
1 /* Copyright 2018 SiFive, Inc. */
2 /* SPDX-License-Identifier: Apache-2.0 */
3
4 #include <metal/machine/platform.h>
5
6 #ifdef METAL_FIXED_FACTOR_CLOCK
7
8 #include <metal/drivers/fixed-factor-clock.h>
9 #include <stddef.h>
10 #include <metal/machine.h>
11
12 long __metal_driver_fixed_factor_clock_get_rate_hz(const struct metal_clock *gclk)
13 {
14     struct metal_clock *parent = __metal_driver_fixed_factor_clock_parent(gclk);
15     long parent_rate = 1;
16     if(parent) {
17         parent_rate = parent->vtable->get_rate_hz(parent);
18     }
19
20     return __metal_driver_fixed_factor_clock_mult(gclk) * parent_rate / __metal_driver_fixed_factor_clock_div(gclk);
21 }
22
23 long __metal_driver_fixed_factor_clock_set_rate_hz(struct metal_clock *gclk, long target_hz)
24 {
25     return __metal_driver_fixed_factor_clock_get_rate_hz(gclk);
26 }
27
28 __METAL_DEFINE_VTABLE(__metal_driver_vtable_fixed_factor_clock) = {
29     .clock.get_rate_hz = __metal_driver_fixed_factor_clock_get_rate_hz,
30     .clock.set_rate_hz = __metal_driver_fixed_factor_clock_set_rate_hz,
31 };
32 #endif /* METAL_FIXED_FACTOR_CLOCK */
33
34 typedef int no_empty_translation_units;