123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /*
- * Copyright (c) 2016-2020 Nordic Semiconductor ASA
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #ifndef ZEPHYR_INCLUDE_DRIVERS_TIMER_NRF_RTC_TIMER_H
- #define ZEPHYR_INCLUDE_DRIVERS_TIMER_NRF_RTC_TIMER_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef void (*z_nrf_rtc_timer_compare_handler_t)(int32_t id,
- uint32_t cc_value,
- void *user_data);
- /** @brief Allocate RTC compare channel.
- *
- * Channel 0 is used for the system clock.
- *
- * @retval Non-negative indicates allocated channel ID.
- * @retval -ENOMEM if channel cannot be allocated.
- */
- int32_t z_nrf_rtc_timer_chan_alloc(void);
- /** @brief Free RTC compare channel.
- *
- * @param chan Previously allocated channel ID.
- */
- void z_nrf_rtc_timer_chan_free(int32_t chan);
- /** @brief Read current RTC counter value.
- *
- * @return Current RTC counter value.
- */
- uint32_t z_nrf_rtc_timer_read(void);
- /** @brief Get COMPARE event register address.
- *
- * Address can be used for (D)PPI.
- *
- * @param chan Channel ID between 0 and CONFIG_NRF_RTC_TIMER_USER_CHAN_COUNT.
- *
- * @return Register address.
- */
- uint32_t z_nrf_rtc_timer_compare_evt_address_get(int32_t chan);
- /** @brief Safely disable compare event interrupt.
- *
- * Function returns key indicating whether interrupt was already disabled.
- *
- * @param chan Channel ID between 1 and CONFIG_NRF_RTC_TIMER_USER_CHAN_COUNT.
- *
- * @return key passed to @ref z_nrf_rtc_timer_compare_int_unlock.
- */
- bool z_nrf_rtc_timer_compare_int_lock(int32_t chan);
- /** @brief Safely enable compare event interrupt.
- *
- * Event interrupt is conditionally enabled based on @p key.
- *
- * @param chan Channel ID between 1 and CONFIG_NRF_RTC_TIMER_USER_CHAN_COUNT.
- *
- * @param key Key returned by @ref z_nrf_rtc_timer_compare_int_lock.
- */
- void z_nrf_rtc_timer_compare_int_unlock(int32_t chan, bool key);
- /** @brief Read compare register value.
- *
- * @param chan Channel ID between 0 and CONFIG_NRF_RTC_TIMER_USER_CHAN_COUNT.
- *
- * @return Value set in the compare register.
- */
- uint32_t z_nrf_rtc_timer_compare_read(int32_t chan);
- /** @brief Try to set compare channel to given value.
- *
- * Provided value is absolute and cannot be further in future than half span of
- * the RTC counter. Function continouosly retries to set compare register until
- * value that is written is far enough in the future and will generate an event.
- * Because of that, compare register value may be different than the one
- * requested. During this operation interrupt from that compare channel is
- * disabled. Other interrupts are not locked during this operation.
- *
- * There is no option to abort the request once it is set. However, it can be
- * overwritten.
- *
- * @param chan Channel ID between 1 and CONFIG_NRF_RTC_TIMER_USER_CHAN_COUNT.
- *
- * @param cc_value Absolute value. Values which are further distanced from
- * current counter value than half RTC span are considered in the past.
- *
- * @param handler User function called in the context of the RTC interrupt.
- *
- * @param user_data Data passed to the handler.
- */
- void z_nrf_rtc_timer_compare_set(int32_t chan, uint32_t cc_value,
- z_nrf_rtc_timer_compare_handler_t handler,
- void *user_data);
- /** @brief Convert system clock time to RTC ticks.
- *
- * @p t can be absolute or relative. @p t cannot be further from now than half
- * of the RTC range (e.g. 256 seconds if RTC is running at 32768 Hz).
- *
- * @retval Positive value represents @p t in RTC tick value.
- * @retval -EINVAL if @p t is out of range.
- */
- int z_nrf_rtc_timer_get_ticks(k_timeout_t t);
- #ifdef __cplusplus
- }
- #endif
- #endif /* ZEPHYR_INCLUDE_DRIVERS_TIMER_NRF_RTC_TIMER_H */
|