| /* |
| * Copyright (c) 2024 Raspberry Pi (Trading) Ltd. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| #ifndef _HARDWARE_TICKS_H |
| #define _HARDWARE_TICKS_H |
| |
| /** \file hardware/tick.h |
| * \defgroup hardware_ticks hardware_ticks |
| * |
| * \brief Hardware Tick API |
| * |
| * \if rp2040_specific |
| * RP2040 only has one tick generator, and it is part of the watchdog hardware. |
| * \endif |
| * |
| * \if rp2350_specific |
| * The RP2350 has a dedicated Tick block that is used to supply ticks to TIMER0, TIMER1, |
| * RISC-V platform timer, Arm Cortex-M33 0 timer, Arm Cortex-M33 1 timer and the WATCHDOG block. |
| * \endif |
| */ |
| |
| #include "pico.h" |
| #if !PICO_RP2040 |
| #include "hardware/structs/ticks.h" |
| #else |
| #include "hardware/watchdog.h" |
| /*! \brief Tick generator numbers on RP2040 (used as typedef \ref tick_gen_num_t) |
| * \ingroup hardware_ticks |
| * |
| * RP2040 only has one tick generator, and it is part of the watchdog hardware |
| */ |
| typedef enum tick_gen_num_rp2040 { |
| TICK_WATCHDOG = 0, |
| TICK_COUNT |
| } tick_gen_num_t; |
| #endif |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| // PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_HARDWARE_TICKS, Enable/disable assertions in the hardware_ticks module, type=bool, default=0, group=hardware_ticks |
| #ifndef PARAM_ASSERTIONS_ENABLED_HARDWARE_TICKS |
| #define PARAM_ASSERTIONS_ENABLED_HARDWARE_TICKS 0 |
| #endif |
| |
| /*! \brief Start a tick generator |
| * \ingroup hardware_ticks |
| * |
| * \param tick The tick generator number |
| * \param cycles The number of clock cycles per tick |
| */ |
| void tick_start(tick_gen_num_t tick, uint cycles); |
| |
| |
| /*! \brief Stop a tick generator |
| * \ingroup hardware_ticks |
| * |
| * \param tick The tick generator number |
| */ |
| void tick_stop(tick_gen_num_t tick); |
| |
| /*! \brief Check if a tick genererator is currently running |
| * \ingroup hardware_ticks |
| * |
| * \param tick The tick generator number |
| * \return true if the specific ticker is running. |
| */ |
| bool tick_is_running(tick_gen_num_t tick); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif |