136 microsd_dat3 = 0x054,
159 gpio_0_ios_0 = 0x000,
160 gpio_0_ios_1 = 0x001,
161 gpio_0_ios_2 = 0x002,
162 gpio_0_ios_3 = 0x003,
163 gpio_0_ios_4 = 0x004,
164 gpio_0_ios_5 = 0x005,
165 gpio_0_ios_6 = 0x006,
166 gpio_0_ios_7 = 0x007,
167 gpio_0_ios_8 = 0x008,
168 gpio_0_ios_9 = 0x009,
169 gpio_0_ios_10 = 0x00a,
170 gpio_0_ios_11 = 0x00b,
171 gpio_0_ios_12 = 0x00c,
172 gpio_0_ios_13 = 0x00d,
173 gpio_0_ios_14 = 0x00e,
174 gpio_0_ios_15 = 0x00f,
175 gpio_0_ios_16 = 0x010,
176 gpio_0_ios_17 = 0x011,
177 gpio_0_ios_18 = 0x012,
178 gpio_0_ios_19 = 0x013,
179 gpio_0_ios_20 = 0x014,
180 gpio_0_ios_21 = 0x015,
181 gpio_0_ios_22 = 0x016,
182 gpio_0_ios_23 = 0x017,
183 gpio_0_ios_24 = 0x018,
184 gpio_0_ios_25 = 0x019,
185 gpio_0_ios_26 = 0x01a,
186 gpio_0_ios_27 = 0x01b,
187 gpio_1_ios_0 = 0x01c,
188 gpio_1_ios_1 = 0x01d,
189 gpio_1_ios_2 = 0x01e,
190 gpio_1_ios_3 = 0x01f,
191 gpio_1_ios_4 = 0x020,
192 gpio_1_ios_5 = 0x021,
193 gpio_1_ios_6 = 0x022,
194 gpio_1_ios_7 = 0x023,
195 gpio_1_ios_8 = 0x024,
196 gpio_1_ios_9 = 0x025,
197 gpio_1_ios_10 = 0x026,
198 gpio_1_ios_11 = 0x027,
199 gpio_1_ios_12 = 0x028,
200 gpio_1_ios_13 = 0x029,
201 gpio_2_ios_0 = 0x02a,
202 gpio_2_ios_1 = 0x02b,
203 gpio_2_ios_2 = 0x02c,
204 gpio_2_ios_3 = 0x02d,
205 gpio_2_ios_4 = 0x02e,
206 gpio_2_ios_5 = 0x02f,
207 gpio_2_ios_6 = 0x030,
208 gpio_2_ios_7 = 0x031,
209 gpio_3_ios_0 = 0x032,
210 gpio_3_ios_1 = 0x033,
211 gpio_3_ios_2 = 0x034,
212 gpio_3_ios_3 = 0x035,
213 gpio_3_ios_4 = 0x036,
214 gpio_3_ios_5 = 0x037,
215 gpio_3_ios_6 = 0x038,
216 gpio_3_ios_7 = 0x039,
217 gpio_4_ios_0 = 0x03a,
218 gpio_4_ios_1 = 0x03b,
219 gpio_4_ios_2 = 0x03c,
220 gpio_4_ios_3 = 0x03d,
221 gpio_4_ios_4 = 0x03e,
222 gpio_4_ios_5 = 0x03f,
241 case PinSink::pmod0_2:
242 case PinSink::pmod1_2:
244 case PinSink::rph_g18:
245 case PinSink::rph_g20:
246 case PinSink::rph_g21:
247 case PinSink::ah_tmpio10:
248 case PinSink::ah_tmpio11:
249 case PinSink::pmod0_4:
250 case PinSink::pmod1_4:
252 case PinSink::ser1_tx:
253 case PinSink::rph_g0:
254 case PinSink::rph_g1:
255 case PinSink::rph_g2_sda:
256 case PinSink::rph_g3_scl:
257 case PinSink::rph_g7:
258 case PinSink::rph_g8:
259 case PinSink::rph_g10:
260 case PinSink::rph_g11:
261 case PinSink::rph_g12:
262 case PinSink::rph_g13:
263 case PinSink::rph_txd0:
264 case PinSink::rph_g16:
265 case PinSink::rph_g17:
266 case PinSink::rph_g19:
267 case PinSink::ah_tmpio1:
268 case PinSink::ah_tmpio3:
269 case PinSink::ah_tmpio5:
270 case PinSink::ah_tmpio6:
271 case PinSink::ah_tmpio9:
272 case PinSink::ah_tmpio13:
273 case PinSink::pmod0_1:
274 case PinSink::pmod0_3:
275 case PinSink::pmod0_8:
276 case PinSink::pmod0_9:
277 case PinSink::pmod0_10:
278 case PinSink::pmod1_1:
279 case PinSink::pmod1_3:
280 case PinSink::pmod1_8:
281 case PinSink::pmod1_9:
282 case PinSink::pmod1_10:
299 case BlockSink::uart_1_rx:
301 case BlockSink::uart_2_rx:
303 case BlockSink::spi_1_cipo:
304 case BlockSink::spi_2_cipo:
306 case BlockSink::spi_0_cipo:
317 template<
typename SinkEnum>
321 const SinkEnum SinkId;
337 Debug::log(
"{} is outside the range of valid sources, [0-{}), "
363 template<
typename SinkEnum>
367 const SinkEnum SinkId)
370 static_cast<ptrdiff_t
>(SinkId)};
371 reg.
bounds() =
sizeof(uint8_t);
395 return get_sink<PinSink>(registers, sink);
418 return get_sink<BlockSink>(registers, sink);
C++ helpers for operating on capabilities.
Helper class for accessing capability properties on pointers.
BoundsProxy bounds()
Access (read, set) the capability's bounds.
Utility class to delete copy and move contructors.
C++ APIs for assertions, invariants, and writing formatted debug messages to a UART.
SPDX-FileCopyrightText: lowRISC contributors SPDX-License-Identifier: Apache-2.0.
static constexpr size_t NumPinSinks
The number of pin sinks (pin outputs).
ConditionalDebug< DebugDriver, "Pinmux"> Debug
Helper for conditional debug logs and assertions.
static constexpr uint8_t sources_number(PinSink pinSink)
Returns the number of sources available for a pin sink (output pin).
constexpr uint8_t SourceDefault
The bit that resets a sink to it's default value.
constexpr uint8_t SourceDisabled
The disable bit that disables a sink.
static constexpr bool DebugDriver
Flag to set when debugging the driver for UART log messages.
PinSink
Each pin sink is configured by an 8-bit register.
static constexpr size_t NumBlockSinks
The number of block sinks (block inputs).
BlockSink
Each block sink is configured by an 8-bit register.
A driver for the Sonata system's pin multiplexed block inputs.
Sink< BlockSink > get(BlockSink sink) volatile
Returns a handle to a block sink (a block input).
A driver for the Sonata system's pin multiplexed output pins.
Sink< PinSink > get(PinSink sink) volatile
Returns a handle to a pin sink (an output pin).
A handle to a sink configuration register.
void disable()
Disconnect the sink from all available sources.
bool select(uint8_t source)
Select a source to connect to the sink.
void default_selection()
Reset the sink to it's default source.
Miscellaneous utility functions and classes.