100 lines
2.1 KiB
C
100 lines
2.1 KiB
C
/*
|
|
* 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"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** \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[]
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|