LCOV - code coverage report
Current view: top level - zephyr/drivers/timer - nrf_grtc_timer.h Hit Total Coverage
Test: new.info Lines: 1 2 50.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           0 : /*
       2             :  * Copyright (c) 2024 Nordic Semiconductor ASA
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : #ifndef ZEPHYR_INCLUDE_DRIVERS_TIMER_NRF_GRTC_TIMER_H
       8             : #define ZEPHYR_INCLUDE_DRIVERS_TIMER_NRF_GRTC_TIMER_H
       9             : 
      10             : #ifdef __cplusplus
      11             : extern "C" {
      12             : #endif
      13             : 
      14             : #include <zephyr/sys_clock.h>
      15             : 
      16             : /** @brief GRTC timer compare event handler.
      17             :  *
      18             :  * Called from GRTC ISR context when processing a compare event.
      19             :  *
      20             :  * @param id Compare channel ID.
      21             :  *
      22             :  * @param expire_time An actual absolute expiration time set for a compare
      23             :  *                    channel. It can differ from the requested target time
      24             :  *                    and the difference can be used to determine whether the
      25             :  *                    time set was delayed.
      26             :  *
      27             :  * @param user_data Pointer to a user context data.
      28             :  */
      29             : typedef void (*z_nrf_grtc_timer_compare_handler_t)(int32_t id, uint64_t expire_time,
      30             :                                                    void *user_data);
      31             : 
      32             : /** @brief Allocate GRTC capture/compare channel.
      33             :  *
      34             :  * @retval >=0 Non-negative indicates allocated channel ID.
      35             :  * @retval -ENOMEM if channel cannot be allocated.
      36             :  */
      37             : int32_t z_nrf_grtc_timer_chan_alloc(void);
      38             : 
      39             : /** @brief Free GRTC capture/compare channel.
      40             :  *
      41             :  * @param chan Previously allocated channel ID.
      42             :  */
      43             : void z_nrf_grtc_timer_chan_free(int32_t chan);
      44             : 
      45             : /** @brief Read current absolute time.
      46             :  *
      47             :  * @return Current absolute time.
      48             :  */
      49             : uint64_t z_nrf_grtc_timer_read(void);
      50             : 
      51             : /** @brief Check COMPARE event state.
      52             :  *
      53             :  * @param chan Channel ID.
      54             :  *
      55             :  * @retval true  The event has been generated.
      56             :  * @retval false The event has not been generated.
      57             :  */
      58             : bool z_nrf_grtc_timer_compare_evt_check(int32_t chan);
      59             : 
      60             : /** @brief Get COMPARE event register address.
      61             :  *
      62             :  * Address can be used for DPPIC.
      63             :  *
      64             :  * @param chan Channel ID.
      65             :  *
      66             :  * @return Register address.
      67             :  */
      68             : uint32_t z_nrf_grtc_timer_compare_evt_address_get(int32_t chan);
      69             : 
      70             : /** @brief Get CAPTURE task register address.
      71             :  *
      72             :  * Address can be used for DPPIC.
      73             :  *
      74             :  * @param chan Channel ID.
      75             :  *
      76             :  * @return Register address.
      77             :  */
      78             : uint32_t z_nrf_grtc_timer_capture_task_address_get(int32_t chan);
      79             : 
      80             : /** @brief Safely disable compare event interrupt.
      81             :  *
      82             :  * Function returns key indicating whether interrupt was already disabled.
      83             :  *
      84             :  * @param chan Channel ID.
      85             :  *
      86             :  * @return key passed to z_nrf_grtc_timer_compare_int_unlock().
      87             :  */
      88             : bool z_nrf_grtc_timer_compare_int_lock(int32_t chan);
      89             : 
      90             : /** @brief Safely enable compare event interrupt.
      91             :  *
      92             :  * Event interrupt is conditionally enabled based on @p key.
      93             :  *
      94             :  * @param chan Channel ID.
      95             :  *
      96             :  * @param key Key returned by z_nrf_grtc_timer_compare_int_lock().
      97             :  */
      98             : void z_nrf_grtc_timer_compare_int_unlock(int32_t chan, bool key);
      99             : 
     100             : /** @brief Read compare register value.
     101             :  *
     102             :  * @param chan Channel ID.
     103             :  *
     104             :  * @param val Pointer to store the value.
     105             :  *
     106             :  * @retval 0 if the compare register was read successfully.
     107             :  * @retval -EAGAIN if compare for given channel is not set.
     108             :  * @retval -EPERM if either channel is unavailable or SYSCOUNTER is not running.
     109             :  */
     110             : int z_nrf_grtc_timer_compare_read(int32_t chan, uint64_t *val);
     111             : 
     112             : /** @brief  Set compare channel to given value.
     113             :  *
     114             :  * @param chan Channel ID.
     115             :  *
     116             :  * @param target_time Absolute target time in GRTC ticks.
     117             :  *
     118             :  * @param handler User function called in the context of the GRTC interrupt.
     119             :  *
     120             :  * @param user_data Data passed to the handler.
     121             :  *
     122             :  * @retval 0 if the compare channel was set successfully.
     123             :  * @retval -EPERM if either channel is unavailable or SYSCOUNTER is not running.
     124             :  */
     125             : int z_nrf_grtc_timer_set(int32_t chan, uint64_t target_time,
     126             :                          z_nrf_grtc_timer_compare_handler_t handler, void *user_data);
     127             : 
     128             : /** @brief Abort a timer requested with z_nrf_grtc_timer_set().
     129             :  *
     130             :  * If an abort operation is performed too late it is still possible for an event
     131             :  * to fire. The user can detect a spurious event by comparing absolute time
     132             :  * provided in callback and a result of z_nrf_grtc_timer_read(). During this
     133             :  * operation interrupt from that compare channel is disabled. Other interrupts
     134             :  * are not locked during this operation.
     135             :  *
     136             :  * @param chan Channel ID between 1 and CONFIG_NRF_RTC_TIMER_USER_CHAN_COUNT.
     137             :  */
     138             : void z_nrf_grtc_timer_abort(int32_t chan);
     139             : 
     140             : /** @brief Convert system clock time to GRTC ticks.
     141             :  *
     142             :  * @p t can be absolute or relative.
     143             :  *
     144             :  * @retval >=0 Positive value represents @p t in GRTC tick value.
     145             :  * @retval -EINVAL if @p t is out of range.
     146             :  */
     147             : uint64_t z_nrf_grtc_timer_get_ticks(k_timeout_t t);
     148             : 
     149             : /** @brief Prepare channel for timestamp capture.
     150             :  *
     151             :  * Use z_nrf_grtc_timer_capture_task_address_get() to determine the register
     152             :  * address that is used to trigger capture.
     153             :  *
     154             :  * @note Capture and compare are mutually exclusive features - they cannot be
     155             :  *       used simultaneously on the same GRTC channel.
     156             :  *
     157             :  * @param chan Channel ID.
     158             :  *
     159             :  * @retval 0 if the channel was successfully prepared.
     160             :  * @retval -EPERM if either channel is unavailable or SYSCOUNTER is not running.
     161             :  */
     162             : int z_nrf_grtc_timer_capture_prepare(int32_t chan);
     163             : 
     164             : /** @brief Read timestamp value captured on the channel.
     165             :  *
     166             :  * The @p chan must be prepared using z_nrf_grtc_timer_capture_prepare().
     167             :  *
     168             :  * @param chan Channel ID.
     169             :  *
     170             :  * @param captured_time Pointer to store the value.
     171             :  *
     172             :  * @retval 0 if the timestamp was successfully caught and read.
     173             :  * @retval -EBUSY if capturing has not been triggered.
     174             :  * @retval -EPERM if either channel is unavailable or SYSCOUNTER is not running.
     175             :  */
     176             : int z_nrf_grtc_timer_capture_read(int32_t chan, uint64_t *captured_time);
     177             : 
     178             : /** @brief Prepare GRTC as a source of wake up event and set the wake up time.
     179             :  *
     180             :  * @note Calling this function should be immediately followed by low-power mode enter
     181             :  *              (if it executed successfully).
     182             :  *
     183             :  * @param wake_time_us Relative wake up time in microseconds.
     184             :  *
     185             :  * @retval 0 if wake up time was successfully set.
     186             :  * @retval -EPERM if the SYSCOUNTER is not running.
     187             :  * @retval -ENOMEM if no available GRTC channels were found.
     188             :  * @retval -EINVAL if @p wake_time_us is too low.
     189             :  */
     190             : int z_nrf_grtc_wakeup_prepare(uint64_t wake_time_us);
     191             : 
     192             : /**
     193             :  * @brief       Initialize the GRTC clock timer driver from an application-
     194             :  *              defined function.
     195             :  *
     196             :  * @retval 0 on success.
     197             :  * @retval -errno Negative error code on failure.
     198             :  */
     199           1 : int nrf_grtc_timer_clock_driver_init(void);
     200             : 
     201             : #ifdef __cplusplus
     202             : }
     203             : #endif
     204             : 
     205             : #endif /* ZEPHYR_INCLUDE_DRIVERS_TIMER_NRF_GRTC_TIMER_H */

Generated by: LCOV version 1.14