/* * Copyright (c) 2020 Raspberry Pi (Trading) Ltd. * * SPDX-License-Identifier: BSD-3-Clause */ #ifndef _HARDWARE_RESETS_H #define _HARDWARE_RESETS_H #include "pico.h" #include "hardware/structs/resets.h" /** \file hardware/resets.h * \defgroup hardware_resets hardware_resets * * Hardware Reset API * * The reset controller allows software control of the resets to all of the peripherals that are not * critical to boot the processor in the RP2040. * * \subsubsection reset_bitmask * \addtogroup hardware_resets * * Multiple blocks are referred to using a bitmask as follows: * * Block to reset | Bit * ---------------|---- * USB | 24 * UART 1 | 23 * UART 0 | 22 * Timer | 21 * TB Manager | 20 * SysInfo | 19 * System Config | 18 * SPI 1 | 17 * SPI 0 | 16 * RTC | 15 * PWM | 14 * PLL USB | 13 * PLL System | 12 * PIO 1 | 11 * PIO 0 | 10 * Pads - QSPI | 9 * Pads - bank 0 | 8 * JTAG | 7 * IO Bank 1 | 6 * IO Bank 0 | 5 * I2C 1 | 4 * I2C 0 | 3 * DMA | 2 * Bus Control | 1 * ADC 0 | 0 * * \subsection reset_example Example * \addtogroup hardware_resets * \include hello_reset.c */ /// \tag::reset_funcs[] /*! \brief Reset the specified HW blocks * \ingroup hardware_resets * * \param bits Bit pattern indicating blocks to reset. See \ref reset_bitmask */ static inline void reset_block(uint32_t bits) { hw_set_bits(&resets_hw->reset, bits); } /*! \brief bring specified HW blocks out of reset * \ingroup hardware_resets * * \param bits Bit pattern indicating blocks to unreset. See \ref reset_bitmask */ static inline void unreset_block(uint32_t bits) { hw_clear_bits(&resets_hw->reset, bits); } /*! \brief Bring specified HW blocks out of reset and wait for completion * \ingroup hardware_resets * * \param bits Bit pattern indicating blocks to unreset. See \ref reset_bitmask */ static inline void unreset_block_wait(uint32_t bits) { hw_clear_bits(&resets_hw->reset, bits); while (~resets_hw->reset_done & bits) tight_loop_contents(); } /// \end::reset_funcs[] #endif