1 /******************************************************************************
2 * Filename: ull.h
3 *
4 * Description: Defines and prototypes for the ULL instruction wrapper
5 * functions.
6 *
7 * Copyright (c) 2024 Texas Instruments Incorporated
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 * 1) Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 *
15 * 2) Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 *
19 * 3) Neither the name of the copyright holder nor the names of its
20 * contributors may be used to endorse or promote products derived from this
21 * software without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
24 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
27 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33 * POSSIBILITY OF SUCH DAMAGE.
34 *
35 ******************************************************************************/
36
37 #ifndef __ULL_H__
38 #define __ULL_H__
39
40 //*****************************************************************************
41 //
42 //! \addtogroup system_control_group
43 //! @{
44 //! \addtogroup ull_api
45 //! @{
46 //
47 //*****************************************************************************
48
49 //*****************************************************************************
50 //
51 // If building with a C++ compiler, make all of the definitions in this header
52 // have a C binding.
53 //
54 //*****************************************************************************
55 #ifdef __cplusplus
56 extern "C" {
57 #endif
58
59 #include <stdbool.h>
60 #include <stdint.h>
61
62 #include "../inc/hw_types.h"
63 #include "../inc/hw_memmap.h"
64 #include "../inc/hw_rtc.h"
65
66 //*****************************************************************************
67 //
68 // API Functions and prototypes
69 //
70 //*****************************************************************************
71
72 //*****************************************************************************
73 //
74 //! \brief Sync all writes to registers in the ULL domain
75 //!
76 //! The SVT and ULL domains are not fully synchronised. If software issues a
77 //! write to a ULL register followed be a read or write access to an SVT
78 //! register, the accesses may take effect out of order. That is, the SVT access
79 //! may happen before the ULL write.
80 //!
81 //! This function explicitly synchronises the domains by reading from the ULL
82 //! domain. When this function returns, all writes to ULL registers are
83 //! guaranteed to have propagated to hardware.
84 //!
85 //! \return None
86 //!
87 //
88 //*****************************************************************************
ULLSync(void)89 __STATIC_INLINE void ULLSync(void)
90 {
91 // Read an RTC register to ensure that previous ULL writes have taken effect
92 HWREG(RTC_BASE + RTC_O_DESC);
93 }
94
95 //*****************************************************************************
96 //
97 // Mark the end of the C bindings section for C++ compilers.
98 //
99 //*****************************************************************************
100 #ifdef __cplusplus
101 }
102 #endif
103
104 //*****************************************************************************
105 //
106 //! Close the Doxygen group.
107 //! @}
108 //! @}
109 //
110 //*****************************************************************************
111
112 #endif // __ULL_H__
113