mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-15 12:25:20 +03:00
45 lines
No EOL
1.5 KiB
C
45 lines
No EOL
1.5 KiB
C
/*
|
|
* Copyright (c) 2024 Raspberry Pi (Trading) Ltd.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*/
|
|
|
|
#include "hardware/ticks.h"
|
|
|
|
void tick_start(tick_gen_num_t tick, uint cycles) {
|
|
valid_params_if(HARDWARE_TICKS, tick < TICK_COUNT);
|
|
#if PICO_RP2040
|
|
((void)tick);
|
|
cycles <<= WATCHDOG_TICK_CYCLES_LSB;
|
|
valid_params_if(HARDWARE_TICKS, cycles <= WATCHDOG_TICK_CYCLES_BITS);
|
|
// On RP2040, this also provides a tick reference to the timer and SysTick
|
|
watchdog_hw->tick = cycles | WATCHDOG_TICK_ENABLE_BITS;
|
|
#else
|
|
cycles <<= TICKS_WATCHDOG_CYCLES_LSB;
|
|
valid_params_if(HARDWARE_TICKS, cycles <= TICKS_WATCHDOG_CYCLES_BITS);
|
|
// On later hardware, separate tick generators for every tick destination.
|
|
ticks_hw->ticks[tick].cycles = cycles;
|
|
ticks_hw->ticks[tick].ctrl = TICKS_WATCHDOG_CTRL_ENABLE_BITS;
|
|
#endif
|
|
}
|
|
|
|
void tick_stop(tick_gen_num_t tick) {
|
|
valid_params_if(HARDWARE_TICKS, tick < TICK_COUNT);
|
|
#if PICO_RP2040
|
|
((void)tick);
|
|
hw_clear_bits(&watchdog_hw->tick, WATCHDOG_TICK_ENABLE_BITS);
|
|
#else
|
|
hw_clear_bits(&ticks_hw->ticks[tick].ctrl, TICKS_WATCHDOG_CTRL_ENABLE_BITS);
|
|
#endif
|
|
}
|
|
|
|
bool tick_is_running(tick_gen_num_t tick) {
|
|
valid_params_if(HARDWARE_TICKS, tick < TICK_COUNT);
|
|
#if PICO_RP2040
|
|
((void)tick);
|
|
return watchdog_hw->tick & WATCHDOG_TICK_ENABLE_BITS;
|
|
#else
|
|
// On later hardware, separate tick generators for every tick destination.
|
|
return ticks_hw->ticks[tick].ctrl & TICKS_WATCHDOG_CTRL_RUNNING_BITS;
|
|
#endif
|
|
} |