RTEMS
6.3
Toggle main menu visibility
Loading...
Searching...
No Matches
bsps
arm
include
bsp
clock-armv7m.h
Go to the documentation of this file.
1
/* SPDX-License-Identifier: BSD-2-Clause */
2
10
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
46
extern
"C"
{
47
#endif
/* __cplusplus */
48
59
60
#ifdef ARM_MULTILIB_ARCH_V7M
61
62
typedef
struct
{
63
struct
timecounter
base;
64
uint32_t ticks;
65
} ARMV7M_Timecounter;
66
67
extern
ARMV7M_Timecounter _ARMV7M_TC;
68
69
static
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
79
static
uint32_t _ARMV7M_Clock_counter(ARMV7M_Timecounter *tc)
80
{
81
volatile
ARMV7M_Systick *systick;
82
rtems_interrupt_level
level;
83
uint32_t interval;
84
uint32_t counter;
85
uint32_t ticks;
86
uint32_t csr;
87
88
rtems_interrupt_disable
(level);
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;
102
rtems_interrupt_enable
(level);
103
104
return
counter;
105
}
106
107
#endif
/* ARM_MULTILIB_ARCH_V7M */
108
110
111
#ifdef __cplusplus
112
}
113
#endif
/* __cplusplus */
114
115
#endif
/* BSP_CLOCK_ARMV7M_H */
armv7m.h
This header file provides interfaces of the ARMv7-M architecture support.
RTEMS_PREDICT_FALSE
#define RTEMS_PREDICT_FALSE(_exp)
Evaluates the integral expression and tells the compiler that the predicted value is false (0).
Definition
basedefs.h:732
rtems_interrupt_level
ISR_Level rtems_interrupt_level
This integer type represents interrupt levels.
Definition
intr.h:111
rtems_interrupt_enable
#define rtems_interrupt_enable(_isr_cookie)
Restores the previous interrupt level on the current processor.
Definition
intr.h:311
rtems_interrupt_disable
#define rtems_interrupt_disable(_isr_cookie)
Disables the maskable interrupts on the current processor.
Definition
intr.h:264
timecounter
Definition
timetc.h:58
timecounter.h
This header file provides the Timecounter Support API.
Generated by
1.18.0