RTEMS 6.1-rc6
Loading...
Searching...
No Matches
clock-armv7m.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-2-Clause */
2
11/*
12 * Copyright (C) 2024 embedded brains GmbH & Co. KG
13 * Copyright (C) 2011, 2018 Sebastian Huber
14 *
15 * Redistribution and use in source and binary forms, with or without
16 * modification, are permitted provided that the following conditions
17 * are met:
18 * 1. Redistributions of source code must retain the above copyright
19 * notice, this list of conditions and the following disclaimer.
20 * 2. Redistributions in binary form must reproduce the above copyright
21 * notice, this list of conditions and the following disclaimer in the
22 * documentation and/or other materials provided with the distribution.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36
37#ifndef BSP_CLOCK_ARMV7M_H
38#define BSP_CLOCK_ARMV7M_H
39
40#include <rtems/score/armv7m.h>
41#include <rtems/timecounter.h>
42
43#include <bsp.h>
44
45#ifdef __cplusplus
46extern "C" {
47#endif /* __cplusplus */
48
60#ifdef ARM_MULTILIB_ARCH_V7M
61
62typedef struct {
63 struct timecounter base;
64 uint32_t ticks;
65} ARMV7M_Timecounter;
66
67extern ARMV7M_Timecounter _ARMV7M_TC;
68
69static inline uint32_t _ARMV7M_Clock_frequency(void)
70{
71#ifdef BSP_ARMV7M_SYSTICK_FREQUENCY
72 return BSP_ARMV7M_SYSTICK_FREQUENCY;
73#else
74 volatile ARMV7M_Systick *systick = _ARMV7M_Systick;
75 return ARMV7M_SYSTICK_CALIB_TENMS_GET(systick->calib) * 100;
76#endif
77}
78
79static uint32_t _ARMV7M_Clock_counter(ARMV7M_Timecounter *tc)
80{
81 volatile ARMV7M_Systick *systick;
83 uint32_t interval;
84 uint32_t counter;
85 uint32_t ticks;
86 uint32_t csr;
87
89 systick = _ARMV7M_Systick;
90 counter = systick->cvr;
91 csr = systick->csr;
92 interval = systick->rvr;
93 ticks = tc->ticks;
94
95 if (RTEMS_PREDICT_FALSE((csr & ARMV7M_SYSTICK_CSR_COUNTFLAG) != 0)) {
96 counter = systick->cvr;
97 ticks += interval;
98 tc->ticks = ticks;
99 }
100
101 counter = interval - counter + ticks;
103
104 return counter;
105}
106
107#endif /* ARM_MULTILIB_ARCH_V7M */
108
111#ifdef __cplusplus
112}
113#endif /* __cplusplus */
114
115#endif /* BSP_CLOCK_ARMV7M_H */
This header file provides interfaces of the ARMv7-M architecture support.
#define RTEMS_PREDICT_FALSE(_exp)
Evaluates the integral expression and tells the compiler that the predicted value is false (0).
Definition: basedefs.h:732
ISR_Level rtems_interrupt_level
This integer type represents interrupt levels.
Definition: intr.h:111
#define rtems_interrupt_enable(_isr_cookie)
Restores the previous interrupt level on the current processor.
Definition: intr.h:311
#define rtems_interrupt_disable(_isr_cookie)
Disables the maskable interrupts on the current processor.
Definition: intr.h:264
Definition: timetc.h:58
This header file provides the Timecounter Support API.