libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
mspm0_group1_shared.hpp
1#pragma once
2
3#include <ti/driverlib/m0p/dl_interrupt.h>
4
5namespace LibXR::MSPM0Group1Shared
6{
7using IrqFn = void (*)();
8
9#if defined(GPIOA_BASE)
10inline constexpr bool K_HAS_GPIOA = true;
11#else
12inline constexpr bool K_HAS_GPIOA = false;
13#endif
14
15#if defined(GPIOB_BASE)
16inline constexpr bool K_HAS_GPIOB = true;
17#else
18inline constexpr bool K_HAS_GPIOB = false;
19#endif
20
21#if defined(GPIOC_BASE)
22inline constexpr bool K_HAS_GPIOC = true;
23#else
24inline constexpr bool K_HAS_GPIOC = false;
25#endif
26
27#if defined(COMP0_BASE)
28inline constexpr bool K_HAS_COMP0 = true;
29#else
30inline constexpr bool K_HAS_COMP0 = false;
31#endif
32
33#if defined(COMP1_BASE)
34inline constexpr bool K_HAS_COMP1 = true;
35#else
36inline constexpr bool K_HAS_COMP1 = false;
37#endif
38
39#if defined(COMP2_BASE)
40inline constexpr bool K_HAS_COMP2 = true;
41#else
42inline constexpr bool K_HAS_COMP2 = false;
43#endif
44
45#if defined(TRNG_BASE)
46inline constexpr bool K_HAS_TRNG = true;
47#else
48inline constexpr bool K_HAS_TRNG = false;
49#endif
50
51inline IrqFn gpioa_irq_cb{nullptr};
52inline IrqFn gpiob_irq_cb{nullptr};
53inline IrqFn gpioc_irq_cb{nullptr};
54inline IrqFn comp0_irq_cb{nullptr};
55inline IrqFn comp1_irq_cb{nullptr};
56inline IrqFn comp2_irq_cb{nullptr};
57inline IrqFn trng_irq_cb{nullptr};
58
59// NOLINTNEXTLINE(readability-identifier-naming)
60void EnableGroup1IRQ();
61
62// NOLINTNEXTLINE(readability-identifier-naming)
63inline void RegisterGPIOA(IrqFn fn)
64{
65 if constexpr (K_HAS_GPIOA)
66 {
67 gpioa_irq_cb = fn;
68 if (fn != nullptr)
69 {
70 EnableGroup1IRQ();
71 }
72 }
73 else
74 {
75 (void)fn;
76 }
77}
78
79// NOLINTNEXTLINE(readability-identifier-naming)
80inline void RegisterGPIOB(IrqFn fn)
81{
82 if constexpr (K_HAS_GPIOB)
83 {
84 gpiob_irq_cb = fn;
85 if (fn != nullptr)
86 {
87 EnableGroup1IRQ();
88 }
89 }
90 else
91 {
92 (void)fn;
93 }
94}
95
96// NOLINTNEXTLINE(readability-identifier-naming)
97inline void RegisterGPIOC(IrqFn fn)
98{
99 if constexpr (K_HAS_GPIOC)
100 {
101 gpioc_irq_cb = fn;
102 if (fn != nullptr)
103 {
104 EnableGroup1IRQ();
105 }
106 }
107 else
108 {
109 (void)fn;
110 }
111}
112
113// NOLINTNEXTLINE(readability-identifier-naming)
114inline void RegisterCOMP0(IrqFn fn)
115{
116 if constexpr (K_HAS_COMP0)
117 {
118 comp0_irq_cb = fn;
119 if (fn != nullptr)
120 {
121 EnableGroup1IRQ();
122 }
123 }
124 else
125 {
126 (void)fn;
127 }
128}
129
130// NOLINTNEXTLINE(readability-identifier-naming)
131inline void RegisterCOMP1(IrqFn fn)
132{
133 if constexpr (K_HAS_COMP1)
134 {
135 comp1_irq_cb = fn;
136 if (fn != nullptr)
137 {
138 EnableGroup1IRQ();
139 }
140 }
141 else
142 {
143 (void)fn;
144 }
145}
146
147// NOLINTNEXTLINE(readability-identifier-naming)
148inline void RegisterCOMP2(IrqFn fn)
149{
150 if constexpr (K_HAS_COMP2)
151 {
152 comp2_irq_cb = fn;
153 if (fn != nullptr)
154 {
155 EnableGroup1IRQ();
156 }
157 }
158 else
159 {
160 (void)fn;
161 }
162}
163
164// NOLINTNEXTLINE(readability-identifier-naming)
165inline void RegisterTRNG(IrqFn fn)
166{
167 if constexpr (K_HAS_TRNG)
168 {
169 trng_irq_cb = fn;
170 if (fn != nullptr)
171 {
172 EnableGroup1IRQ();
173 }
174 }
175 else
176 {
177 (void)fn;
178 }
179}
180} // namespace LibXR::MSPM0Group1Shared