/****************************************************************************** * * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by * Analog Devices, Inc.), * Copyright (C) 2023-2024 Analog Devices, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ /** * @file mxc_sys.h * @brief System level header file. */ #ifndef LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32665_MXC_SYS_H_ #define LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32665_MXC_SYS_H_ #include "mxc_device.h" #include "gcr_regs.h" #ifdef __cplusplus extern "C" { #endif /** * @defgroup mxc_sys System Configuration (MXC_SYS) * @ingroup syscfg * @details API for system configuration including clock source selection and entering critical sections of code. * @{ */ /** @brief System reset0 and reset1 enumeration. Used in SYS_PeriphReset0 function */ typedef enum { MXC_SYS_RESET_DMA0 = MXC_F_GCR_RSTR0_DMA_POS, /**< Reset DMA */ MXC_SYS_RESET_WDT0 = MXC_F_GCR_RSTR0_WDT0_POS, /**< Reset WDT */ MXC_SYS_RESET_GPIO0 = MXC_F_GCR_RSTR0_GPIO0_POS, /**< Reset GPIO0 */ MXC_SYS_RESET_GPIO1 = MXC_F_GCR_RSTR0_GPIO1_POS, /**< Reset GPIO1 */ MXC_SYS_RESET_TIMER0 = MXC_F_GCR_RSTR0_TIMER0_POS, /**< Reset TIMER0 */ MXC_SYS_RESET_TIMER1 = MXC_F_GCR_RSTR0_TIMER1_POS, /**< Reset TIMER1 */ MXC_SYS_RESET_TIMER2 = MXC_F_GCR_RSTR0_TIMER2_POS, /**< Reset TIMER2 */ MXC_SYS_RESET_TIMER3 = MXC_F_GCR_RSTR0_TIMER3_POS, /**< Reset TIMER3 */ MXC_SYS_RESET_TIMER4 = MXC_F_GCR_RSTR0_TIMER4_POS, /**< Reset TIMER4 */ MXC_SYS_RESET_TIMER5 = MXC_F_GCR_RSTR0_TIMER5_POS, /**< Reset TIMER5 */ MXC_SYS_RESET_UART0 = MXC_F_GCR_RSTR0_UART0_POS, /**< Reset UART0 */ MXC_SYS_RESET_UART1 = MXC_F_GCR_RSTR0_UART1_POS, /**< Reset UART1 */ MXC_SYS_RESET_SPI1 = MXC_F_GCR_RSTR0_SPI1_POS, /**< Reset SPI0 */ MXC_SYS_RESET_SPI2 = MXC_F_GCR_RSTR0_SPI2_POS, /**< Reset SPI1 */ MXC_SYS_RESET_I2C0 = MXC_F_GCR_RSTR0_I2C0_POS, /**< Reset I2C0 */ MXC_SYS_RESET_RTC = MXC_F_GCR_RSTR0_RTC_POS, /**< Reset RTC */ MXC_SYS_RESET_CRYPTO = MXC_F_GCR_RSTR0_CRYPTO_POS, /**< Reset CRYPTO */ MXC_SYS_RESET_SMPHR = MXC_F_GCR_RSTR0_SMPHR_POS, /**< Reset SMPHR */ MXC_SYS_RESET_USB = MXC_F_GCR_RSTR0_USB_POS, /**< Reset USB */ // MXC_SYS_RESET_TRNG = MXC_F_GCR_RSTR0_TRNG_POS, /**< Reset TRNG */ MXC_SYS_RESET_ADC = MXC_F_GCR_RSTR0_ADC_POS, /**< Reset ADC */ MXC_SYS_RESET_DMA1 = MXC_F_GCR_RSTR0_DMA1_POS, /**< Reset DMA1 */ MXC_SYS_RESET_UART2 = MXC_F_GCR_RSTR0_UART2_POS, /**< Reset UART2 */ MXC_SYS_RESET_SRST = MXC_F_GCR_RSTR0_SRST_POS, /**< Soft reset */ MXC_SYS_RESET_PRST = MXC_F_GCR_RSTR0_PRST_POS, /**< Peripheral reset */ MXC_SYS_RESET_SYSTEM = MXC_F_GCR_RSTR0_SYSTEM_POS, /**< System reset */ /* RESET1 Below this line we add 32 to separate RESET0 and RESET1 */ MXC_SYS_RESET_I2C1 = (MXC_F_GCR_RSTR1_I2C1_POS + 32), /**< Reset I2C1 */ MXC_SYS_RESET_PT = (MXC_F_GCR_RSTR1_PT_POS + 32), /**< Reset PT */ MXC_SYS_RESET_SPIXIP = (MXC_F_GCR_RSTR1_SPIXIP_POS + 32), /**< Reset SPIXIP */ MXC_SYS_RESET_XSPIM = (MXC_F_GCR_RSTR1_XSPIM_POS + 32), /**< Reset XSPIM */ MXC_SYS_RESET_SDHC = (MXC_F_GCR_RSTR1_SDHC_POS + 32), /**< Reset SDHC */ MXC_SYS_RESET_OWIRE = (MXC_F_GCR_RSTR1_OWIRE_POS + 32), /**< Reset OWIRE */ MXC_SYS_RESET_WDT1 = (MXC_F_GCR_RSTR1_WDT1_POS + 32), /**< Reset WDT1 */ MXC_SYS_RESET_SPI0 = (MXC_F_GCR_RSTR1_SPI0_POS + 32), /**< Reset SPI2 */ MXC_SYS_RESET_SPIXMEM = (MXC_F_GCR_RSTR1_SPIXMEM_POS + 32), /**< Reset SPIXMEM */ MXC_SYS_RESET_SEMA = (MXC_F_GCR_RSTR1_SMPHR_POS + 32), /**< Reset SEMA */ MXC_SYS_RESET_WDT2 = (MXC_F_GCR_RSTR1_WDT2_POS + 32), /**< Reset WDT1 */ MXC_SYS_RESET_BTLE = (MXC_F_GCR_RSTR1_BTLE_POS + 32), /**< Reset BTLE */ MXC_SYS_RESET_AUDIO = (MXC_F_GCR_RSTR1_AUDIO_POS + 32), /**< Reset BTLE */ MXC_SYS_RESET_RPU = (MXC_F_GCR_RSTR1_RPU_POS + 32), /**< Reset BTLE */ MXC_SYS_RESET_I2C2 = (MXC_F_GCR_RSTR1_I2C2_POS + 32), /**< Reset BTLE */ MXC_SYS_RESET_HTMR0 = (MXC_F_GCR_RSTR1_HTMR0_POS + 32), /**< Reset HTMR0 */ MXC_SYS_RESET_HTMR1 = (MXC_F_GCR_RSTR1_HTMR1_POS + 32), /**< Reset HTMR1 */ MXC_SYS_RESET_DVS = (MXC_F_GCR_RSTR1_DVS_POS + 32), /**< Reset DVS */ MXC_SYS_RESET_SIMO = (MXC_F_GCR_RSTR1_SIMO_POS + 32), /**< Reset SIMO */ } mxc_sys_reset_t; /** @brief System clock disable enumeration. Used in SYS_ClockDisable and SYS_ClockEnable functions */ typedef enum { MXC_SYS_PERIPH_CLOCK_GPIO0 = MXC_F_GCR_PERCKCN0_GPIO0D_POS, /**< Disable MXC_F_GCR_PERCKCN0_GPIO0D clock */ MXC_SYS_PERIPH_CLOCK_GPIO1 = MXC_F_GCR_PERCKCN0_GPIO1D_POS, /**< Disable MXC_F_GCR_PERCKCN0_GPIO1D clock */ MXC_SYS_PERIPH_CLOCK_USB = MXC_F_GCR_PERCKCN0_USBD_POS, /**< Disable MXC_F_GCR_PERCKCN0_USBD clock */ MXC_SYS_PERIPH_CLOCK_DMA = MXC_F_GCR_PERCKCN0_DMAD_POS, /**< Disable MXC_F_GCR_PERCKCN0_DMAD clock */ MXC_SYS_PERIPH_CLOCK_SPI1 = MXC_F_GCR_PERCKCN0_SPI1D_POS, /**< Disable MXC_F_GCR_PERCKCN0_SPI1D clock */ MXC_SYS_PERIPH_CLOCK_SPI2 = MXC_F_GCR_PERCKCN0_SPI2D_POS, /**< Disable MXC_F_GCR_PERCKCN0_SPI2D clock */ MXC_SYS_PERIPH_CLOCK_UART0 = MXC_F_GCR_PERCKCN0_UART0D_POS, /**< Disable MXC_F_GCR_PERCKCN0_UART0D clock */ MXC_SYS_PERIPH_CLOCK_UART1 = MXC_F_GCR_PERCKCN0_UART1D_POS, /**< Disable MXC_F_GCR_PERCKCN0_UART1D clock */ MXC_SYS_PERIPH_CLOCK_I2C0 = MXC_F_GCR_PERCKCN0_I2C0D_POS, /**< Disable MXC_F_GCR_PERCKCN0_I2C0D clock */ MXC_SYS_PERIPH_CLOCK_TPU = MXC_F_GCR_PERCKCN0_CRYPTOD_POS, /**< Disable MXC_F_GCR_PERCKCN0_CRYPTOD clock */ MXC_SYS_PERIPH_CLOCK_T0 = MXC_F_GCR_PERCKCN0_TIMER0D_POS, /**< Disable MXC_F_GCR_PERCKCN0_T0D clock */ MXC_SYS_PERIPH_CLOCK_T1 = MXC_F_GCR_PERCKCN0_TIMER1D_POS, /**< Disable MXC_F_GCR_PERCKCN0_T1D clock */ MXC_SYS_PERIPH_CLOCK_T2 = MXC_F_GCR_PERCKCN0_TIMER2D_POS, /**< Disable MXC_F_GCR_PERCKCN0_T2D clock */ MXC_SYS_PERIPH_CLOCK_T3 = MXC_F_GCR_PERCKCN0_TIMER3D_POS, /**< Disable MXC_F_GCR_PERCKCN0_T3D clock */ MXC_SYS_PERIPH_CLOCK_T4 = MXC_F_GCR_PERCKCN0_TIMER4D_POS, /**< Disable MXC_F_GCR_PERCKCN0_T4D clock */ MXC_SYS_PERIPH_CLOCK_T5 = MXC_F_GCR_PERCKCN0_TIMER5D_POS, /**< Disable MXC_F_GCR_PERCKCN0_T5D clock */ MXC_SYS_PERIPH_CLOCK_ADC = MXC_F_GCR_PERCKCN0_ADCD_POS, /**< Disable MXC_F_GCR_PERCKCN0_ADCD clock */ MXC_SYS_PERIPH_CLOCK_I2C1 = MXC_F_GCR_PERCKCN0_I2C1D_POS, /**< Disable MXC_F_GCR_PERCKCN0_I2C1D clock */ MXC_SYS_PERIPH_CLOCK_PT = MXC_F_GCR_PERCKCN0_PTD_POS, /**< Disable MXC_F_GCR_PERCKCN0_PTD clock */ MXC_SYS_PERIPH_CLOCK_SPIXIP = MXC_F_GCR_PERCKCN0_SPIXIPD_POS, /**< Disable MXC_F_GCR_PERCKCN0_SPIXIPD clock */ MXC_SYS_PERIPH_CLOCK_SPIXFC = MXC_F_GCR_PERCKCN0_SPIMD_POS, /**< Disable MXC_F_GCR_PERCKCN0_SPIMD clock */ /* PERCKCN1 Below this line we add 32 to separate PERCKCN0 and PERCKCN1 */ MXC_SYS_PERIPH_CLOCK_BTLE = (MXC_F_GCR_PERCKCN1_BTLED_POS + 32), MXC_SYS_PERIPH_CLOCK_UART2 = (MXC_F_GCR_PERCKCN1_UART2D_POS + 32), /**