@web-font-path: "roboto-debian.css";
Loading...
Searching...
No Matches
resets.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef _HARDWARE_RESETS_H
8#define _HARDWARE_RESETS_H
9
10#include "pico.h"
11#include "hardware/structs/resets.h"
12
96
97// PICO_CONFIG: PARAM_ASSERTIONS_ENABLED_HARDWARE_RESETS, Enable/disable assertions in the hardware_resets module, type=bool, default=0, group=hardware_adc
98#ifndef PARAM_ASSERTIONS_ENABLED_HARDWARE_RESETS
99#ifdef PARAM_ASSERTIONS_ENABLED_RESET // backwards compatibility with SDK < 2.0.0
100#define PARAM_ASSERTIONS_ENABLED_HARDWARE_RESETS PARAM_ASSERTIONS_ENABLED_RESET
101#else
102#define PARAM_ASSERTIONS_ENABLED_HARDWARE_RESETS 0
103#endif
104#endif
105#ifdef __cplusplus
106extern "C" {
107#endif
108
109static __force_inline void reset_block_reg_mask(io_rw_32 *reset, uint32_t mask) {
110 hw_set_bits(reset, mask);
111}
112
113static __force_inline void unreset_block_reg_mask(io_rw_32 *reset, uint32_t mask) {
114 hw_clear_bits(reset, mask);
115}
116
117static __force_inline void unreset_block_reg_mask_wait_blocking(io_rw_32 *reset, io_ro_32 *reset_done, uint32_t mask) {
118 hw_clear_bits(reset, mask);
119 while (~*reset_done & mask)
121}
122
124
130static __force_inline void reset_block_mask(uint32_t bits) {
131 reset_block_reg_mask(&resets_hw->reset, bits);
132}
133
139static __force_inline void unreset_block_mask(uint32_t bits) {
140 unreset_block_reg_mask(&resets_hw->reset, bits);
141}
142
149 unreset_block_reg_mask_wait_blocking(&resets_hw->reset, &resets_hw->reset_done, bits);
150}
151
153
154#ifndef HARDWARE_RESETS_ENABLE_SDK1XX_COMPATIBILITY
155#define HARDWARE_RESETS_ENABLE_SDK1XX_COMPATIBILITY 1
156#endif
157
158#if HARDWARE_RESETS_ENABLE_SDK1XX_COMPATIBILITY
159static __force_inline void reset_block(uint32_t bits) {
160 reset_block_mask(bits);
161}
162
163static __force_inline void unreset_block(uint32_t bits) {
164 unreset_block_mask(bits);
165}
166
167static __force_inline void unreset_block_wait(uint32_t bits) {
169}
170#endif
171
177static inline void reset_block_num(uint32_t block_num) {
178 reset_block_reg_mask(&resets_hw->reset, 1u << block_num);
179}
180
186static inline void unreset_block_num(uint block_num) {
187 invalid_params_if(HARDWARE_RESETS, block_num > NUM_RESETS);
188 unreset_block_reg_mask(&resets_hw->reset, 1u << block_num);
189}
190
196static inline void unreset_block_num_wait_blocking(uint block_num) {
197 invalid_params_if(HARDWARE_RESETS, block_num > NUM_RESETS);
198 unreset_block_reg_mask_wait_blocking(&resets_hw->reset, &resets_hw->reset_done, 1u << block_num);
199}
200
206static inline void reset_unreset_block_num_wait_blocking(uint block_num) {
207 invalid_params_if(HARDWARE_RESETS, block_num > NUM_RESETS);
208 reset_block_reg_mask(&resets_hw->reset, 1u << block_num);
209 unreset_block_reg_mask_wait_blocking(&resets_hw->reset, &resets_hw->reset_done, 1u << block_num);
210}
211
212#ifdef __cplusplus
213}
214#endif
215
216#endif
static __force_inline void hw_set_bits(io_rw_32 *addr, uint32_t mask)
Atomically set the specified bits to 1 in a HW register.
Definition address_mapped.h:135
static __force_inline void hw_clear_bits(io_rw_32 *addr, uint32_t mask)
Atomically clear the specified bits to 0 in a HW register.
Definition address_mapped.h:145
static void unreset_block_num(uint block_num)
bring specified HW block out of reset
Definition resets.h:186
static __force_inline void unreset_block_mask(uint32_t bits)
bring specified HW blocks out of reset
Definition resets.h:139
static void reset_block_num(uint32_t block_num)
Reset the specified HW block.
Definition resets.h:177
static __force_inline void reset_block_mask(uint32_t bits)
Reset the specified HW blocks.
Definition resets.h:130
static void reset_unreset_block_num_wait_blocking(uint block_num)
Reset the specified HW block, and then bring at back out of reset and wait for completion.
Definition resets.h:206
static void unreset_block_num_wait_blocking(uint block_num)
Bring specified HW block out of reset and wait for completion.
Definition resets.h:196
static __force_inline void unreset_block_mask_wait_blocking(uint32_t bits)
Bring specified HW blocks out of reset and wait for completion.
Definition resets.h:148
#define __force_inline
Attribute to force inlining of a function regardless of optimization level.
Definition compiler.h:128
static __force_inline void tight_loop_contents(void)
No-op function for the body of tight loops.
Definition common.h:74