Zephyr API Documentation  2.7.0-rc2
A Scalable Open Source RTOS
timer.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2019 Carlo Caione <ccaione@baylibre.com>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_ARCH_ARM64_TIMER_H_
8#define ZEPHYR_INCLUDE_ARCH_ARM64_TIMER_H_
9
10#ifndef _ASMLANGUAGE
11
13#include <zephyr/types.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
19#define ARM_ARCH_TIMER_IRQ ARM_TIMER_VIRTUAL_IRQ
20#define ARM_ARCH_TIMER_PRIO ARM_TIMER_VIRTUAL_PRIO
21#define ARM_ARCH_TIMER_FLAGS ARM_TIMER_VIRTUAL_FLAGS
22
24{
25}
26
28{
30}
31
32static ALWAYS_INLINE void arm_arch_timer_enable(unsigned char enable)
33{
34 uint64_t cntv_ctl;
35
36 cntv_ctl = read_cntv_ctl_el0();
37
38 if (enable) {
39 cntv_ctl |= CNTV_CTL_ENABLE_BIT;
40 } else {
41 cntv_ctl &= ~CNTV_CTL_ENABLE_BIT;
42 }
43
44 write_cntv_ctl_el0(cntv_ctl);
45}
46
48{
49 uint64_t cntv_ctl;
50
51 cntv_ctl = read_cntv_ctl_el0();
52
53 if (mask) {
54 cntv_ctl |= CNTV_CTL_IMASK_BIT;
55 } else {
56 cntv_ctl &= ~CNTV_CTL_IMASK_BIT;
57 }
58
59 write_cntv_ctl_el0(cntv_ctl);
60}
61
63{
64 return read_cntvct_el0();
65}
66
67#ifdef __cplusplus
68}
69#endif
70
71#endif /* _ASMLANGUAGE */
72
73#endif /* ZEPHYR_INCLUDE_ARCH_ARM64_TIMER_H_ */
static ALWAYS_INLINE uint64_t arm_arch_timer_count(void)
Definition: timer.h:62
static ALWAYS_INLINE void arm_arch_timer_set_irq_mask(bool mask)
Definition: timer.h:47
static ALWAYS_INLINE void arm_arch_timer_set_compare(uint64_t val)
Definition: timer.h:27
static ALWAYS_INLINE void arm_arch_timer_enable(unsigned char enable)
Definition: timer.h:32
static ALWAYS_INLINE void arm_arch_timer_init(void)
Definition: timer.h:23
#define ALWAYS_INLINE
Definition: common.h:116
#define CNTV_CTL_ENABLE_BIT
Definition: cpu.h:104
#define CNTV_CTL_IMASK_BIT
Definition: cpu.h:105
static ALWAYS_INLINE uint64_t read_cntvct_el0(void)
Definition: lib_helpers.h:61
static ALWAYS_INLINE uint64_t read_cntv_ctl_el0(void)
Definition: lib_helpers.h:59
static ALWAYS_INLINE void write_cntv_ctl_el0(uint64_t val)
Definition: lib_helpers.h:59
static ALWAYS_INLINE void write_cntv_cval_el0(uint64_t val)
Definition: lib_helpers.h:60
__UINT64_TYPE__ uint64_t
Definition: stdint.h:61