/****************************************************************************** * @file MK8000.h * @brief CMSIS Cortex-M0 Core * Peripheral Access Layer Header File for * Device MK8000 * @version V5.00 * @date 10. January 2020 ******************************************************************************/ /* * Copyright (c) 2009-2018 Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * 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 * * 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. */ #ifndef MK8000_H #define MK8000_H #ifdef __cplusplus extern "C" { #endif /** @mainpage MK8000 SDK APIs User Guide * * @section Introduction * * MK8000 is a single chip, low power, high-performance UWB SoC platform. It integrates an IEEE802.15.4z * compliant radio, PHY and MAC, and provides a single-chip solution for FiRa and CCC compliant applications. * The integrated 32-bit ARM Cortex-M0 MCU together with LSP, on-chip memory, as well as lots of digital and * analog peripherals provides feasibility for many varieties of UWB products. * * MK8000 is a true SoC platform, not just a UWB transceiver. An SDK is provided to help the customer to speed up * the UWB products development process. The SDK provides example projects for FiRa and CCC applications, as * well as ranging and AoA algorithms. These algorithms are implemented based on LSP, which is a dedicated co-processor * can speed up many kinds of instructions for location algorithms. * * * * @section Modules * * @ref MK8000_1_Core * * @ref MK8000_2_System * * @ref MK8000_3_Peripherals * * @ref MK8000_4_UWBS * * @ref MK8000_5_ALGO * * @ref MK8000_6_Examples * * * * \image html MK_logo.png */ /** @defgroup MK8000_1_Core Core * @{ */ /** @defgroup MK8000_NVIC NVIC */ /** @defgroup MK8000_Address_Map Address Map */ /** * @} */ /** @defgroup MK8000_2_System System * @{ */ /** @defgroup MK8000_Calibration Calibration */ /** @defgroup MK8000_Clock Clock Management Unit (CMU) */ /** @defgroup MK8000_Common Common */ /** @defgroup MK8000_MISC Miscellaneous */ /** @defgroup MK8000_IO IO */ /** @defgroup MK8000_Power Power Management Unit (PMU) */ /** @defgroup MK8000_Reset Reset Management Unit (RMU) */ /** @defgroup MK8000_Trace Trace */ /** * @} */ /** @defgroup MK8000_3_Peripherals Peripherals * @{ */ /** @defgroup MK8000_ACMP ACMP */ /** @defgroup MK8000_ADC ADC */ /** @defgroup MK8000_AES AES */ /** @defgroup MK8000_DMA DMA */ /** @defgroup MK8000_Dual_Timer Dual Timer */ /** @defgroup MK8000_eFuse eFuse */ /** @defgroup MK8000_Flash Flash */ /** @defgroup MK8000_GPIO GPIO */ /** @defgroup MK8000_I2C I2C */ /** @defgroup MK8000_LSP LSP */ /** @defgroup MK8000_PWM PWM */ /** @defgroup MK8000_RTC RTC */ /** @defgroup MK8000_Sleep_Timer Sleep Timer */ /** @defgroup MK8000_SPI SPI */ /** @defgroup MK8000_Timer Timer */ /** @defgroup MK8000_TRNG TRNG */ /** @defgroup MK8000_UART UART */ /** @defgroup MK8000_WDT WDT */ /** * @} */ /** @defgroup MK8000_4_UWBS UWB Subsystem * @{ */ /** @defgroup MK8000_UWBS_Low UWB Low Layer API * @{ */ /** @defgroup MK8000_UWB UWB Driver */ /** @defgroup MK8000_MAC MAC */ /** @defgroup MK8000_PHY PHY */ /** * @} */ /** @defgroup MK8000_UWBS_High UWB High Layer API * @{ */ /** @defgroup MK8000_UWB_SUBSYSTEM UWB Subsystem API */ /** @defgroup MK8000_UCI_CMDS UCI Commands API */ /** @defgroup MK8000_FIRA_LIB FIRA LIB API */ /** * @} */ /** * @} */ /** @defgroup MK8000_5_ALGO Algorithm * @{ */ /** @defgroup MK8000_ALGO_AOA AoA */ /** @defgroup MK8000_ALGO_Ranging Ranging */ /** @defgroup MK8000_ALGO_KF Post-process Filter */ /** @defgroup MK8000_ALGO_PDOA PDoA */ /** * @} */ /** @defgroup MK8000_6_Examples Examples * @{ */ /** @defgroup MK8000_Examples_Driver Driver Examples */ /** @defgroup MK8000_Examples_UWB UWB Examples */ /** * @} */ /* =========================================================================================================================== */ /* ================ Interrupt Number Definition ================ */ /* =========================================================================================================================== */ /** @addtogroup MK8000_NVIC NVIC * @{ */ typedef enum IRQn { /* ======================================= ARM Cortex-M0 Specific Interrupt Numbers ==================================== */ /* ToDo: use this Cortex interrupt numbers if your device is a Cortex-M0 / Cortex-M0+ device */ Reset_IRQn = -15, /*!< -15 Reset Vector, invoked on Power up and warm reset */ NonMaskableInt_IRQn = -14, /*!< -14 Non maskable Interrupt, cannot be stopped or preempted */ HardFault_IRQn = -13, /*!< -13 Hard Fault, all classes of Fault */ SVCall_IRQn = -5, /*!< -5 System Service Call via SVC instruction */ PendSV_IRQn = -2, /*!< -2 Pendable request for system service */ SysTick_IRQn = -1, /*!< -1 System Tick Timer */ /* =========================================== MK8000 Specific Interrupt Numbers ======================================= */ BOD_IRQn = 0, /*!< 0 Brown out detection */ ACMP0_IRQn = 1, /*!< 1 Analog comparator 0 */ ACMP1_IRQn = 2, /*!< 2 Analog comparator 1 */ SLEEP_TIMER_IRQn = 3, /*!< 3 Sleep timer */ MAC_IRQn = 4, /*!< 4 MAC */ PHY_IRQn = 5, /*!< 5 PHY */ DMA_IRQn = 6, /*!< 6 DMA */ GPIO_IRQn = 7, /*!< 7 GPIO */ AES_IRQn = 8, /*!< 8 AES */ ADC_IRQn = 9, /*!< 9 ADC */ TRNG_IRQn = 10, /*!< 10 TRNG */ FLASH_CTRL_IRQn = 11, /*!< 11 Flash controller */ LSP_IRQn = 12, /*!< 12 LSP */ WDT_IRQn = 13, /*!< 13 Watch dog timer */ RTC_ALARM_IRQn = 14, /*!< 14 RTC alarm */ RTC_TICK_IRQn = 15, /*!< 15 RTC tick */ PWM_IRQn = 16, /*!< 16 PWM */ TIMER0_IRQn = 17, /*!< 17 Timer0 */ TIMER1_IRQn = 18, /*!< 18 Timer1 */ TIMER2_IRQn = 19, /*!< 19 Timer2 */ TIMER3_IRQn = 20, /*!< 20 Timer3 */ I2C0_IRQn = 21, /*!< 21 I2C */ SPI0_IRQn = 22, /*!< 22 SPI0 */ SPI1_IRQn = 23, /*!< 23 SPI1 */ UART0_IRQn = 24, /*!< 24 UART0 */ UART1_IRQn = 25, /*!< 25 UART1 */ CALIB_IRQn = 26, /*!< 26 Calibration */ RCO32K_CAL_IRQn = 27, /*!< 27 RCO 32K calibration */ WAKEUP_IRQn = 28, /*!< 28 wakeup */ PHY_TIMER_IRQn = 29, /*!< 29 PHY timer */ /* Interrupts 30 .. 31 are left out */ } IRQn_Type; /** * @} */ /* =========================================================================================================================== */ /* ================ Processor and Core Peripheral Section ================ */ /* =========================================================================================================================== */ /* =========================== Configuration of the Arm Cortex-M0 Processor and Core Peripherals * =========================== */ #define __CM0_REV 0x0000U /*!< Core Revision r0p0 */ /* ToDo: define the correct core features for the MK8000 */ #define __MPU_PRESENT 0 /*!< Set to 1 if MPU is present */ #define __VTOR_PRESENT 0 /*!< Set to 1 if VTOR is present */ #define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */ #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ #define __FPU_PRESENT 0 /*!< Set to 1 if FPU is present */ #define __FPU_DP 0 /*!< Set to 1 if FPU is double precision FPU (default is single precision FPU) */ #define __ICACHE_PRESENT 0 /*!< Set to 1 if I-Cache is present */ #define __DCACHE_PRESENT 0 /*!< Set to 1 if D-Cache is present */ #define __DTCM_PRESENT 0 /*!< Set to 1 if DTCM is present */ #include "core_cm0.h" /*!< Arm Cortex-M0 processor and core peripherals */ #include "system_MK800X.h" /*!< MK8000 System */ /* ======================================== Start of section using anonymous unions ======================================== */ #if defined(__CC_ARM) #pragma push #pragma anon_unions #elif defined(__ICCARM__) #pragma language = extended #elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wc11-extensions" #pragma clang diagnostic ignored "-Wreserved-id-macro" #elif defined(__GNUC__) /* anonymous unions are enabled by default */ #elif defined(__TMS470__) /* anonymous unions are enabled by default */ #elif defined(__TASKING__) #pragma warning 586 #elif defined(__CSMC__) /* anonymous unions are enabled by default */ #else #warning Not supported compiler type #endif /* =========================================================================================================================== */ /* ================ Device Specific Peripheral Section ================ */ /* =========================================================================================================================== */ /* =========================================================================================================================== */ /* ================ SYSCON ================ */ /* =========================================================================================================================== */ /** * @brief SYSCON */ typedef struct { __IM uint32_t LOT_ID_0; /*!< (0x000) 32LSB of LOT ID */ __IM uint32_t LOT_ID_1; /*!< (0x004) 32MSB of LOT ID */ __IM uint32_t LOT_WAF_AXIS; /*!< (0x008) Axis of die on the wafer */ __IM uint32_t CHIP_ID; /*!< (0x00C) Chip ID */ __IOM uint32_t DEV_ADDR_LSB; /*!< (0x010) Device address 32 LSB */ __IOM uint32_t DEV_ADDR_MSB; /*!< (0x014) Device address 32 MSB */ __IOM uint32_t SYSTEM_STATUS; /*!< (0x018) System top level and radio status program and read back register */ __IOM uint32_t SYS_RMU; /*!< (0x01C) Reset Control */ __IOM uint32_t SYS_CMU; /*!< (0x020) Clock Control */ __IOM uint32_t CLK_DIV; /*!< (0x024) APB Clock Divider */ __IOM uint32_t SYS_CTRL; /*!< (0x028) Sleep and wakeup control */ __IOM uint32_t PMU_CTRL0; /*!< (0x02C) Register controlled power down signal in test mode */ __IOM uint32_t PMU_CTRL1; /*!< (0x030) Register controlled power down signal in sleep mode */ __IOM uint32_t PIN_MUX_0; /*!< (0x034) PIN MUX for GPIO00 ~ GPIO07 */ __IOM uint32_t PIN_MUX_1; /*!< (0x038) PIN MUX for GPIO09 ~ GPIO15 */ __IOM uint32_t PIN_MUX_2; /*!< (0x03C) PIN MUX for GPIO16 ~ GPIO18 */ __IOM uint32_t WAKEUP_EN; /*!< (0x040) Wakeup enable */ __IOM uint32_t WAKEUP_POL; /*!< (0x044) Wakeup IO Polarity Configuration */ __IOM uint32_t XTAL_CFG; /*!< (0x048) 38.4MHz XTAL Configuration */ __IOM uint32_t XTAL32_CFG; /*!< (0x04C) 32K XTAL Configuration */ __IOM uint32_t CAP_DIV_CFG; /*!< (0x050) Sleep Cap Divider Configuration */ __IOM uint32_t ACMP_CFG; /*!< (0x054) Analog Comparator Configuration */ __IOM uint32_t BOD_BOR; /*!< (0x058) Brown Out Detection */ __IOM uint32_t RESET_CAUSE; /*!< (0x05C) Reset cause */ __IOM uint32_t MEM_CFG; /*!< (0x060) Memory configuration */ __IOM uint32_t SYS_TICK_CTRL; /*!< (0x064) System Tick Control */ __IOM uint32_t SHELF_KEY; /*!< (0x068) Shelf Key */ __IOM uint32_t MEM_PG_CTRL; /*!< (0x06C) SRAM Power Gating Control Register */ uint32_t RESERVED0[36]; __IOM uint32_t IO_OD; /*!< (0x100) Register controlled IO output open drain */ __IOM uint32_t IO_DRV; /*!< (0x104) Register controlled IO output driven capability */ __IOM uint32_t IO_EI; /*!< (0x108) Register controlled IO input enable */ __IOM uint32_t IO_PDN; /*!< (0x10C) Register controlled IO pull down enable */ __IOM uint32_t IO_PUP[3]; /*!< (0x110) Register controlled IO pull up enable */ __IOM uint32_t IO_SLP_OE; /*!< (0x11C) Register controlled IO output enable in sleep mode */ __IOM uint32_t IO_SLP_OUT; /*!< (0x120) Register controlled IO output value in sleep mode */ __IOM uint32_t IO_SLP_AEN; /*!< (0x124) Register controlled Analog IO switch enable in sleep mode */ __IOM uint32_t IO_SLP_EI; /*!< (0x128) Register controlled IO input enable in sleep mode */ __IOM uint32_t IO_SLP_PDN; /*!< (0x12C) Register controlled IO pull down enable in sleep mode */ __IOM uint32_t IO_SLP_PUP[3]; /*!< (0x130) Register controlled IO pull up enable in sleep mode */ uint32_t RESERVED2[49]; __IOM uint32_t IVREF_ULP; /*!< (0x200) Ultra-low power Bandgap configure */ __IOM uint32_t REG_DIG; /*!< (0x204) Digital regulator configure */ __IOM uint32_t IVREF_CP; /*!< (0x208) IVREF and Charge Pump Configure */ __IOM uint32_t BUCK; /*!< (0x20C) Buck converter configure */ __IOM uint32_t XTAL_0; /*!< (0x210) 38.4MHz XTAL configure */ __IOM uint32_t XTAL_1; /*!< (0x214) 38.4MHz XTAL configure */ __IOM uint32_t XTAL32; /*!< (0x218) 32.768KHz XTAL configure */ __IOM uint32_t RCO; /*!< (0x21C) 32KHz RCO configure */ __IOM uint32_t RO; /*!< (0x220) 48MHz ring oscillator configure */ __IOM uint32_t REFPLL; /*!< (0x224) REFPLL configure */ __IOM uint32_t EFUSE_LDO; /*!< (0x228) EFUSE LDO configure */ __IM uint32_t CLK_STATUS; /*!< (0x22C) Clock status */ __IM uint32_t DUM_AO_HI; /*!< (0x230) Dummy AO Register Reset High */ __IM uint32_t DUM_AO_LO; /*!< (0x234) Dummy AO Register Reset Low */ uint32_t RESERVED3[50]; __IM uint32_t TRIM0_RD_REG; /*!< (0x300) Trim bits for TS */ __IM uint32_t TRIM1_RD_REG; /*!< (0x304) Trim bits for analog */ __IM uint32_t TRIM2_RD_REG; /*!< (0x308) Trim Readout Register for Calibration 1 */ __IM uint32_t TRIM3_RD_REG; /*!< (0x30C) Trim Readout Register for Calibration 2 */ } SYSCON_TypeDef; // SYSTEM_STATUS #define SYSCON_SYSTEM_STATUS_INT_FLASH_POS 17U #define SYSCON_SYSTEM_STATUS_INT_FLASH_MSK (1U << SYSCON_SYSTEM_STATUS_INT_FLASH_POS) #define SYSCON_SYSTEM_STATUS_EFLOAD_STATUS_POS 16U #define SYSCON_SYSTEM_STATUS_EFLOAD_STATUS_MSK (1U << SYSCON_SYSTEM_STATUS_EFLOAD_STATUS_POS) // SYS_CMU #define SYSCON_SYS_CMU_SYS_CLK_SEL_POS 30U #define SYSCON_SYS_CMU_SYS_CLK_SEL_MSK (1U << SYSCON_SYS_CMU_SYS_CLK_SEL_POS) #define SYSCON_SYS_CMU_32K_CLK_SEL_POS 29U #define SYSCON_SYS_CMU_32K_CLK_SEL_MSK (1U << SYSCON_SYS_CMU_32K_CLK_SEL_POS) #define SYSCON_SYS_CMU_HS_CLK_SEL_POS 28U #define SYSCON_SYS_CMU_HS_CLK_SEL_MSK (1U << SYSCON_SYS_CMU_HS_CLK_SEL_POS) // CLK_DIV #define SYSCON_CLK_DIV_UART0_FDIV_POS 0U #define SYSCON_CLK_DIV_UART0_FDIV_MSK (0xffU << SYSCON_CLK_DIV_UART0_FDIV_POS) #define SYSCON_CLK_DIV_UART0_FDIV(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_CLK_DIV_UART0_FDIV_POS)) & SYSCON_CLK_DIV_UART0_FDIV_MSK) #define SYSCON_CLK_DIV_UART1_FDIV_POS 8U #define SYSCON_CLK_DIV_UART1_FDIV_MSK (0xffU << SYSCON_CLK_DIV_UART1_FDIV_POS) #define SYSCON_CLK_DIV_UART1_FDIV(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_CLK_DIV_UART1_FDIV_POS)) & SYSCON_CLK_DIV_UART1_FDIV_MSK) #define SYSCON_CLK_DIV_FLASH_CTRL_DIV_POS 18U #define SYSCON_CLK_DIV_FLASH_CTRL_DIV_MSK (0x3U << SYSCON_CLK_DIV_FLASH_CTRL_DIV_POS) #define SYSCON_CLK_DIV_FLASH_CTRL_DIV(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_CLK_DIV_FLASH_CTRL_DIV_POS)) & SYSCON_CLK_DIV_FLASH_CTRL_DIV_MSK) #define SYSCON_CLK_DIV_PCLK_DIV_POS 26U #define SYSCON_CLK_DIV_PCLK_DIV_MSK (0x3U << SYSCON_CLK_DIV_PCLK_DIV_POS) #define SYSCON_CLK_DIV_PCLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_CLK_DIV_PCLK_DIV_POS)) & SYSCON_CLK_DIV_PCLK_DIV_MSK) #define SYSCON_CLK_DIV_HCLK_DIV_POS 28U #define SYSCON_CLK_DIV_HCLK_DIV_MSK (0x3U << SYSCON_CLK_DIV_HCLK_DIV_POS) #define SYSCON_CLK_DIV_HCLK_DIV(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_CLK_DIV_HCLK_DIV_POS)) & SYSCON_CLK_DIV_HCLK_DIV_MSK) #define SYSCON_CLK_DIV_WDT_CLK_SEL_POS 30U #define SYSCON_CLK_DIV_WDT_CLK_SEL_MSK (1U << SYSCON_CLK_DIV_WDT_CLK_SEL_POS) // SYS_CTRL #define SYSCON_SYS_CTRL_REMAP_POS 0U #define SYSCON_SYS_CTRL_REMAP_MSK (0x3U << SYSCON_SYS_CTRL_REMAP_POS) #define SYSCON_SYS_CTRL_REMAP(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_SYS_CTRL_REMAP_POS)) & SYSCON_SYS_CTRL_REMAP_MSK) // PIN_MUX_x #define SYSCON_PIN_MUX_FUNC_MSK (0xFU) // WAKEUP_EN #define SYSCON_WAKEUP_EN_IO_POS 0U #define SYSCON_WAKEUP_EN_IO_MSK (0x3ffffU << SYSCON_WAKEUP_EN_IO_POS) #define SYSCON_WAKEUP_EN_IO(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_WAKEUP_EN_IO_POS)) & SYSCON_WAKEUP_EN_IO_MSK) #define SYSCON_WAKEUP_EN_ACMP0_POS 24U #define SYSCON_WAKEUP_EN_ACMP0_MSK (0x1U << SYSCON_WAKEUP_EN_ACMP0_POS) #define SYSCON_WAKEUP_EN_ACMP1_POS 25U #define SYSCON_WAKEUP_EN_ACMP1_MSK (0x1U << SYSCON_WAKEUP_EN_ACMP1_POS) #define SYSCON_WAKEUP_EN_SLTIMER_POS 26U #define SYSCON_WAKEUP_EN_SLTIMER_MSK (0x1U << SYSCON_WAKEUP_EN_SLTIMER_POS) #define SYSCON_WAKEUP_EN_RTC_ALARM_POS 27U #define SYSCON_WAKEUP_EN_RTC_ALARM_MSK (0x1U << SYSCON_WAKEUP_EN_RTC_ALARM_POS) #define SYSCON_WAKEUP_EN_RTC_TICK_POS 28U #define SYSCON_WAKEUP_EN_RTC_TICK_MSK (0x1U << SYSCON_WAKEUP_EN_RTC_TICK_POS) #define SYSCON_WAKEUP_EN_POS 31U #define SYSCON_WAKEUP_EN_MSK (0x1U << SYSCON_WAKEUP_EN_POS) // XTAL_CFG #define SYSCON_XTAL_CFG_XTAL_INJ_POS 16U #define SYSCON_XTAL_CFG_XTAL_INJ_MSK (0x3U << SYSCON_XTAL_CFG_XTAL_INJ_POS) #define SYSCON_XTAL_CFG_XTAL_INJ(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_XTAL_CFG_XTAL_INJ_POS)) & SYSCON_XTAL_CFG_XTAL_INJ_MSK) #define SYSCON_XTAL_CFG_XTAL_CSEL_POS 0U #define SYSCON_XTAL_CFG_XTAL_CSEL_MSK (0x7FU << SYSCON_XTAL_CFG_XTAL_CSEL_POS) #define SYSCON_XTAL_CFG_XTAL_CSEL(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_XTAL_CFG_XTAL_CSEL_POS)) & SYSCON_XTAL_CFG_XTAL_CSEL_MSK) // XTAL32_CFG #define SYSCON_XTAL32_CFG_X32_INJ_POS 16U #define SYSCON_XTAL32_CFG_X32_INJ_MSK (0x3U << SYSCON_XTAL32_CFG_X32_INJ_POS) #define SYSCON_XTAL32_CFG_X32_INJ(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_XTAL32_CFG_X32_INJ_POS)) & SYSCON_XTAL32_CFG_X32_INJ_MSK) #define SYSCON_XTAL32_CFG_X32_ICTRL_POS 8U #define SYSCON_XTAL32_CFG_X32_ICTRL_MSK (0x3FU << SYSCON_XTAL32_CFG_X32_ICTRL_POS) #define SYSCON_XTAL32_CFG_X32_ICTRL(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_XTAL32_CFG_X32_ICTRL_POS)) & SYSCON_XTAL32_CFG_X32_ICTRL_MSK) #define SYSCON_XTAL32_CFG_XTAL_CSEL_POS 0U #define SYSCON_XTAL32_CFG_XTAL_CSEL_MSK (0x7FU << SYSCON_XTAL32_CFG_XTAL_CSEL_POS) #define SYSCON_XTAL32_CFG_XTAL_CSEL(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_XTAL32_CFG_XTAL_CSEL_POS)) & SYSCON_XTAL32_CFG_XTAL_CSEL_MSK) // RESET_CAUSE #define SYSCON_RESET_CAUSE_POR_POS 0U #define SYSCON_RESET_CAUSE_POR_MSK (0x1U << SYSCON_RESET_CAUSE_POR_POS) #define SYSCON_RESET_CAUSE_BOR_POS 1U #define SYSCON_RESET_CAUSE_BOR_MSK (0x1U << SYSCON_RESET_CAUSE_BOR_POS) #define SYSCON_RESET_CAUSE_PIN_POS 2U #define SYSCON_RESET_CAUSE_PIN_MSK (0x1U << SYSCON_RESET_CAUSE_PIN_POS) #define SYSCON_RESET_CAUSE_WDT_POS 3U #define SYSCON_RESET_CAUSE_WDT_MSK (0x1U << SYSCON_RESET_CAUSE_WDT_POS) #define SYSCON_RESET_CAUSE_LOCKUP_POS 4U #define SYSCON_RESET_CAUSE_LOCKUP_MSK (0x1U << SYSCON_RESET_CAUSE_LOCKUP_POS) #define SYSCON_RESET_CAUSE_REBOOT_POS 5U #define SYSCON_RESET_CAUSE_REBOOT_MSK (0x1U << SYSCON_RESET_CAUSE_REBOOT_POS) #define SYSCON_RESET_CAUSE_SYSREQ_POS 6U #define SYSCON_RESET_CAUSE_SYSREQ_MSK (0x1U << SYSCON_RESET_CAUSE_SYSREQ_POS) #define SYSCON_RESET_CAUSE_DVDD_POS 7U #define SYSCON_RESET_CAUSE_DVDD_MSK (0x1U << SYSCON_RESET_CAUSE_DVDD_POS) #define SYSCON_RESET_CAUSE_CLR_POS 31U #define SYSCON_RESET_CAUSE_CLR_MSK (0x1U << SYSCON_RESET_CAUSE_CLR_POS) // ACMP_CFG #define SYSCON_ACMP_CFG_ACMP0_EN_POS 0U #define SYSCON_ACMP_CFG_ACMP0_EN_MSK (1U << SYSCON_ACMP_CFG_ACMP0_EN_POS) #define SYSCON_ACMP_CFG_ACMP0_MUX_SP_POS 1U #define SYSCON_ACMP_CFG_ACMP0_MUX_SP_MSK (0x7U << SYSCON_ACMP_CFG_ACMP0_MUX_SP_POS) #define SYSCON_ACMP_CFG_ACMP0_MUX_SP(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_ACMP_CFG_ACMP0_MUX_SP_POS)) & SYSCON_ACMP_CFG_ACMP0_MUX_SP_MSK) #define SYSCON_ACMP_CFG_ACMP0_MUX_SN_POS 4U #define SYSCON_ACMP_CFG_ACMP0_MUX_SN_MSK (0x7U << SYSCON_ACMP_CFG_ACMP0_MUX_SN_POS) #define SYSCON_ACMP_CFG_ACMP0_MUX_SN(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_ACMP_CFG_ACMP0_MUX_SN_POS)) & SYSCON_ACMP_CFG_ACMP0_MUX_SN_MSK) #define SYSCON_ACMP_CFG_ACMP0_HYST_EN_POS 7U #define SYSCON_ACMP_CFG_ACMP0_HYST_EN_MSK (1U << SYSCON_ACMP_CFG_ACMP0_HYST_EN_POS) #define SYSCON_ACMP_CFG_ACMP0_HYST_EN(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_ACMP_CFG_ACMP0_HYST_EN_POS)) & SYSCON_ACMP_CFG_ACMP0_HYST_EN_MSK) #define SYSCON_ACMP_CFG_ACMP0_EDGE_INT_POS 8U #define SYSCON_ACMP_CFG_ACMP0_EDGE_INT_MSK (0x3U << SYSCON_ACMP_CFG_ACMP0_EDGE_INT_POS) #define SYSCON_ACMP_CFG_ACMP0_EDGE_INT_SET(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_ACMP_CFG_ACMP0_EDGE_INT_POS)) & SYSCON_ACMP_CFG_ACMP0_EDGE_INT_MSK) #define SYSCON_ACMP_CFG_ACMP0_OUT_POS 10U #define SYSCON_ACMP_CFG_ACMP0_OUT_MSK (1U << SYSCON_ACMP_CFG_ACMP0_OUT_POS) #define SYSCON_ACMP_CFG_ACMP0_GET_DATA(x) (((uint32_t)(((uint32_t)(x)) & SYSCON_ACMP_CFG_ACMP0_OUT_MSK)) >> SYSCON_ACMP_CFG_ACMP0_OUT_POS) #define SYSCON_ACMP_CFG_ACMP1_EN_POS 16U #define SYSCON_ACMP_CFG_ACMP1_EN_MSK (1U << SYSCON_ACMP_CFG_ACMP1_EN_POS) #define SYSCON_ACMP_CFG_ACMP1_MUX_SP_POS 17U #define SYSCON_ACMP_CFG_ACMP1_MUX_SP_MSK (0x7U << SYSCON_ACMP_CFG_ACMP1_MUX_SP_POS) #define SYSCON_ACMP_CFG_ACMP1_MUX_SP(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_ACMP_CFG_ACMP1_MUX_SP_POS)) & SYSCON_ACMP_CFG_ACMP1_MUX_SP_MSK) #define SYSCON_ACMP_CFG_ACMP1_MUX_SN_POS 20U #define SYSCON_ACMP_CFG_ACMP1_MUX_SN_MSK (0x7U << SYSCON_ACMP_CFG_ACMP1_MUX_SN_POS) #define SYSCON_ACMP_CFG_ACMP1_MUX_SN(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_ACMP_CFG_ACMP1_MUX_SN_POS)) & SYSCON_ACMP_CFG_ACMP1_MUX_SN_MSK) #define SYSCON_ACMP_CFG_ACMP1_HYST_EN_POS 23U #define SYSCON_ACMP_CFG_ACMP1_HYST_EN_MSK (1U << SYSCON_ACMP_CFG_ACMP1_HYST_EN_POS) #define SYSCON_ACMP_CFG_ACMP1_HYST_EN(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_ACMP_CFG_ACMP1_HYST_EN_POS)) & SYSCON_ACMP_CFG_ACMP1_HYST_EN_MSK) #define SYSCON_ACMP_CFG_ACMP1_EDGE_INT_POS 24U #define SYSCON_ACMP_CFG_ACMP1_EDGE_INT_MSK (0x3U << SYSCON_ACMP_CFG_ACMP1_EDGE_INT_POS) #define SYSCON_ACMP_CFG_ACMP1_EDGE_INT_SET(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_ACMP_CFG_ACMP1_EDGE_INT_POS)) & SYSCON_ACMP_CFG_ACMP1_EDGE_INT_MSK) #define SYSCON_ACMP_CFG_ACMP1_OUT_POS 26U #define SYSCON_ACMP_CFG_ACMP1_OUT_MSK (1U << SYSCON_ACMP_CFG_ACMP1_OUT_POS) #define SYSCON_ACMP_CFG_ACMP1_GET_DATA(x) (((uint32_t)(((uint32_t)(x)) & SYSCON_ACMP_CFG_ACMP1_OUT_MSK)) >> SYSCON_ACMP_CFG_ACMP1_OUT_POS) // BOD_BOR #define SYSCON_BOR_EN_POS 0U #define SYSCON_BOR_EN_MSK (1U << SYSCON_BOR_EN_POS) #define SYSCON_BOR_TH_SEL_POS 1U #define SYSCON_BOR_TH_SEL_MSK (0x7U << SYSCON_BOR_TH_SEL_POS) #define SYSCON_BOR_TH_SEL(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_BOR_TH_SEL_POS)) & SYSCON_BOR_TH_SEL_MSK) #define SYSCON_BOR_HYST_SEL_POS 4U #define SYSCON_BOR_HYST_SEL_MSK (0x3U << SYSCON_BOR_HYST_SEL_POS) #define SYSCON_BOR_HYST_SEL(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_BOR_HYST_SEL_POS)) & SYSCON_BOR_HYST_SEL_MSK) #define SYSCON_BOD_EN_POS 16U #define SYSCON_BOD_EN_MSK (1U << SYSCON_BOD_EN_POS) #define SYSCON_BOD_TH_SEL_POS 17U #define SYSCON_BOD_TH_SEL_MSK (0x7U << SYSCON_BOD_TH_SEL_POS) #define SYSCON_BOD_TH_SEL(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_BOD_TH_SEL_POS)) & SYSCON_BOD_TH_SEL_MSK) #define SYSCON_BOD_HYST_SEL_POS 20U #define SYSCON_BOD_HYST_SEL_MSK (0x3U << SYSCON_BOD_HYST_SEL_POS) #define SYSCON_BOD_HYST_SEL(x) (((uint32_t)(((uint32_t)(x)) << SYSCON_BOD_HYST_SEL_POS)) & SYSCON_BOD_HYST_SEL_MSK) // CLK_STATUS #define SYSCON_CLK_STATUS_XTAL_38P4M_REDAY_POS 0U #define SYSCON_CLK_STATUS_XTAL_38P4M_REDAY_MSK (1U << SYSCON_CLK_STATUS_XTAL_38P4M_REDAY_POS) #define SYSCON_CLK_STATUS_XTAL_32K_REDAY_POS 1U #define SYSCON_CLK_STATUS_XTAL_32K_REDAY_MSK (1U << SYSCON_CLK_STATUS_XTAL_32K_REDAY_POS) #define SYSCON_CLK_STATUS_RCO_32K_REDAY_POS 2U #define SYSCON_CLK_STATUS_RCO_32K_REDAY_MSK (1U << SYSCON_CLK_STATUS_RCO_32K_REDAY_POS) #define SYSCON_CLK_STATUS_RO_48M_REDAY_POS 3U #define SYSCON_CLK_STATUS_RO_48M_REDAY_MSK (1U << SYSCON_CLK_STATUS_RO_48M_REDAY_POS) #define SYSCON_CLK_STATUS_REFPLL_REDAY_POS 6U #define SYSCON_CLK_STATUS_REFPLL_REDAY_MSK (1U << SYSCON_CLK_STATUS_REFPLL_REDAY_POS) // TRIM0_RD_REG #define SYSCON_TRIM0_RD_REG_FLASH_RISECLK_POS 28U #define SYSCON_TRIM0_RD_REG_FLASH_RISECLK_MSK (1U << SYSCON_TRIM0_RD_REG_FLASH_RISECLK_POS) #define SYSCON_TRIM0_RD_REG_FLASH_FBCLK_POS 29U #define SYSCON_TRIM0_RD_REG_FLASH_FBCLK_MSK (1U << SYSCON_TRIM0_RD_REG_FLASH_FBCLK_POS) #define SYSCON_TRIM0_RD_REG_FLASH_MODE3_POS 30U #define SYSCON_TRIM0_RD_REG_FLASH_MODE3_MSK (1U << SYSCON_TRIM0_RD_REG_FLASH_MODE3_POS) #define SYSCON_TRIM0_RD_REG_FLASH_CLKDIV_POS 31U #define SYSCON_TRIM0_RD_REG_FLASH_CLKDIV_MSK (1U << SYSCON_TRIM0_RD_REG_FLASH_CLKDIV_POS) /* =========================================================================================================================== */ /* ================ GPIO ================ */ /* =========================================================================================================================== */ /** * @brief GPIO */ typedef struct { __IM uint32_t DATA; /*!< (0x00) GPIO value register */ __IOM uint32_t DATAOUT; /*!< (0x04) GPIO output status register */ uint32_t RESERVED0[2]; __IOM uint32_t OUTENSET; /*!< (0x10) GPIO output enable set register */ __IOM uint32_t OUTENCLR; /*!< (0x14) GPIO output clear register */ uint32_t RESERVED1[2]; __OM uint32_t INTENSET; /*!< (0x20) GPIO interrupt enable set register */ __IOM uint32_t INTENCLR; /*!< (0x24) GPIO interrupt enable clear register */ __OM uint32_t INTTYPESET; /*!< (0x28) GPIO interrupt type set register */ __IOM uint32_t INTTYPECLR; /*!< (0x2C) GPIO interrupt type set register */ __OM uint32_t INTPOLSET; /*!< (0x30) GPIO interrupt polarity set register */ __IOM uint32_t INTPOLCLR; /*!< (0x34) GPIO interrupt polarity clear register */ __IOM uint32_t INTSTATUS; /*!< (0x38) GPIO interrupt status register */ } GPIO_TypeDef; // DATA #define GPIO_DATA_DATA_MSK (0x0003FFFFU) #define GPIO_DATA_DATA_POS (0U) // DATAOUT #define GPIO_DATAOUT_DATAOUT_MSK (0x0003FFFFU) #define GPIO_DATAOUT_DATAOUT_POS (0U) // OUTENSET #define GPIO_OUTENSET_OUTENSET_MSK (0x0003FFFFU) #define GPIO_OUTENSET_OUTENSET_POS (0U) // OUTENCLR #define GPIO_OUTENCLR_OUTENCLR_MSK (0x0003FFFFU) #define GPIO_OUTENCLR_OUTENCLR_POS (0U) // INTENSET #define GPIO_INTENSET_INTENSET_MSK (0x0003FFFFU) #define GPIO_INTENSET_INTENSET_POS (0U) // INTENCLR #define GPIO_INTENCLR_INTENCLR_MSK (0x0003FFFFU) #define GPIO_INTENCLR_INTENCLR_POS (0U) // INTTYPESET #define GPIO_INTTYPESET_INTTYPESET_MSK (0x0003FFFFU) #define GPIO_INTTYPESET_INTTYPESET_POS (0U) // INTTYPECLR #define GPIO_INTTYPECLR_INTTYPECLR_MSK (0x0003FFFFU) #define GPIO_INTTYPECLR_INTTYPECLR_POS (0U) // INTPOLSET #define GPIO_INTPOLSET_INTPOLSET_MSK (0x0003FFFFU) #define GPIO_INTPOLSET_INTPOLSET_POS (0U) // INTPOLCLR #define GPIO_INTPOLCLR_INTPOLCLR_MSK (0x0003FFFFU) #define GPIO_INTPOLCLR_INTPOLCLR_POS (0U) // INTSTATUS #define GPIO_INTSTATUS_INTSTATUS_MSK (0x0003FFFFU) #define GPIO_INTSTATUS_INTSTATUS_POS (0U) /* =========================================================================================================================== */ /* ================ UART ================ */ /* =========================================================================================================================== */ /** * @brief UART */ typedef struct { __OM uint32_t TX_DATA; /*!< (0x00) UART TX Data Register */ __IM uint32_t RX_DATA; /*!< (0x04) UART RX Data Register */ __OM uint32_t CTRL0; /*!< (0x08) UART Control Register 0 */ __IOM uint32_t CTRL1; /*!< (0x0C) UART Control Register 1 */ __IOM uint32_t CTRL2; /*!< (0x10) UART Control Register 2 */ __IM uint32_t STATUS; /*!< (0x14) UART Status Register */ __IOM uint32_t INTR_EN; /*!< (0x18) UART Interrupt Enable Register */ __IM uint32_t INTR_STATUS; /*!< (0x1C) UART Interrupt Status Register */ __OM uint32_t INTR_CLR; /*!< (0x20) UART Interrupt Clear Register */ __IM uint32_t TX_FL; /*!< (0x24) UART TX FIFO level */ __IM uint32_t RX_FL; /*!< (0x28) UART RX FIFO level */ __IOM uint32_t DIVISOR; /*!< (0x2C) UART Divisor Latch Register */ } UART_TypeDef; // CTRL0 #define UART_CTRL0_RX_TRIGGER_POS 6U #define UART_CTRL0_RX_TRIGGER_MSK (3U << UART_CTRL0_RX_TRIGGER_POS) // receiver trigger #define UART_CTRL0_RX_TRIGGER(x) (((uint32_t)(((uint32_t)(x)) << UART_CTRL0_RX_TRIGGER_POS)) & UART_CTRL0_RX_TRIGGER_MSK) #define UART_CTRL0_TX_TRIGGER_POS 4U #define UART_CTRL0_TX_TRIGGER_MSK (3U << UART_CTRL0_TX_TRIGGER_POS) // transmitter trigger #define UART_CTRL0_TX_TRIGGER(x) (((uint32_t)(((uint32_t)(x)) << UART_CTRL0_TX_TRIGGER_POS)) & UART_CTRL0_TX_TRIGGER_MSK) #define UART_CTRL0_DMA_MODE_POS 3U #define UART_CTRL0_DMA_MODE_MSK (1U << UART_CTRL0_DMA_MODE_POS) // dma mode #define UART_CTRL0_DMA_MODE(x) (((uint32_t)(((uint32_t)(x)) << UART_CTRL0_DMA_MODE_POS)) & UART_CTRL0_DMA_MODE_MSK) #define UART_CTRL0_TX_FIFO_RESET_POS 2U #define UART_CTRL0_TX_FIFO_RESET_MSK (1U << UART_CTRL0_TX_FIFO_RESET_POS) // transmitter FIFO reset #define UART_CTRL0_RX_FIFO_RESET_POS 1U #define UART_CTRL0_RX_FIFO_RESET_MSK (1U << UART_CTRL0_RX_FIFO_RESET_POS) // receiver FIFO reset #define UART_CTRL0_FIFO_ENABLE_POS 0U #define UART_CTRL0_FIFO_ENABLE_MSK (1U << UART_CTRL0_FIFO_ENABLE_POS) // FIFO enable // CTRL1 #define UART_CTRL1_DLAB_POS 7U #define UART_CTRL1_DLAB_MSK (1U << UART_CTRL1_DLAB_POS) // divisor latch address bit #define UART_CTRL1_BREAK_POS 6U #define UART_CTRL1_BREAK_MSK (1U << UART_CTRL1_BREAK_POS) // line break #define UART_CTRL1_STICK_PARITY_POS 5U #define UART_CTRL1_STICK_PARITY_MSK (1U << UART_CTRL1_STICK_PARITY_POS) // unsupported #define UART_CTRL1_EVEN_PARITY_POS 4U #define UART_CTRL1_EVEN_PARITY_MSK (1U << UART_CTRL1_EVEN_PARITY_POS) // parity select #define UART_CTRL1_PARITY_EN_POS 3U #define UART_CTRL1_PARITY_EN_MSK (1U << UART_CTRL1_PARITY_EN_POS) // parity enable #define UART_CTRL1_STOP_POS 2U #define UART_CTRL1_STOP_MSK (1U << UART_CTRL1_STOP_POS) // stop bits #define UART_CTRL1_DATA_LEN_POS 0U #define UART_CTRL1_DATA_LEN_MSK (3U << UART_CTRL1_DATA_LEN_POS) // number of bits per character // CTRL2 #define UART_CTRL2_FLOW_CTRL_EN_POS 5U // automatic flow control #define UART_CTRL2_FLOW_CTRL_EN_MSK (1U << UART_CTRL2_FLOW_CTRL_EN_POS) #define UART_CTRL2_RTS_POS 1U // rts #define UART_CTRL2_RTS_MSK (1U << UART_CTRL2_RTS_POS) #define UART_CTRL2_DTR_POS 0U // dtr #define UART_CTRL2_DTR_MSK (1U << UART_CTRL2_DTR_POS) // STATUS #define UART_STATUS_RFE_POS 15U // receiver FIFO error #define UART_STATUS_RFE_MSK (1U << UART_STATUS_RFE_POS) #define UART_STATUS_TEMT_POS 14U // transmitter empty #define UART_STATUS_TEMT_MSK (1U << UART_STATUS_TEMT_POS) #define UART_STATUS_THRE_POS 13U // transmitter holding register empty #define UART_STATUS_THRE_MSK (1U << UART_STATUS_THRE_POS) #define UART_STATUS_BI_POS 12U // break interrupt #define UART_STATUS_BI_MSK (1U << UART_STATUS_BI_POS) #define UART_STATUS_FE_POS 11U // framing error #define UART_STATUS_FE_MSK (1U << UART_STATUS_FE_POS) #define UART_STATUS_PE_POS 10U // parity error #define UART_STATUS_PE_MSK (1U << UART_STATUS_PE_POS) #define UART_STATUS_OE_POS 9U // overrun error #define UART_STATUS_OE_MSK (1U << UART_STATUS_OE_POS) #define UART_STATUS_DR_POS 8U // data ready #define UART_STATUS_DR_MSK (1U << UART_STATUS_DR_POS) #define UART_STATUS_RFF_POS 4U // Rx FIFO full #define UART_STATUS_RFF_MSK (1U << UART_STATUS_RFF_POS) #define UART_STATUS_RFNE_POS 3U // Rx FIFO not empty #define UART_STATUS_RFNE_MSK (1U << UART_STATUS_RFNE_POS) #define UART_STATUS_TFE_POS 2U // Tx FIFO empty #define UART_STATUS_TFE_MSK (1U << UART_STATUS_TFE_POS) #define UART_STATUS_TFNF_POS 1U // Tx FIFO not full #define UART_STATUS_TFNF_MSK (1U << UART_STATUS_TFNF_POS) #define UART_STATUS_BUSY_POS 0U // serial transfer is in progress #define UART_STATUS_BUSY_MSK (1U << UART_STATUS_BUSY_POS) #define UART_STATUS_ERROR_MSK (UART_STATUS_OE_MSK | UART_STATUS_PE_MSK | UART_STATUS_FE_MSK | UART_STATUS_BI_MSK | UART_STATUS_RFE_MSK) // INTR_EN #define UART_INTR_EN_PTIME_POS 7U // programmable THRE interrupt mode #define UART_INTR_EN_PTIME_MSK (1U << UART_INTR_EN_PTIME_POS) #define UART_INTR_EN_ELCOLR_POS 4U // OE,PE,FE,BI interrupt cleared by W1C only #define UART_INTR_EN_ELCOLR_MSK (1U << UART_INTR_EN_ELCOLR_POS) #define UART_INTR_EN_EDSSI_POS 3U // modem status #define UART_INTR_EN_EDSSI_MSK (1U << UART_INTR_EN_EDSSI_POS) #define UART_INTR_EN_ELSI_POS 2U // receiver line status #define UART_INTR_EN_ELSI_MSK (1U << UART_INTR_EN_ELSI_POS) #define UART_INTR_EN_ETBEI_POS 1U // transmitter holding register #define UART_INTR_EN_ETBEI_MSK (1U << UART_INTR_EN_ETBEI_POS) #define UART_INTR_EN_ERBFI_POS 0U // received data available #define UART_INTR_EN_ERBFI_MSK (1U << UART_INTR_EN_ERBFI_POS) #define UART_INTR_EN_ALL_MSK (UART_INTR_EN_ELCOLR_MSK | UART_INTR_EN_EDSSI_MSK | UART_INTR_EN_ELSI_MSK | UART_INTR_EN_ETBEI_MSK | UART_INTR_EN_ERBFI_MSK) // INTR_CLR #define UART_INTR_CLR_THRE_INT_CLR_POS 3U #define UART_INTR_CLR_THRE_INT_CLR_MSK (1U << UART_INTR_CLR_THRE_INT_CLR_POS) #define UART_INTR_CLR_BUSY_INT_CLR_POS 2U #define UART_INTR_CLR_BUSY_INT_CLR_MSK (1U << UART_INTR_CLR_BUSY_INT_CLR_POS) #define UART_INTR_CLR_LSR_INT_CLR_POS 1U #define UART_INTR_CLR_LSR_INT_CLR_MSK (1U << UART_INTR_CLR_LSR_INT_CLR_POS) #define UART_INTR_CLR_MSR_INT_CLR_POS 0U #define UART_INTR_CLR_MSR_INT_CLR_MSK (1U << UART_INTR_CLR_MSR_INT_CLR_POS) // TX_FL #define UART_TX_FL_LEVEL_POS 0U // Tx FIFO data level #define UART_TX_FL_LEVEL_MSK (0xffU << UART_TX_FL_LEVEL_POS) // RX_FL #define UART_RX_FL_LEVEL_POS 0U // Rx FIFO data level #define UART_RX_FL_LEVEL_MSK (0xffU << UART_RX_FL_LEVEL_POS) // DIVISOR #define UART_DIVISOR_H_POS 8U #define UART_DIVISOR_H_MSK (0xffU << UART_DIVISOR_H_POS) #define UART_DIVISOR_H(x) (((uint32_t)(((uint32_t)(x)) << UART_DIVISOR_H_POS)) & UART_DIVISOR_H_MSK) #define UART_DIVISOR_L_POS 0U #define UART_DIVISOR_L_MSK (0xffU << UART_DIVISOR_L_POS) /* =========================================================================================================================== */ /* ================ SPI ================ */ /* =========================================================================================================================== */ /** * @brief SPI */ typedef struct { __IOM uint32_t CTRL0; /*!< (0x00) SPI Control register 0 */ __IOM uint32_t CTRL1; /*!< (0x04) SPI Control register 1 */ __IOM uint32_t DATA; /*!< (0x08) SPI Data register */ __IM uint32_t STATUS0; /*!< (0x0C) SPI Status register */ __IOM uint32_t PRESCALER; /*!< (0x10) SPI Clock prescaler register */ __IOM uint32_t INTR_EN; /*!< (0x14) SPI Interrupt mask set or clear register */ __IM uint32_t STATUS1; /*!< (0x18) SPI Raw interrupt status register */ __IM uint32_t INTR_STATUS; /*!< (0x1C) SPI Masked interrupt status register */ __OM uint32_t INTR_CLR; /*!< (0x20) SPI Interrupt clear register */ __IOM uint32_t DMA_EN; /*!< (0x24) SPI DMA control register */ } SPI_TypeDef; // CTRL0 #define SPI_CTRL0_DSS_POS 0U #define SPI_CTRL0_DSS_MSK (0xfU << SPI_CTRL0_DSS_POS) #define SPI_CTRL0_DSS(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTRL0_DSS_POS)) & SPI_CTRL0_DSS_MSK) #define SPI_CTRL0_FRF_POS 4U #define SPI_CTRL0_FRF_MSK (0x3U << SPI_CTRL0_FRF_POS) #define SPI_CTRL0_FRF(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTRL0_FRF_POS)) & SPI_CTRL0_FRF_MSK) #define SPI_CTRL0_SPO_POS 6U #define SPI_CTRL0_SPO_MSK (1U << SPI_CTRL0_SPO_POS) #define SPI_CTRL0_SPH_POS 7U #define SPI_CTRL0_SPH_MSK (1U << SPI_CTRL0_SPH_POS) #define SPI_CTRL0_SCR_POS 8U #define SPI_CTRL0_SCR_MSK (0xffU << SPI_CTRL0_SCR_POS) #define SPI_CTRL0_SCR(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTRL0_SCR_POS)) & SPI_CTRL0_SCR_MSK) // CTRL1 #define SPI_CTRL1_LBM_POS 0U #define SPI_CTRL1_LBM_MSK (1U << SPI_CTRL1_LBM_POS) #define SPI_CTRL1_SSE_POS 1U #define SPI_CTRL1_SSE_MSK (1U << SPI_CTRL1_SSE_POS) #define SPI_CTRL1_MS_POS 2U #define SPI_CTRL1_MS_MSK (1U << SPI_CTRL1_MS_POS) #define SPI_CTRL1_SOD_POS 3U #define SPI_CTRL1_SOD_MSK (1U << SPI_CTRL1_SOD_POS) // STATUS0 #define SPI_STATUS0_TFE_POS 0U #define SPI_STATUS0_TFE_MSK (1U << SPI_STATUS0_TFE_POS) #define SPI_STATUS0_TNF_POS 1U #define SPI_STATUS0_TNF_MSK (1U << SPI_STATUS0_TNF_POS) #define SPI_STATUS0_RNE_POS 2U #define SPI_STATUS0_RNE_MSK (1U << SPI_STATUS0_RNE_POS) #define SPI_STATUS0_RFF_POS 3U #define SPI_STATUS0_RFF_MSK (1U << SPI_STATUS0_RFF_POS) #define SPI_STATUS0_BSY_POS 4U #define SPI_STATUS0_BSY_MSK (1U << SPI_STATUS0_BSY_POS) // PRESCALER #define SPI_PRESCALER_POS 0U #define SPI_PRESCALER_MSK (0xffU << SPI_PRESCALER_POS) #define SPI_PRESCALER(x) (((uint32_t)(((uint32_t)(x)) << SPI_PRESCALER_POS)) & SPI_PRESCALER_MSK) // INTR_EN #define SPI_INTR_EN_ROR_POS 0U #define SPI_INTR_EN_ROR_MSK (1U << SPI_INTR_EN_ROR_POS) #define SPI_INTR_EN_RT_POS 1U #define SPI_INTR_EN_RT_MSK (1U << SPI_INTR_EN_RT_POS) #define SPI_INTR_EN_RX_POS 2U #define SPI_INTR_EN_RX_MSK (1U << SPI_INTR_EN_RX_POS) #define SPI_INTR_EN_TX_POS 3U #define SPI_INTR_EN_TX_MSK (1U << SPI_INTR_EN_TX_POS) // INTR_STATUS #define SPI_INTR_STATUS_ROR_POS 0U #define SPI_INTR_STATUS_ROR_MSK (1U << SPI_INTR_STATUS_ROR_POS) #define SPI_INTR_STATUS_RT_POS 1U #define SPI_INTR_STATUS_RT_MSK (1U << SPI_INTR_STATUS_RT_POS) #define SPI_INTR_STATUS_RX_POS 2U #define SPI_INTR_STATUS_RX_MSK (1U << SPI_INTR_STATUS_RX_POS) #define SPI_INTR_STATUS_TX_POS 3U #define SPI_INTR_STATUS_TX_MSK (1U << SPI_INTR_STATUS_TX_POS) // INTR_CLR #define SPI_INTR_CLR_ROR_POS 0U #define SPI_INTR_CLR_ROR_MSK (1U << SPI_INTR_CLR_ROR_POS) #define SPI_INTR_CLR_RT_POS 1U #define SPI_INTR_CLR_RT_MSK (1U << SPI_INTR_CLR_RT_POS) // DMA_EN #define SPI_DMA_EN_RX_POS 0U #define SPI_DMA_EN_RX_MSK (1U << SPI_DMA_EN_RX_POS) #define SPI_DMA_EN_TX_POS 1U #define SPI_DMA_EN_TX_MSK (1U << SPI_DMA_EN_TX_POS) /* =========================================================================================================================== */ /* ================ I2C ================ */ /* =========================================================================================================================== */ /** * @brief I2C */ typedef struct { __IOM uint32_t CTRL0; /*!< (0x00) Control Register 0 */ __IOM uint32_t CTRL1; /*!< (0x04) Control Register 1 */ __IOM uint32_t DATA; /*!< (0x08) Data Register */ __IOM uint32_t ADDR; /*!< (0x0c) Address Register */ __IOM uint32_t FIFO_TH; /*!< (0x10) FIFO Threshold Register */ __IM uint32_t INTR_STATUS; /*!< (0x14) Masked Interrupt Status */ __IOM uint32_t INTR_EN; /*!< (0x18) Interrupt Mask Set or Clear */ __IM uint32_t STATUS0; /*!< (0x1c) Raw Interrupt Status */ __IM uint32_t TX_ABORT; /*!< (0x20) Tx Abort Source Register */ __IOM uint32_t INTR_CLR; /*!< (0x24) Interrupt Clear Register */ __IM uint32_t STATUS1; /*!< (0x28) Status Register */ __IOM uint32_t SSCL; /*!< (0x2c) Standard SCL Timing */ __IOM uint32_t FSSCL; /*!< (0x30) Full Speed SCL Timing */ __IOM uint32_t HSSCL; /*!< (0x34) High Speed SCL Timing */ } I2C_TypeDef; // CTRL0 #define I2C_CTRL0_ABORT_POS 1U #define I2C_CTRL0_ABORT_MSK ((0x1UL) << I2C_CTRL0_ABORT_POS) #define I2C_CTRL0_ENABLE_POS 0U #define I2C_CTRL0_ENABLE_MSK ((0x1UL) << I2C_CTRL0_ENABLE_POS) // CTRL1 #define I2C_CTRL1_SLAVE_DISABLE_POS (6U) #define I2C_CTRL1_SLAVE_DISABLE_MSK ((0x1UL) << I2C_CTRL1_SLAVE_DISABLE_POS) #define I2C_CTRL1_RESTART_EN_POS (5U) #define I2C_CTRL1_RESTART_EN_MSK ((0x1UL) << I2C_CTRL1_RESTART_EN_POS) #define I2C_CTRL1_10BITADDR_MASTER_POS (4U) #define I2C_CTRL1_10BITADDR_MASTER_MSK ((0x1UL) << I2C_CTRL1_10BITADDR_MASTER_POS) #define I2C_CTRL1_10BITADDR_SLAVE_POS (3U) #define I2C_CTRL1_10BITADDR_SLAVE_MSK ((0x1UL) << I2C_CTRL1_10BITADDR_SLAVE_POS) #define I2C_CTRL1_SPEED_POS (1U) #define I2C_CTRL1_SPEED_MSK ((0x3UL) << I2C_CTRL1_SPEED_POS) #define I2C_CTRL1_STANDARD_SPEED ((0x1UL) << I2C_CTRL1_SPEED_POS) #define I2C_CTRL1_FAST_SPEED ((0x2UL) << I2C_CTRL1_SPEED_POS) #define I2C_CTRL1_HIGH_SPEED ((0x3UL) << I2C_CTRL1_SPEED_POS) #define I2C_CTRL1_MASTER_MODE_POS (0U) #define I2C_CTRL1_MASTER_MODE_MSK ((0x1UL) << I2C_CTRL1_MASTER_MODE_POS) // DATA #define I2C_DATA_RESTART_POS (10U) #define I2C_DATA_RESTART_MSK ((0x1UL) << I2C_DATA_RESTART_POS) #define I2C_DATA_STOP_POS (9U) #define I2C_DATA_STOP_MSK ((0x1UL) << I2C_DATA_STOP_POS) #define I2C_DATA_CMD_POS (8U) #define I2C_DATA_CMD_MSK ((0x1UL) << I2C_DATA_CMD_POS) #define I2C_DATA_CMD_READ ((0x1UL) << I2C_DATA_CMD_POS) #define I2C_DATA_CMD_WRITE ((0x0UL) << I2C_DATA_CMD_POS) #define I2C_DATA_DAT_POS (0U) #define I2C_DATA_DAT_MSK ((0xffUL) << I2C_DATA_DAT_POS) // ADDR #define I2C_ADDR_HS_CODE_POS 22U #define I2C_ADDR_HS_CODE_MSK ((0x7UL) << I2C_ADDR_HS_CODE_POS) #define I2C_ADDR_HS_CODE(x) (((uint32_t)(((uint32_t)(x)) << I2C_ADDR_HS_CODE_POS)) & I2C_ADDR_HS_CODE_MSK) #define I2C_ADDR_SLV_ADDR_POS (12U) #define I2C_ADDR_SLV_ADDR_MSK ((0x3ffUL) << I2C_ADDR_SLV_ADDR_POS) #define I2C_ADDR_SLV_ADDR(x) (((uint32_t)(((uint32_t)(x)) << I2C_ADDR_SLV_ADDR_POS)) & I2C_ADDR_SLV_ADDR_MSK) #define I2C_ADDR_SPECIAL_POS 11U #define I2C_ADDR_SPECIAL_MSK ((0x1UL) << I2C_ADDR_SPECIAL_POS) #define I2C_ADDR_GC_OR_START_POS 10U #define I2C_ADDR_GC_OR_START_MSK ((0x1UL) << I2C_ADDR_GC_OR_START_POS) #define I2C_ADDR_TGT_ADDR_POS 0U #define I2C_ADDR_TGT_ADDR_MSK ((0x3ffUL) << I2C_ADDR_TGT_ADDR_POS) // FIFO_TH #define I2C_FIFO_TH_TX_TL_POS 8U #define I2C_FIFO_TH_TX_TL_MSK ((0xffUL) << I2C_FIFO_TH_TX_TL_POS) #define I2C_FIFO_TH_TX_TL(x) (((uint32_t)(((uint32_t)(x)) << I2C_FIFO_TH_TX_TL_POS)) & I2C_FIFO_TH_TX_TL_MSK) #define I2C_FIFO_TH_RX_TL_POS 0U #define I2C_FIFO_TH_RX_TL_MSK ((0xffUL) << I2C_FIFO_TH_RX_TL_POS) #define I2C_FIFO_TH_RX_TL(x) (((uint32_t)(((uint32_t)(x)) << I2C_FIFO_TH_RX_TL_POS)) & I2C_FIFO_TH_RX_TL_MSK) // INTR_STATUS // INTR_EN // STATUS0 #define I2C_INTR_GEN_CALL_POS (11U) #define I2C_INTR_GEN_CALL_MSK ((0x1UL) << I2C_INTR_GEN_CALL_POS) #define I2C_INTR_START_DET_POS (10U) #define I2C_INTR_START_DET_MSK ((0x1UL) << I2C_INTR_START_DET_POS) #define I2C_INTR_STOP_DET_POS (9U) #define I2C_INTR_STOP_DET_MSK ((0x1UL) << I2C_INTR_STOP_DET_POS) #define I2C_INTR_ACTIVITY_POS (8U) #define I2C_INTR_ACTIVITY_MSK ((0x1UL) << I2C_INTR_ACTIVITY_POS) #define I2C_INTR_RX_DONE_POS (7U) #define I2C_INTR_RX_DONE_MSK ((0x1UL) << I2C_INTR_RX_DONE_POS) #define I2C_INTR_TX_ABRT_POS (6U) #define I2C_INTR_TX_ABRT_MSK ((0x1UL) << I2C_INTR_TX_ABRT_POS) #define I2C_INTR_RD_REQ_POS (5U) #define I2C_INTR_RD_REQ_MSK ((0x1UL) << I2C_INTR_RD_REQ_POS) #define I2C_INTR_TX_EMPTY_POS (4U) #define I2C_INTR_TX_EMPTY_MSK ((0x1UL) << I2C_INTR_TX_EMPTY_POS) #define I2C_INTR_TX_OVER_POS (3U) #define I2C_INTR_TX_OVER_MSK ((0x1UL) << I2C_INTR_TX_OVER_POS) #define I2C_INTR_RX_FULL_POS (2U) #define I2C_INTR_RX_FULL_MSK ((0x1UL) << I2C_INTR_RX_FULL_POS) #define I2C_INTR_RX_OVER_POS (1U) #define I2C_INTR_RX_OVER_MSK ((0x1UL) << I2C_INTR_RX_OVER_POS) #define I2C_INTR_RX_UNDER_POS (0U) #define I2C_INTR_RX_UNDER_MSK ((0x1UL) << I2C_INTR_RX_UNDER_POS) #define I2C_INTR_ALL_MSK (0xfffUL) // TX_ABORT #define I2C_TX_ABORT_SLVRD_INTX_POS (15U) #define I2C_TX_ABORT_SLVRD_INTX_MSK ((0x1UL) << I2C_TX_ABORT_SLVRD_INTX_POS) #define I2C_TX_ABORT_SLV_ARBLOST_POS (14U) #define I2C_TX_ABORT_SLV_ARBLOST_MSK ((0x1UL) << I2C_TX_ABORT_SLV_ARBLOST_POS) #define I2C_TX_ABORT_SLVFLUSH_TXFIFO_POS (13U) #define I2C_TX_ABORT_SLVFLUSH_TXFIFO_MSK ((0x1UL) << I2C_TX_ABORT_SLVFLUSH_TXFIFO_POS) #define I2C_TX_ABORT_LOST_POS (12U) #define I2C_TX_ABORT_LOST_MSK ((0x1UL) << I2C_TX_ABORT_LOST_POS) #define I2C_TX_ABORT_MASTER_DIS_POS (11U) #define I2C_TX_ABORT_MASTER_DIS_MSK ((0x1UL) << I2C_TX_ABORT_MASTER_DIS_POS) #define I2C_TX_ABORT_10B_RD_NORSTRT_POS (10U) #define I2C_TX_ABORT_10B_RD_NORSTRT_MSK ((0x1UL) << I2C_TX_ABORT_10B_RD_NORSTRT_POS) #define I2C_TX_ABORT_SBYTE_NORSTRT_POS (9U) #define I2C_TX_ABORT_SBYTE_NORSTRT_MSK ((0x1UL) << I2C_TX_ABORT_SBYTE_NORSTRT_POS) #define I2C_TX_ABORT_HS_NORSTRT_POS (8U) #define I2C_TX_ABORT_HS_NORSTRT_MSK ((0x1UL) << I2C_TX_ABORT_HS_NORSTRT_POS) #define I2C_TX_ABORT_SBYTE_ACKDET_POS (7U) #define I2C_TX_ABORT_SBYTE_ACKDET_MSK ((0x1UL) << I2C_TX_ABORT_SBYTE_ACKDET_POS) #define I2C_TX_ABORT_HS_ACKDET_POS (6U) #define I2C_TX_ABORT_HS_ACKDET_MSK ((0x1UL) << I2C_TX_ABORT_HS_ACKDET_POS) #define I2C_TX_ABORT_GCALL_READ_POS (5U) #define I2C_TX_ABORT_GCALL_READ_MSK ((0x1UL) << I2C_TX_ABORT_GCALL_READ_POS) #define I2C_TX_ABORT_GCALL_NOACK_POS (4U) #define I2C_TX_ABORT_GCALL_NOACK_MSK ((0x1UL) << I2C_TX_ABORT_GCALL_NOACK_POS) #define I2C_TX_ABORT_TXDATA_NOACK_POS (3U) #define I2C_TX_ABORT_TXDATA_NOACK_MSK ((0x1UL) << I2C_TX_ABORT_TXDATA_NOACK_POS) #define I2C_TX_ABORT_10ADDR2_NOACK_POS (2U) #define I2C_TX_ABORT_10ADDR2_NOACK_MSK ((0x1UL) << I2C_TX_ABORT_10ADDR2_NOACK_POS) #define I2C_TX_ABORT_10ADDR1_NOACK_POS (1U) #define I2C_TX_ABORT_10ADDR1_NOACK_MSK ((0x1UL) << I2C_TX_ABORT_10ADDR1_NOACK_POS) #define I2C_TX_ABORT_7B_ADDR_NOACK_POS (0U) #define I2C_TX_ABORT_7B_ADDR_NOACK_MSK ((0x1UL) << I2C_TX_ABORT_7B_ADDR_NOACK_POS) // INTR_CLR #define I2C_INTR_CLR_GEN_CALL_POS (10U) #define I2C_INTR_CLR_GEN_CALL_MSK ((0x1UL) << I2C_INTR_CLR_GEN_CALL_POS) #define I2C_INTR_CLR_START_DET_POS (9U) #define I2C_INTR_CLR_START_DET_MSK ((0x1UL) << I2C_INTR_CLR_START_DET_POS) #define I2C_INTR_CLR_STOP_DET_POS (8U) #define I2C_INTR_CLR_STOP_DET_MSK ((0x1UL) << I2C_INTR_CLR_STOP_DET_POS) #define I2C_INTR_CLR_ACTIVITY_POS (7U) #define I2C_INTR_CLR_ACTIVITY_MSK ((0x1UL) << I2C_INTR_CLR_ACTIVITY_POS) #define I2C_INTR_CLR_RX_DONE_POS (6U) #define I2C_INTR_CLR_RX_DONE_MSK ((0x1UL) << I2C_INTR_CLR_RX_DONE_POS) #define I2C_INTR_CLR_TX_ABRT_POS (5U) #define I2C_INTR_CLR_TX_ABRT_MSK ((0x1UL) << I2C_INTR_CLR_TX_ABRT_POS) #define I2C_INTR_CLR_RD_REQ_POS (4U) #define I2C_INTR_CLR_RD_REQ_MSK ((0x1UL) << I2C_INTR_CLR_RD_REQ_POS) #define I2C_INTR_CLR_TX_OVER_POS (3U) #define I2C_INTR_CLR_TX_OVER_MSK ((0x1UL) << I2C_INTR_CLR_TX_OVER_POS) #define I2C_INTR_CLR_RX_OVER_POS (2U) #define I2C_INTR_CLR_RX_OVER_MSK ((0x1UL) << I2C_INTR_CLR_RX_OVER_POS) #define I2C_INTR_CLR_RX_UNDER_POS (1U) #define I2C_INTR_CLR_RX_UNDER_MSK ((0x1UL) << I2C_INTR_CLR_RX_UNDER_POS) #define I2C_INTR_CLR_ALL_POS (0U) #define I2C_INTR_CLR_ALL_MSK ((0x1UL) << I2C_INTR_CLR_ALL_POS) // STATUS1 #define I2C_STATUS1_RXFL_POS 16U #define I2C_STATUS1_RXFL_MSK ((0xfUL) << I2C_STATUS1_RXFL_POS) #define I2C_STATUS1_TXFL_POS 12U #define I2C_STATUS1_TXFL_MSK ((0xfUL) << I2C_STATUS1_TXFL_POS) #define I2C_STATUS1_SLV_ACTIVITY_POS (6U) #define I2C_STATUS1_SLV_ACTIVITY_MSK ((0x1UL) << I2C_STATUS1_SLV_ACTIVITY_POS) #define I2C_STATUS1_MST_ACTIVITY_POS (5U) #define I2C_STATUS1_MST_ACTIVITY_MSK ((0x1UL) << I2C_STATUS1_MST_ACTIVITY_POS) #define I2C_STATUS1_RFF_POS (4U) #define I2C_STATUS1_RFF_MSK ((0x1UL) << I2C_STATUS1_RFF_POS) #define I2C_STATUS1_RFNE_POS (3U) #define I2C_STATUS1_RFNE_MSK ((0x1UL) << I2C_STATUS1_RFNE_POS) #define I2C_STATUS1_TFE_POS (2U) #define I2C_STATUS1_TFE_MSK ((0x1UL) << I2C_STATUS1_TFE_POS) #define I2C_STATUS1_TFNF_POS (1U) #define I2C_STATUS1_TFNF_MSK ((0x1UL) << I2C_STATUS1_TFNF_POS) #define I2C_STATUS1_ACTIVITY_POS (0U) #define I2C_STATUS1_ACTIVITY_MSK ((0x1UL) << I2C_STATUS1_ACTIVITY_POS) // SSCL #define I2C_SSCL_LCNT_POS (16U) #define I2C_SSCL_LCNT_MSK ((0xffffUL) << I2C_SSCL_LCNT_POS) #define I2C_SSCL_LCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_SSCL_LCNT_POS)) & I2C_SSCL_LCNT_MSK) #define I2C_SSCL_HCNT_POS (0U) #define I2C_SSCL_HCNT_MSK ((0xffffUL) << I2C_SSCL_HCNT_POS) #define I2C_SSCL_HCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_SSCL_HCNT_POS)) & I2C_SSCL_HCNT_MSK) // FSSCL #define I2C_FSSCL_LCNT_POS (16U) #define I2C_FSSCL_LCNT_MSK ((0xffffUL) << I2C_FSSCL_LCNT_POS) #define I2C_FSSCL_LCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_FSSCL_LCNT_POS)) & I2C_FSSCL_LCNT_MSK) #define I2C_FSSCL_HCNT_POS (0U) #define I2C_FSSCL_HCNT_MSK ((0xffffUL) << I2C_FSSCL_HCNT_POS) #define I2C_FSSCL_HCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_FSSCL_HCNT_POS)) & I2C_FSSCL_HCNT_MSK) // HSSCL #define I2C_HSSCL_LCNT_POS (16U) #define I2C_HSSCL_LCNT_MSK ((0xffffUL) << I2C_HSSCL_LCNT_POS) #define I2C_HSSCL_LCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_HSSCL_LCNT_POS)) & I2C_HSSCL_LCNT_MSK) #define I2C_HSSCL_HCNT_POS (0U) #define I2C_HSSCL_HCNT_MSK ((0xffffUL) << I2C_HSSCL_HCNT_POS) #define I2C_HSSCL_HCNT(x) (((uint32_t)(((uint32_t)(x)) << I2C_HSSCL_HCNT_POS)) & I2C_HSSCL_HCNT_MSK) /* =========================================================================================================================== */ /* ================ FLASH_CTRL ================ */ /* =========================================================================================================================== */ /** * @brief Flash */ typedef struct { __IOM uint32_t CTRL; /*!< (0x00) FLASH control register */ __IOM uint32_t CMD; /*!< (0x04) FLASH command register */ __IOM uint32_t ADDR; /*!< (0x08) FLASH address register */ uint32_t RESERVED0[2]; __IOM uint8_t DATA; /*!< (0x14) FLASH data register */ uint8_t RESERVED1[3]; __IOM uint32_t MCMD; /*!< (0x18) FLASH memory command register */ __IOM uint32_t STATUS; /*!< (0x1C) FLASH status register */ } FLASH_CTRL_TypeDef; // CTRL #define FLASH_CTRL_TIMEOUT_MSK (0xFFFFU) #define FLASH_CTRL_TIMEOUT_POS (0U) #define FLASH_CTRL_TIMEOUT(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_TIMEOUT_POS)) & FLASH_CTRL_TIMEOUT_MSK) #define FLASH_CTRL_CSHIGH_MSK (0xF0000U) #define FLASH_CTRL_CSHIGH_POS (16U) #define FLASH_CTRL_CSHIGH(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_CSHIGH_POS)) & FLASH_CTRL_CSHIGH_MSK) #define FLASH_CTRL_D_PRFTCH_DIS_MSK (0x200000U) #define FLASH_CTRL_D_PRFTCH_DIS_POS (21U) #define FLASH_CTRL_D_PRFTCH_DIS(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_D_PRFTCH_DIS_POS)) & FLASH_CTRL_D_PRFTCH_DIS_MSK) #define FLASH_CTRL_INTEN_MSK (0x400000U) #define FLASH_CTRL_INTEN_POS (22U) #define FLASH_CTRL_INTEN(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_INTEN_POS)) & FLASH_CTRL_INTEN_MSK) #define FLASH_CTRL_MODE3_MSK (0x800000U) #define FLASH_CTRL_MODE3_POS (23U) #define FLASH_CTRL_MODE3(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_MODE3_POS)) & FLASH_CTRL_MODE3_MSK) #define FLASH_CTRL_PRFTCH_DIS_MSK (0x8000000U) #define FLASH_CTRL_PRFTCH_DIS_POS (27U) #define FLASH_CTRL_PRFTCH_DIS(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_PRFTCH_DIS_POS)) & FLASH_CTRL_PRFTCH_DIS_MSK) #define FLASH_CTRL_DUAL_MSK (0x10000000U) #define FLASH_CTRL_DUAL_POS (28U) #define FLASH_CTRL_DUAL(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_DUAL_POS)) & FLASH_CTRL_DUAL_MSK) #define FLASH_CTRL_RFCLK_MSK (0x20000000U) #define FLASH_CTRL_RFCLK_POS (29U) #define FLASH_CTRL_RFCLK(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_RFCLK_POS)) & FLASH_CTRL_RFCLK_MSK) #define FLASH_CTRL_FBCLK_MSK (0x40000000U) #define FLASH_CTRL_FBCLK_POS (30U) #define FLASH_CTRL_FBCLK(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_FBCLK_POS)) & FLASH_CTRL_FBCLK_MSK) #define FLASH_CTRL_DMAEN_MSK (0x80000000U) #define FLASH_CTRL_DMAEN_POS (31U) #define FLASH_CTRL_DMAEN(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CTRL_DMAEN_POS)) & FLASH_CTRL_DMAEN_MSK) // CMD #define FLASH_CMD_DATALEN_MSK (0x3FFFU) #define FLASH_CMD_DATALEN_POS (0U) #define FLASH_CMD_DATALEN(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CMD_DATALEN_POS)) & FLASH_CMD_DATALEN_MSK) #define FLASH_CMD_POLL_MSK (0x4000U) #define FLASH_CMD_POLL_POS (14U) #define FLASH_CMD_POLL(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CMD_POLL_POS)) & FLASH_CMD_POLL_MSK) #define FLASH_CMD_DOUT_MSK (0x8000U) #define FLASH_CMD_DOUT_POS (15U) #define FLASH_CMD_DOUT(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CMD_DOUT_POS)) & FLASH_CMD_DOUT_MSK) #define FLASH_CMD_INTLEN_MSK (0x70000U) #define FLASH_CMD_INTLEN_POS (16U) #define FLASH_CMD_INTLEN(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CMD_INTLEN_POS)) & FLASH_CMD_INTLEN_MSK) #define FLASH_CMD_FIELDFORM_MSK (0x180000U) #define FLASH_CMD_FIELDFORM_POS (19U) #define FLASH_CMD_FIELDFORM(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CMD_FIELDFORM_POS)) & FLASH_CMD_FIELDFORM_MSK) #define FLASH_CMD_FRAMEFORM_MSK (0xE00000U) #define FLASH_CMD_FRAMEFORM_POS (21U) #define FLASH_CMD_FRAMEFORM(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CMD_FRAMEFORM_POS)) & FLASH_CMD_FRAMEFORM_MSK) #define FLASH_CMD_OPCODE_MSK (0xFF000000U) #define FLASH_CMD_OPCODE_POS (24U) #define FLASH_CMD_OPCODE(x) (((uint32_t)(((uint32_t)(x)) << FLASH_CMD_OPCODE_POS)) & FLASH_CMD_OPCODE_MSK) // ADDR #define FLASH_ADDR_ADDRESS_MSK (0xFFFFFFFFU) #define FLASH_ADDR_ADDRESS_POS (0U) #define FLASH_ADDR_ADDRESS(x) (((uint32_t)(((uint32_t)(x)) << FLASH_ADDR_ADDRESS_POS)) & FLASH_ADDR_ADDRESS_MSK) // DATA #define FLASH_DATA_DATA_MSK (0xFFFFFFFFU) #define FLASH_DATA_DATA_POS (0U) #define FLASH_DATA_DATA(x) (((uint32_t)(((uint32_t)(x)) << FLASH_DATA_DATA_POS)) & FLASH_DATA_DATA_MSK) // MCMD #define FLASH_MCMD_POLL_MSK (0x4000U) #define FLASH_MCMD_POLL_POS (14U) #define FLASH_MCMD_POLL(x) (((uint32_t)(((uint32_t)(x)) << FLASH_MCMD_POLL_POS)) & FLASH_MCMD_POLL_MSK) #define FLASH_MCMD_DOUT_MSK (0x8000U) #define FLASH_MCMD_DOUT_POS (15U) #define FLASH_MCMD_DOUT(x) (((uint32_t)(((uint32_t)(x)) << FLASH_MCMD_DOUT_POS)) & FLASH_MCMD_DOUT_MSK) #define FLASH_MCMD_INTLEN_MSK (0x70000U) #define FLASH_MCMD_INTLEN_POS (16U) #define FLASH_MCMD_INTLEN(x) (((uint32_t)(((uint32_t)(x)) << FLASH_MCMD_INTLEN_POS)) & FLASH_MCMD_INTLEN_MSK) #define FLASH_MCMD_FIELDFORM_MSK (0x180000U) #define FLASH_MCMD_FIELDFORM_POS (19U) #define FLASH_MCMD_FIELDFORM(x) (((uint32_t)(((uint32_t)(x)) << FLASH_MCMD_FIELDFORM_POS)) & FLASH_MCMD_FIELDFORM_MSK) #define FLASH_MCMD_FRAMEFORM_MSK (0xE00000U) #define FLASH_MCMD_FRAMEFORM_POS (21U) #define FLASH_MCMD_FRAMEFORM(x) (((uint32_t)(((uint32_t)(x)) << FLASH_MCMD_FRAMEFORM_POS)) & FLASH_MCMD_FRAMEFORM_MSK) #define FLASH_MCMD_OPCODE_MSK (0xFF000000U) #define FLASH_MCMD_OPCODE_POS (24U) #define FLASH_MCMD_OPCODE(x) (((uint32_t)(((uint32_t)(x)) << FLASH_MCMD_OPCODE_POS)) & FLASH_MCMD_OPCODE_MSK) // STATUS #define FLASH_STATUS_MCINIT_MSK (0x1U) #define FLASH_STATUS_MCINIT_POS (0U) #define FLASH_STATUS_MCINIT(x) (((uint32_t)(((uint32_t)(x)) << FLASH_STATUS_MCINIT_POS)) & FLASH_STATUS_MCINIT_MSK) #define FLASH_STATUS_CMD_MSK (0x2U) #define FLASH_STATUS_CMD_POS (1U) #define FLASH_STATUS_CMD(x) (((uint32_t)(((uint32_t)(x)) << FLASH_STATUS_CMD_POS)) & FLASH_STATUS_CMD_MSK) #define FLASH_STATUS_RESET_MSK (0x10U) #define FLASH_STATUS_RESET_POS (4U) #define FLASH_STATUS_RESET(x) (((uint32_t)(((uint32_t)(x)) << FLASH_STATUS_RESET_POS)) & FLASH_STATUS_RESET_MSK) #define FLASH_STATUS_INTRQ_MSK (0x20U) #define FLASH_STATUS_INTRQ_POS (5U) #define FLASH_STATUS_INTRQ(x) (((uint32_t)(((uint32_t)(x)) << FLASH_STATUS_INTRQ_POS)) & FLASH_STATUS_INTRQ_MSK) #define FLASH_STATUS_VERSION_MSK (0xFF000000U) #define FLASH_STATUS_VERSION_POS (24U) #define FLASH_STATUS_VERSION(x) (((uint32_t)(((uint32_t)(x)) << FLASH_STATUS_VERSION_POS)) & FLASH_STATUS_VERSION_MSK) /* =========================================================================================================================== */ /* ================ EFUSE_CTRL ================ */ /* =========================================================================================================================== */ /** * @brief eFuse controller */ typedef struct { __IOM uint32_t CTRL; /*!< (0x00) eFuse control register */ __IOM uint32_t ADDR; /*!< (0x04) eFuse address register */ __IOM uint32_t LENGTH; /*!< (0x08) eFuse length register */ __IOM uint32_t SEQUENCE_CNT; /*!< (0x0C) eFuse sequence count register */ } EFUSE_CTRL_TypeDef; // CTRL #define EFUSE_CTRL_ACCESS_EN_POS 7U #define EFUSE_CTRL_ACCESS_EN_MSK (1U << EFUSE_CTRL_ACCESS_EN_POS) #define EFUSE_CTRL_SOFT_RST_POS 6U #define EFUSE_CTRL_SOFT_RST_MSK (1U << EFUSE_CTRL_SOFT_RST_POS) #define EFUSE_CTRL_POWER_DOWN_POS 5U #define EFUSE_CTRL_POWER_DOWN_MSK (1U << EFUSE_CTRL_POWER_DOWN_POS) #define EFUSE_CTRL_TIME_DOUBLE_POS 4U #define EFUSE_CTRL_TIME_DOUBLE_MSK (1U << EFUSE_CTRL_TIME_DOUBLE_POS) #define EFUSE_CTRL_ACCESS_MODE_POS 0U #define EFUSE_CTRL_ACCESS_MODE_MSK (0x7U << EFUSE_CTRL_ACCESS_MODE_POS) #define EFUSE_CTRL_ACCESS_MODE(x) (((uint32_t)(((uint32_t)(x)) << EFUSE_CTRL_ACCESS_MODE_POS)) & EFUSE_CTRL_ACCESS_MODE_MSK) // ADDR #define EFUSE_ADDR_BYTE_ADDR_POS 3U #define EFUSE_ADDR_BYTE_ADDR_MSK (0x7FU << EFUSE_ADDR_BYTE_ADDR_POS) #define EFUSE_ADDR_BYTE_ADDR(x) (((uint32_t)(((uint32_t)(x)) << EFUSE_ADDR_BYTE_ADDR_POS)) & EFUSE_ADDR_BYTE_ADDR_MSK) #define EFUSE_ADDR_BIT_OFFSET_POS 0U #define EFUSE_ADDR_BIT_OFFSET_MSK (0x7U << EFUSE_ADDR_BIT_OFFSET_POS) #define EFUSE_ADDR_BIT_OFFSET(x) (((uint32_t)(((uint32_t)(x)) << EFUSE_ADDR_BIT_OFFSET_POS)) & EFUSE_ADDR_BIT_OFFSET_MSK) // SEQUENCE_CNT #define EFUSE_SEQUENCE_CNT_BUSY_POS 31U #define EFUSE_SEQUENCE_CNT_BUSY_MSK (0x1U << EFUSE_SEQUENCE_CNT_BUSY_POS) #define EFUSE_SEQUENCE_CNT_VALUE_POS 0U #define EFUSE_SEQUENCE_CNT_VALUE_MSK (0x3FFU << EFUSE_SEQUENCE_CNT_VALUE_POS) /* =========================================================================================================================== */ /* ================ TIMER ================ */ /* =========================================================================================================================== */ /** * @brief Timer */ typedef struct { __IOM uint32_t CTRL; /*!< (0x00) Timer Control */ __IOM uint32_t VALUE; /*!< (0x04) Timer Counter Current Value */ __IOM uint32_t RELOAD; /*!< (0x08) Reload value */ union { __IOM uint32_t INTR_STATUS; /*!< (0x0C) Timer Interrupt Status, Write one to lear */ __IOM uint32_t INTR_CLR; }; } TIMER_TypeDef; // CTRL #define TIMER_CTRL_INT_EN_POS 3U #define TIMER_CTRL_INT_EN_MSK (1U << TIMER_CTRL_INT_EN_POS) #define TIMER_CTRL_INT_EN(x) (((uint32_t)(((uint32_t)(x)) << TIMER_CTRL_INT_EN_POS)) & TIMER_CTRL_INT_EN_MSK) #define TIMER_CTRL_EXTIN_POS 1U #define TIMER_CTRL_EXTIN_MSK (0x3U << TIMER_CTRL_EXTIN_POS) #define TIMER_CTRL_EXTIN(x) (((uint32_t)(((uint32_t)(x)) << TIMER_CTRL_EXTIN_POS)) & TIMER_CTRL_EXTIN_MSK) #define TIMER_CTRL_ENABLE_POS 0U #define TIMER_CTRL_ENABLE_MSK (1U << TIMER_CTRL_ENABLE_POS) // INTR_CLR #define TIMER_INTR_CLR_POS 0U #define TIMER_INTR_CLR_MSK (1U << TIMER_INTR_CLR_POS) /* =========================================================================================================================== */ /* ================ DUAL TIMER ================ */ /* =========================================================================================================================== */ /** * @brief Dual-Timer */ typedef struct { __IOM uint32_t LOAD; /*!< (0x00) Timer Load */ __IM uint32_t VALUE; /*!< (0x04) Timer Counter Current Value */ __IOM uint32_t CTRL; /*!< (0x08) Timer Control */ __OM uint32_t INTR_CLR; /*!< (0x0C) Timer Interrupt Clear */ __IM uint32_t STATUS; /*!< (0x10) Timer Raw Interrupt Status */ __IM uint32_t INTR_STATUS; /*!< (0x14) Timer Masked Interrupt Status */ __IOM uint32_t BG_LOAD; /*!< (0x18) Background Load Register */ } DUAL_TIMER_TypeDef; // CTRL #define DTIMER_CTRL_EN_POS 7U #define DTIMER_CTRL_EN_MSK (0x1U << DTIMER_CTRL_EN_POS) #define DTIMER_CTRL_EN(x) (((uint32_t)(((uint32_t)(x)) << DTIMER_CTRL_EN_POS)) & DTIMER_CTRL_EN_MSK) #define DTIMER_CTRL_MODE_POS 6U #define DTIMER_CTRL_MODE_MSK (0x1U << DTIMER_CTRL_MODE_POS) #define DTIMER_CTRL_INT_EN_POS 5U #define DTIMER_CTRL_INT_EN_MSK (0x1U << DTIMER_CTRL_INT_EN_POS) #define DTIMER_CTRL_INT_EN(x) (((uint32_t)(((uint32_t)(x)) << DTIMER_CTRL_INT_EN_POS)) & DTIMER_CTRL_INT_EN_MSK) #define DTIMER_CTRL_PRESCALE_POS 2U #define DTIMER_CTRL_PRESCALE_MSK (0x3U << DTIMER_CTRL_PRESCALE_POS) #define DTIMER_CTRL_PRESCALE(x) (((uint32_t)(((uint32_t)(x)) << DTIMER_CTRL_PRESCALE_POS)) & DTIMER_CTRL_PRESCALE_MSK) #define DTIMER_CTRL_SIZE_POS 1U #define DTIMER_CTRL_SIZE_MSK (0x1U << DTIMER_CTRL_SIZE_POS) #define DTIMER_CTRL_SIZE(x) (((uint32_t)(((uint32_t)(x)) << DTIMER_CTRL_SIZE_POS)) & DTIMER_CTRL_SIZE_MSK) #define DTIMER_CTRL_ONE_SHOT_POS 0U #define DTIMER_CTRL_ONE_SHOT_MSK (0x1U << DTIMER_CTRL_ONE_SHOT_POS) // STATUS #define DTIMER_STATUS_MSK 1U /* =========================================================================================================================== */ /* ================ RTC ================ */ /* =========================================================================================================================== */ /** * @brief RTC */ typedef struct { __IM uint32_t DATA; /*!< (0x00) Data Register */ __IOM uint32_t MATCH; /*!< (0x04) Match Register */ __IOM uint32_t LOAD; /*!< (0x08) Load Register */ __IOM uint32_t CTRL; /*!< (0x0C) Control Register */ __IOM uint32_t INTR_EN; /*!< (0x10) Interrupt Mask Set or Clear register */ __IM uint32_t STATUS; /*!< (0x14) Raw Interrupt Status */ __IM uint32_t INTR_STATUS; /*!< (0x18) Masked Interrupt Status */ __OM uint32_t INTR_CLR; /*!< (0x1C) Interrupt Clear Register */ uint32_t RESERVED0[4]; __IOM uint32_t CALIB; /*!< (0x30) CLK 1HZ calibration Register */ uint32_t RESERVED1[2]; __IOM uint32_t MEASURE; /*!< (0x3C) CLK 1HZ measure Register */ __IOM uint32_t TICK_INTR; /*!< (0x40) CLK 1HZ Interrupt Register */ } RTC_TypeDef; // CTRL #define RTC_CTRL_START_MSK 1U // INTR_EN #define RTC_INTR_EN_MSK 1U // INTR_STATUS #define RTC_INTR_STATUS_MSK 1U // INTR_CLR #define RTC_INTR_CLR_MSK 1U // CALIB #define RTC_CALIB_FRACTION_ADJ_POS 0U #define RTC_CALIB_FRACTION_ADJ_MSK (0xfU << RTC_CALIB_FRACTION_ADJ_POS) #define RTC_CALIB_FRACTION_ADJ(x) (((uint32_t)(((uint32_t)(x)) << RTC_CALIB_FRACTION_ADJ_POS)) & RTC_CALIB_FRACTION_ADJ_MSK) #define RTC_CALIB_FRACTION_POL_POS 4U #define RTC_CALIB_FRACTION_POL_MSK (1U << RTC_CALIB_FRACTION_POL_POS) #define RTC_CALIB_FRACTION_POL(x) (((uint32_t)(((uint32_t)(x)) << RTC_CALIB_FRACTION_POL_POS)) & RTC_CALIB_FRACTION_POL_MSK) #define RTC_CALIB_INTEGER_ADJ_POS 5U #define RTC_CALIB_INTEGER_ADJ_MSK (0x7ffU << RTC_CALIB_INTEGER_ADJ_POS) #define RTC_CALIB_INTEGER_ADJ(x) (((uint32_t)(((uint32_t)(x)) << RTC_CALIB_INTEGER_ADJ_POS)) & RTC_CALIB_INTEGER_ADJ_MSK) #define RTC_CALIB_INTEGER_POL_POS 16U #define RTC_CALIB_INTEGER_POL_MSK (1U << RTC_CALIB_INTEGER_POL_POS) #define RTC_CALIB_INTEGER_POL(x) (((uint32_t)(((uint32_t)(x)) << RTC_CALIB_INTEGER_POL_POS)) & RTC_CALIB_INTEGER_POL_MSK) #define RTC_CALIB_EN_POS 17U #define RTC_CALIB_EN_MSK (1U << RTC_CALIB_EN_POS) // MEASURE #define RTC_MEASURE_CNT_POS 0U #define RTC_MEASURE_CNT_MSK (0x001fffffU << RTC_MEASURE_CNT_POS) #define RTC_MEASURE_DONE_POS 26U #define RTC_MEASURE_DONE_MSK (0x3U << RTC_MEASURE_DONE_POS) #define RTC_MEASURE_TIME_POS 28U #define RTC_MEASURE_TIME_MSK (0x7U << RTC_MEASURE_TIME_POS) #define RTC_MEASURE_TIME(x) (((uint32_t)(((uint32_t)(x)) << RTC_MEASURE_TIME_POS)) & RTC_MEASURE_TIME_MSK) #define RTC_MEASURE_EN_POS 31U #define RTC_MEASURE_EN_MSK (1U << RTC_MEASURE_EN_POS) // TICK_INTR #define RTC_TICK_INTR_CLR_POS 0U #define RTC_TICK_INTR_CLR_MSK (1U << RTC_TICK_INTR_CLR_POS) #define RTC_TICK_INTR_STATUS_POS 1U #define RTC_TICK_INTR_STATUS_MSK (1U << RTC_TICK_INTR_STATUS_POS) #define RTC_TICK_INTR_EN_POS 31U #define RTC_TICK_INTR_EN_MSK (1U << RTC_TICK_INTR_EN_POS) /* =========================================================================================================================== */ /* ================ WDT ================ */ /* =========================================================================================================================== */ /** * @brief WDT */ typedef struct { __IOM uint32_t LOAD; /*!< (0x000) WDT Load Register */ __IM uint32_t VALUE; /*!< (0x004) WDT Value Register */ __IOM uint32_t CTRL; /*!< (0x008) WDT Control Register */ __OM uint32_t INTR_CLR; /*!< (0x00C) WDT Interrupt Clear Register */ __IM uint32_t STATUS; /*!< (0x010) WDT Raw Interrupt Register */ __IM uint32_t INTR_STATUS; /*!< (0x014) WDT Masked Interrupt Register */ uint32_t RESERVED0[762]; __IOM uint32_t LOCK; /*!< (0xC00) WDT Lock Register */ } WDT_TypeDef; // CTRL #define WDT_CTRL_INT_EN_MSK (1U) #define WDT_CTRL_RESET_EN_MSK (2U) // STATUS #define WDT_STATUS_MSK (1U) // INTR_STATUS #define WDT_INTR_STATUS_MSK (1U) /* =========================================================================================================================== */ /* ================ PWM ================ */ /* =========================================================================================================================== */ /** * @brief PWM */ typedef struct { __IOM uint32_t CFG[5]; /*!< (0x00) PWM Configure Register */ uint32_t RESERVED0[3]; __IOM uint32_t CTRL; /*!< (0x20) PWM General Control Register */ __IOM uint32_t PHASE[2]; /*!< (0x24) PWM Phase Control Register */ uint32_t RESERVED1[1]; __OM uint32_t INTR_CLR; /*!< (0x30) PWM Interrupt Clear Register */ __IM uint32_t INTR_STATUS; /*!< (0x34) PWM Interrupt Status Register */ } PWM_TypeDef; // CFG #define PWM_PRESCALER_POS 28U #define PWM_PRESCALER_MSK (0xfU << PWM_PRESCALER_POS) #define PWM_PRESCALER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PRESCALER_POS)) & PWM_PRESCALER_MSK) #define PWM_WAVEFORM_POS 24U #define PWM_WAVEFORM_MSK (0x1U << PWM_WAVEFORM_POS) #define PWM_WAVEFORM(x) (((uint32_t)(((uint32_t)(x)) << PWM_WAVEFORM_POS)) & PWM_WAVEFORM_MSK) #define PWM_COUNTER_POS 8U #define PWM_COUNTER_MSK (0xffU << PWM_COUNTER_POS) #define PWM_COUNTER(x) (((uint32_t)(((uint32_t)(x)) << PWM_COUNTER_POS)) & PWM_COUNTER_MSK) #define PWM_DITHER_POS 0U #define PWM_DITHER_MSK (0xffU << PWM_DITHER_POS) #define PWM_DITHER(x) (((uint32_t)(((uint32_t)(x)) << PWM_DITHER_POS)) & PWM_DITHER_MSK) // CTRL #define PWM_CTRL_PWM4_EN_POS 31U #define PWM_CTRL_PWM4_EN_MSK (1U << PWM_CTRL_PWM4_EN_POS) #define PWM_CTRL_PWM3_EN_POS 30U #define PWM_CTRL_PWM3_EN_MSK (1U << PWM_CTRL_PWM3_EN_POS) #define PWM_CTRL_PWM2_EN_POS 29U #define PWM_CTRL_PWM2_EN_MSK (1U << PWM_CTRL_PWM2_EN_POS) #define PWM_CTRL_PWM1_EN_POS 28U #define PWM_CTRL_PWM1_EN_MSK (1U << PWM_CTRL_PWM1_EN_POS) #define PWM_CTRL_PWM0_EN_POS 27U #define PWM_CTRL_PWM0_EN_MSK (1U << PWM_CTRL_PWM0_EN_POS) #define PWM_CTRL_ALL_EN_POS PWM_CTRL_PWM0_EN_POS #define PWM_CTRL_ALL_EN_MSK (0x1fU << PWM_CTRL_ALL_EN_POS) #define PWM_CTRL_PWM4_INT_EN_POS 20U #define PWM_CTRL_PWM4_INT_EN_MSK (1U << PWM_CTRL_PWM4_INT_EN_POS) #define PWM_CTRL_PWM3_INT_EN_POS 19U #define PWM_CTRL_PWM3_INT_EN_MSK (1U << PWM_CTRL_PWM3_INT_EN_POS) #define PWM_CTRL_PWM2_INT_EN_POS 18U #define PWM_CTRL_PWM2_INT_EN_MSK (1U << PWM_CTRL_PWM2_INT_EN_POS) #define PWM_CTRL_PWM1_INT_EN_POS 17U #define PWM_CTRL_PWM1_INT_EN_MSK (1U << PWM_CTRL_PWM1_INT_EN_POS) #define PWM_CTRL_PWM0_INT_EN_POS 16U #define PWM_CTRL_PWM0_INT_EN_MSK (1U << PWM_CTRL_PWM0_INT_EN_POS) #define PWM_CTRL_ALL_INT_EN_POS PWM_CTRL_PWM0_INT_EN_POS #define PWM_CTRL_ALL_INT_EN_MSK (0x1fU << PWM_CTRL_ALL_INT_EN_POS) #define PWM_CTRL_GEN_PRESCALER_EN_POS 12U #define PWM_CTRL_GEN_PRESCALER_EN_MSK (1U << PWM_CTRL_GEN_PRESCALER_EN_POS) #define PWM_CTRL_GEN_PRESCALER_POS 8U #define PWM_CTRL_GEN_PRESCALER_MSK (0xfU << PWM_CTRL_GEN_PRESCALER_POS) #define PWM_CTRL_GEN_PRESCALER(x) (((uint32_t)(((uint32_t)(x)) << PWM_CTRL_GEN_PRESCALER_POS)) & PWM_CTRL_GEN_PRESCALER_MSK) #define PWM_CTRL_PWM4_POL_INV_POS 4U #define PWM_CTRL_PWM4_POL_INV_MSK (1U << PWM_CTRL_PWM4_POL_INV_POS) #define PWM_CTRL_PWM3_POL_INV_POS 3U #define PWM_CTRL_PWM3_POL_INV_MSK (1U << PWM_CTRL_PWM3_POL_INV_POS) #define PWM_CTRL_PWM2_POL_INV_POS 2U #define PWM_CTRL_PWM2_POL_INV_MSK (1U << PWM_CTRL_PWM2_POL_INV_POS) #define PWM_CTRL_PWM1_POL_INV_POS 1U #define PWM_CTRL_PWM1_POL_INV_MSK (1U << PWM_CTRL_PWM1_POL_INV_POS) #define PWM_CTRL_PWM0_POL_INV_POS 0U #define PWM_CTRL_PWM0_POL_INV_MSK (1U << PWM_CTRL_PWM0_POL_INV_POS) // PHASE #define PWM_PHASE_PWM1_DITHER_POS 24U #define PWM_PHASE_PWM1_DITHER_MSK (0xffU << PWM_PHASE_PWM1_DITHER_POS) #define PWM_PHASE_PWM1_DITHER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PHASE_PWM1_DITHER_POS)) & PWM_PHASE_PWM1_DITHER_MSK) #define PWM_PHASE_PWM1_COUNTER_POS 16U #define PWM_PHASE_PWM1_COUNTER_MSK (0xffU << PWM_PHASE_PWM1_COUNTER_POS) #define PWM_PHASE_PWM1_COUNTER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PHASE_PWM1_COUNTER_POS)) & PWM_PHASE_PWM1_COUNTER_MSK) #define PWM_PHASE_PWM0_DITHER_POS 8U #define PWM_PHASE_PWM0_DITHER_MSK (0xffU << PWM_PHASE_PWM0_DITHER_POS) #define PWM_PHASE_PWM0_DITHER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PHASE_PWM0_DITHER_POS)) & PWM_PHASE_PWM0_DITHER_MSK) #define PWM_PHASE_PWM0_COUNTER_POS 0U #define PWM_PHASE_PWM0_COUNTER_MSK (0xffU << PWM_PHASE_PWM0_COUNTER_POS) #define PWM_PHASE_PWM0_COUNTER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PHASE_PWM0_COUNTER_POS)) & PWM_PHASE_PWM0_COUNTER_MSK) #define PWM_PHASE_PWM3_DITHER_POS 24U #define PWM_PHASE_PWM3_DITHER_MSK (0xffU << PWM_PHASE_PWM3_DITHER_POS) #define PWM_PHASE_PWM3_DITHER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PHASE_PWM3_DITHER_POS)) & PWM_PHASE_PWM3_DITHER_MSK) #define PWM_PHASE_PWM3_COUNTER_POS 16U #define PWM_PHASE_PWM3_COUNTER_MSK (0xffU << PWM_PHASE_PWM3_COUNTER_POS) #define PWM_PHASE_PWM3_COUNTER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PHASE_PWM3_COUNTER_POS)) & PWM_PHASE_PWM3_COUNTER_MSK) #define PWM_PHASE_PWM2_DITHER_POS 8U #define PWM_PHASE_PWM2_DITHER_MSK (0xffU << PWM_PHASE_PWM2_DITHER_POS) #define PWM_PHASE_PWM2_DITHER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PHASE_PWM2_DITHER_POS)) & PWM_PHASE_PWM2_DITHER_MSK) #define PWM_PHASE_PWM2_COUNTER_POS 0U #define PWM_PHASE_PWM2_COUNTER_MSK (0xffU << PWM_PHASE_PWM2_COUNTER_POS) #define PWM_PHASE_PWM2_COUNTER(x) (((uint32_t)(((uint32_t)(x)) << PWM_PHASE_PWM2_COUNTER_POS)) & PWM_PHASE_PWM2_COUNTER_MSK) // INTR_CLR #define PWM_INTR_CLR_CH0_POS 0U #define PWM_INTR_CLR_CH0_MSK (1U << PWM_INTR_CLR_CH0_POS) #define PWM_INTR_CLR_CH1_POS 0U #define PWM_INTR_CLR_CH1_MSK (1U << PWM_INTR_CLR_CH1_POS) #define PWM_INTR_CLR_CH2_POS 0U #define PWM_INTR_CLR_CH2_MSK (1U << PWM_INTR_CLR_CH2_POS) #define PWM_INTR_CLR_CH3_POS 0U #define PWM_INTR_CLR_CH3_MSK (1U << PWM_INTR_CLR_CH3_POS) #define PWM_INTR_CLR_CH4_POS 0U #define PWM_INTR_CLR_CH4_MSK (1U << PWM_INTR_CLR_CH4_POS) // INTR_STATUS #define PWM_INTR_STATUS_CH0_POS 0U #define PWM_INTR_STATUS_CH0_MSK (1U << PWM_INTR_STATUS_CH0_POS) #define PWM_INTR_STATUS_CH1_POS 1U #define PWM_INTR_STATUS_CH1_MSK (1U << PWM_INTR_STATUS_CH1_POS) #define PWM_INTR_STATUS_CH2_POS 2U #define PWM_INTR_STATUS_CH2_MSK (1U << PWM_INTR_STATUS_CH2_POS) #define PWM_INTR_STATUS_CH3_POS 3U #define PWM_INTR_STATUS_CH3_MSK (1U << PWM_INTR_STATUS_CH3_POS) #define PWM_INTR_STATUS_CH4_POS 4U #define PWM_INTR_STATUS_CH4_MSK (1U << PWM_INTR_STATUS_CH4_POS) /* =========================================================================================================================== */ /* ================ TRNG ================ */ /* =========================================================================================================================== */ /** * @brief TRNG */ typedef struct { __IOM uint32_t CTRL0; /*!< (0x00) TRNG Control Register 0 */ __IOM uint32_t CTRL1; /*!< (0x04) TRNG Control Register 1 */ __IM uint32_t STATUS; /*!< (0x08) TRNG Status Register */ uint32_t RESERVED0; __IM uint32_t DATA[4]; /*!< (0x10) TRNG Data Register */ __IOM uint32_t INTR_EN; /*!< (0x20) TRNG Interrupt Enable Register */ __IOM uint32_t INTR_CLR; /*!< (0x24) TRNG Interrupt Clear Register */ __IM uint32_t INTR_STATUS; /*!< (0x28) TRNG Interrupt Status Register */ } TRNG_TypeDef; // CTRL0 #define TRNG_CTRL0_LSB_CFG_POS 0U #define TRNG_CTRL0_LSB_CFG_MSK (0x7U << TRNG_CTRL0_LSB_CFG_POS) #define TRNG_CTRL0_LSB_CFG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_CTRL0_LSB_CFG_POS)) & TRNG_CTRL0_LSB_CFG_MSK) // CTRL1 #define TRNG_CTRL1_TRNG_REQ_POS 0U #define TRNG_CTRL1_TRNG_REQ_MSK (0x1U << TRNG_CTRL1_TRNG_REQ_POS) // STATUS #define TRNG_STATUS_DONE_POS 0U #define TRNG_STATUS_DONE_MSK (0x1U << TRNG_STATUS_DONE_POS) // INTR_EN #define TRNG_INTR_EN_POS 0U #define TRNG_INTR_EN_MSK (0x1U << TRNG_INTR_EN_POS) // INTR_CLR #define TRNG_INTR_CLR_POS 0U #define TRNG_INTR_CLR_MSK (0x1U << TRNG_INTR_CLR_POS) // INTR_STATUS #define TRNG_INTR_STATUS_DONE_POS 0U #define TRNG_INTR_STATUS_DONE_MSK (0x1U << TRNG_INTR_STATUS_DONE_POS) /* =========================================================================================================================== */ /* ================ ADC ================ */ /* =========================================================================================================================== */ /** * @brief ADC */ typedef struct { __IOM uint32_t CTRL0; /*!< (0x00) Control Register 0 */ __IOM uint32_t CTRL1; /*!< (0x04) Control Register 1 */ __IOM uint32_t CTRL2; /*!< (0x08) Control Register 2 */ __IM uint32_t STATUS; /*!< (0x0C) Status Register */ __IM uint32_t DATA; /*!< (0x10) Data Register */ uint32_t RESERVED0[3]; __IOM uint32_t INTR_EN; /*!< (0x20) Interrupt Enable Register */ __IOM uint32_t INTR_CLR; /*!< (0x24) Interrupt Clear Register */ __IM uint32_t INTR_STATUS; /*!< (0x28) Interrupt Status Register */ uint32_t RESERVED1[1]; __IOM uint32_t DMA_EN; /*!< (0x30) DMA Request Enable Register */ } ADC_TypeDef; // CTRL0 #define ADC_CTRL0_CONV_MODE_POS 0U #define ADC_CTRL0_CONV_MODE_MSK (0x1U << ADC_CTRL0_CONV_MODE_POS) #define ADC_CTRL0_CONV_MODE(x) (((uint32_t)(((uint32_t)(x)) << ADC_CTRL0_CONV_MODE_POS)) & ADC_CTRL0_CONV_MODE_MSK) #define ADC_CTRL0_CLK_SEL_POS 1U #define ADC_CTRL0_CLK_SEL_MSK (0x1U << ADC_CTRL0_CLK_SEL_POS) #define ADC_CTRL0_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_CTRL0_CLK_SEL_POS)) & ADC_CTRL0_CLK_SEL_MSK) #define ADC_CTRL0_CHNL_P_POS 4U #define ADC_CTRL0_CHNL_P_MSK (0xfU << ADC_CTRL0_CHNL_P_POS) #define ADC_CTRL0_CHNL_P(x) (((uint32_t)(((uint32_t)(x)) << ADC_CTRL0_CHNL_P_POS)) & ADC_CTRL0_CHNL_P_MSK) #define ADC_CTRL0_CHNL_N_POS 8U #define ADC_CTRL0_CHNL_N_MSK (0xfU << ADC_CTRL0_CHNL_N_POS) #define ADC_CTRL0_CHNL_N(x) (((uint32_t)(((uint32_t)(x)) << ADC_CTRL0_CHNL_N_POS)) & ADC_CTRL0_CHNL_N_MSK) #define ADC_CTRL0_ACC_NUM_POS 12U #define ADC_CTRL0_ACC_NUM_MSK (0xfU << ADC_CTRL0_ACC_NUM_POS) #define ADC_CTRL0_ACC_NUM(x) (((uint32_t)(((uint32_t)(x)) << ADC_CTRL0_ACC_NUM_POS)) & ADC_CTRL0_ACC_NUM_MSK) #define ADC_CTRL0_HIGH_PULSE_WIDTH_POS 20U #define ADC_CTRL0_HIGH_PULSE_WIDTH_MSK (0xfU << ADC_CTRL0_HIGH_PULSE_WIDTH_POS) #define ADC_CTRL0_HIGH_PULSE_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << ADC_CTRL0_HIGH_PULSE_WIDTH_POS)) & ADC_CTRL0_HIGH_PULSE_WIDTH_MSK) #define ADC_CTRL0_SETTLE_TIME_POS 24U #define ADC_CTRL0_SETTLE_TIME_MSK (0xfU << ADC_CTRL0_SETTLE_TIME_POS) #define ADC_CTRL0_SETTLE_TIME(x) (((uint32_t)(((uint32_t)(x)) << ADC_CTRL0_SETTLE_TIME_POS)) & ADC_CTRL0_SETTLE_TIME_MSK) // CTRL1 #define ADC_CTRL1_CONV_RATE_POS 0U #define ADC_CTRL1_CONV_RATE_MSK (0xffffU << ADC_CTRL1_CONV_RATE_POS) #define ADC_CTRL1_CONV_RATE(x) (((uint32_t)(((uint32_t)(x)) << ADC_CTRL1_CONV_RATE_POS)) & ADC_CTRL1_CONV_RATE_MSK) #define ADC_CTRL1_TS_EN_POS 16U #define ADC_CTRL1_TS_EN_MSK (0x1U << ADC_CTRL1_TS_EN_POS) #define ADC_CTRL1_VS_EN_POS 17U #define ADC_CTRL1_VS_EN_MSK (0x1U << ADC_CTRL1_VS_EN_POS) // CTRL2 #define ADC_CTRL2_CONV_EN_POS 0U #define ADC_CTRL2_CONV_EN_MSK (0x1U << ADC_CTRL2_CONV_EN_POS) // STATUS #define ADC_STATUS_DONE_POS 0U #define ADC_STATUS_DONE_MSK (0x1U << ADC_STATUS_DONE_POS) #define ADC_STATUS_BUSY_POS 1U #define ADC_STATUS_BUSY_MSK (0x1U << ADC_STATUS_BUSY_POS) #define ADC_STATUS_CONFLICT_POS 2U #define ADC_STATUS_CONFLICT_MSK (0x1U << ADC_STATUS_CONFLICT_POS) #define ADC_STATUS_OVERWRITE_POS 3U #define ADC_STATUS_OVERWRITE_MSK (0x1U << ADC_STATUS_OVERWRITE_POS) // INTR_EN #define ADC_INTR_DONE_EN_POS 0U #define ADC_INTR_DONE_EN_MSK (0x1U << ADC_INTR_DONE_EN_POS) #define ADC_INTR_CONFLICT_EN_POS 1U #define ADC_INTR_CONFLICT_EN_MSK (0x1U << ADC_INTR_CONFLICT_EN_POS) #define ADC_INTR_OVERWRITE_EN_POS 2U #define ADC_INTR_OVERWRITE_EN_MSK (0x1U << ADC_INTR_OVERWRITE_EN_POS) // INTR_CLR #define ADC_INTR_DONE_CLR_POS 0U #define ADC_INTR_DONE_CLR_MSK (0x1U << ADC_INTR_DONE_CLR_POS) #define ADC_INTR_CONFLICT_CLR_POS 1U #define ADC_INTR_CONFLICT_CLR_MSK (0x1U << ADC_INTR_CONFLICT_CLR_POS) #define ADC_INTR_OVERWRITE_CLR_POS 2U #define ADC_INTR_OVERWRITE_CLR_MSK (0x1U << ADC_INTR_OVERWRITE_CLR_POS) // INTR_STATUS #define ADC_INTR_STATUS_DONE_POS 0U #define ADC_INTR_STATUS_DONE_MSK (0x1U << ADC_INTR_STATUS_DONE_POS) #define ADC_INTR_STATUS_CONFLICT_POS 1U #define ADC_INTR_STATUS_CONFLICT_MSK (0x1U << ADC_INTR_STATUS_CONFLICT_POS) #define ADC_INTR_STATUS_OVERWRITE_POS 2U #define ADC_INTR_STATUS_OVERWRITE_MSK (0x1U << ADC_INTR_STATUS_OVERWRITE_POS) // DMA_EN #define ADC_DMA_EN_POS 0U #define ADC_DMA_EN_MSK (0x1U << ADC_DMA_EN_POS) /* =========================================================================================================================== */ /* ================ AES ================ */ /* =========================================================================================================================== */ /** * @brief AES */ typedef struct { __IOM uint32_t CTRL0; /*!< (0x00) Control Register 0 */ __IOM uint32_t CTRL1; /*!< (0x04) Control Register 1 */ __IOM uint32_t CTRL2; /*!< (0x08) Control Register 2 */ __IOM uint32_t STATUS; /*!< (0x0C) Status Register */ __OM uint32_t DIN; /*!< (0x10) Data In Register */ __IM uint32_t DOUT; /*!< (0x14) Data Out Register */ uint32_t RESERVED0[2]; __IOM uint32_t DMA_EN; /*!< (0x20) DMA Request Enable Register */ __IOM uint32_t INTR_EN; /*!< (0x24) Interrupt Enable Register */ __IOM uint32_t INTR_STATUS; /*!< (0x28) Interrupt Status and Clear Register */ uint32_t RESERVED1[1]; __IOM uint32_t KEY[4]; /*!< (0x30) KEY Register */ __IOM uint32_t IV[4]; /*!< (0x40) IV Register */ } AES_TypeDef; // CTRL0 #define AES_CTRL0_START_POS 0U #define AES_CTRL0_START_MSK (1U << AES_CTRL0_START_POS) #define AES_CTRL0_CLEAR_POS 1U #define AES_CTRL0_CLEAR_MSK (1U << AES_CTRL0_CLEAR_POS) // CTRL1 #define AES_CTRL1_MODE_POS 0U #define AES_CTRL1_MODE_MSK (0x7U << AES_CTRL1_MODE_POS) #define AES_CTRL1_MODE(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_MODE_POS)) & AES_CTRL1_MODE_MSK) #define AES_CTRL1_DIR_POS 4U #define AES_CTRL1_DIR_MSK (1U << AES_CTRL1_DIR_POS) #define AES_CTRL1_DIR(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_DIR_POS)) & AES_CTRL1_DIR_MSK) #define AES_CTRL1_MIC_LEN_POS 8U #define AES_CTRL1_MIC_LEN_MSK (0x1fU << AES_CTRL1_MIC_LEN_POS) #define AES_CTRL1_MIC_LEN(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL1_MIC_LEN_POS)) & AES_CTRL1_MIC_LEN_MSK) // CTRL2 #define AES_CTRL2_PLEN_POS 0U #define AES_CTRL2_PLEN_MSK (0xffffU << AES_CTRL2_PLEN_POS) #define AES_CTRL2_PLEN(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL2_PLEN_POS)) & AES_CTRL2_PLEN_MSK) #define AES_CTRL2_ALEN_POS 16U #define AES_CTRL2_ALEN_MSK (0xffffU << AES_CTRL2_ALEN_POS) #define AES_CTRL2_ALEN(x) (((uint32_t)(((uint32_t)(x)) << AES_CTRL2_ALEN_POS)) & AES_CTRL2_ALEN_MSK) // STATUS #define AES_STATUS_DONE_POS 0U #define AES_STATUS_DONE_MSK (0x1U << AES_STATUS_DONE_POS) #define AES_STATUS_MIC_VALID_POS 1U #define AES_STATUS_MIC_VALID_MSK (0x1U << AES_STATUS_MIC_VALID_POS) #define AES_STATUS_DIN_OVERFLOW_POS 2U #define AES_STATUS_DIN_OVERFLOW_MSK (0x1U << AES_STATUS_DIN_OVERFLOW_POS) #define AES_STATUS_DOUT_UNDERFLOW_POS 3U #define AES_STATUS_DOUT_UNDERFLOW_MSK (0x1U << AES_STATUS_DOUT_UNDERFLOW_POS) #define AES_STATUS_BUSY_POS 4U #define AES_STATUS_BUSY_MSK (0x1U << AES_STATUS_BUSY_POS) #define AES_STATUS_DIN_BUF_SPACE_POS 5U #define AES_STATUS_DIN_BUF_SPACE_MSK (0x1FU << AES_STATUS_DIN_BUF_SPACE_POS) #define AES_STATUS_DOUT_BUF_CNT_POS 10U #define AES_STATUS_DOUT_BUF_CNT_MSK (0x1FU << AES_STATUS_DOUT_BUF_CNT_POS) // DMA_EN #define AES_DMA_EN_DIN_DMA_EN_POS 0U #define AES_DMA_EN_DIN_DMA_EN_MSK (0x1U << AES_DMA_EN_DIN_DMA_EN_POS) #define AES_DMA_EN_DIN_DMA_BURST_SIZE_POS 1U #define AES_DMA_EN_DIN_DMA_BURST_SIZE_MSK (0x1FU << AES_DMA_EN_DIN_DMA_BURST_SIZE_POS) #define AES_DMA_EN_DIN_DMA_BURST_SIZE(x) (((uint32_t)(((uint32_t)(x)) << AES_DMA_EN_DIN_DMA_BURST_SIZE_POS)) & AES_DMA_EN_DIN_DMA_BURST_SIZE_MSK) #define AES_DMA_EN_DOUT_DMA_EN_POS 8U #define AES_DMA_EN_DOUT_DMA_EN_MSK (0x1U << AES_DMA_EN_DOUT_DMA_EN_POS) #define AES_DMA_EN_DOUT_DMA_BURST_SIZE_POS 9U #define AES_DMA_EN_DIUT_DMA_BURST_SIZE_MSK (0x1FU << AES_DMA_EN_DOUT_DMA_BURST_SIZE_POS) #define AES_DMA_EN_DIUT_DMA_BURST_SIZE(x) (((uint32_t)(((uint32_t)(x)) << AES_DMA_EN_DOUT_DMA_BURST_SIZE_POS)) & AES_DMA_EN_DIUT_DMA_BURST_SIZE_MSK) // INTR_EN #define AES_INTR_EN_DONE_EN_POS 0U #define AES_INTR_EN_DONE_EN_MSK (0x1U << AES_INTR_EN_DONE_EN_POS) #define AES_INTR_EN_DIN_OVERFLOW_EN_POS 1U #define AES_INTR_EN_DIN_OVERFLOW_EN_MSK (0x1U << AES_INTR_EN_DIN_OVERFLOW_EN_POS) #define AES_INTR_EN_DOUT_UNDERFLOW_EN_POS 2U #define AES_INTR_EN_DOUT_UNDERFLOW_EN_MSK (0x1U << AES_INTR_EN_DOUT_UNDERFLOW_EN_POS) #define AES_INTR_EN_DIN_EMPTY_EN_POS 3U #define AES_INTR_EN_DIN_EMPTY_EN_MSK (0x1U << AES_INTR_EN_DIN_EMPTY_EN_POS) #define AES_INTR_EN_DOUT_NOT_EMPTY_EN_POS 4U #define AES_INTR_EN_DOUT_NOT_EMPTY_EN_MSK (0x1U << AES_INTR_EN_DOUT_NOT_EMPTY_EN_POS) // INTR_STATUS #define AES_INTR_STATUS_DONE_POS 0U #define AES_INTR_STATUS_DONE_MSK (0x1U << AES_INTR_STATUS_DONE_POS) #define AES_INTR_STATUS_DIN_OVERFLOW_POS 1U #define AES_INTR_STATUS_DIN_OVERFLOW_MSK (0x1U << AES_INTR_STATUS_DIN_OVERFLOW_POS) #define AES_INTR_STATUS_DOUT_UNDERFLOW_POS 2U #define AES_INTR_STATUS_DOUT_UNDERFLOW_MSK (0x1U << AES_INTR_STATUS_DOUT_UNDERFLOW_POS) #define AES_INTR_STATUS_DIN_EMPTY_POS 3U #define AES_INTR_STATUS_DIN_EMPTY_MSK (0x1U << AES_INTR_STATUS_DIN_EMPTY_POS) #define AES_INTR_STATUS_DOUT_NOT_EMPTY_POS 4U #define AES_INTR_STATUS_DOUT_NOT_EMPTY_MSK (0x1U << AES_INTR_STATUS_DOUT_NOT_EMPTY_POS) /* =========================================================================================================================== */ /* ================ DMA ================ */ /* =========================================================================================================================== */ /** * @brief DMA */ typedef struct { __IM uint32_t INTR_STATUS; /*!< (0x00) Interrupt Status Register */ __OM uint32_t INTR_CLR; /*!< (0x04) Interrupt Status Clear Register */ __IM uint32_t STATUS0; /*!< (0x08) Status Register 0 */ __IM uint32_t STATUS1; /*!< (0x0C) Status Register 1 */ __IOM uint32_t CTRL0; /*!< (0x10) Global Control Register */ uint32_t RESERVED0[59]; struct CH_T { __IOM uint32_t CTRL; /*!< (0x100) DMA CH Control Register */ __IOM uint32_t CFG; /*!< (0x104) DMA CH Configuration Register */ __IOM uint32_t DATA_SIZE; /*!< (0x108) DMA CH Transcation length Register */ __IOM uint32_t ADDR_SRC; /*!< (0x10C) DMA CH Source Address Register */ __IOM uint32_t ADDR_DST; /*!< (0x110) DMA CH Destination Address Register */ uint32_t RESERVED1[3]; } CH[8]; } DMA_TypeDef; // INTR_STATUS #define DMA_INTR_STATUS_ABORT_POS 16U #define DMA_INTR_STATUS_ABORT_MSK (0xffU << DMA_INTR_STATUS_ABORT_POS) #define DMA_INTR_STATUS_ERR_POS 8U #define DMA_INTR_STATUS_ERR_MSK (0xffU << DMA_INTR_STATUS_ERR_POS) #define DMA_INTR_STATUS_DONE_POS 0U #define DMA_INTR_STATUS_DONE_MSK (0xffU << DMA_INTR_STATUS_DONE_POS) // INTR_CLR #define DMA_INTR_CLR_ABORT_POS 16U #define DMA_INTR_CLR_ABORT_MSK (0xffU << DMA_INTR_CLR_ABORT_POS) #define DMA_INTR_CLR_ABORT(x) (((uint32_t)(((uint32_t)(x)) << DMA_INTR_CLR_ABORT_POS)) & DMA_INTR_CLR_ABORT_MSK) #define DMA_INTR_CLR_ERR_POS 8U #define DMA_INTR_CLR_ERR_MSK (0xffU << DMA_INTR_CLR_ERR_POS) #define DMA_INTR_CLR_ERR(x) (((uint32_t)(((uint32_t)(x)) << DMA_INTR_CLR_ERR_POS)) & DMA_INTR_CLR_ERR_MSK) #define DMA_INTR_CLR_DONE_POS 0U #define DMA_INTR_CLR_DONE_MSK (0xffU << DMA_INTR_CLR_DONE_POS) #define DMA_INTR_CLR_DONE(x) (((uint32_t)(((uint32_t)(x)) << DMA_INTR_CLR_DONE_POS)) & DMA_INTR_CLR_DONE_MSK) // STATUS0 #define DMA_STATUS0_ABORT_POS 16U #define DMA_STATUS0_ABORT_MSK (0xffU << DMA_STATUS0_ABORT_POS) #define DMA_STATUS0_ERR_POS 8U #define DMA_STATUS0_ERR_MSK (0xffU << DMA_STATUS0_ERR_POS) #define DMA_STATUS0_DONE_POS 0U #define DMA_STATUS0_DONE_MSK (0xffU << DMA_STATUS0_DONE_POS) // STATUS1 #define DMA_STATUS1_ENABLE_POS 8U #define DMA_STATUS1_ENABLE_MSK (0xffU << DMA_STATUS1_ENABLE_POS) #define DMA_STATUS1_CH_BUSY_POS 0U #define DMA_STATUS1_CH_BUSY_MSK (0xffU << DMA_STATUS1_CH_BUSY_POS) // CTRL0 #define DMA_CTRL0_ENABLE_POS 0U #define DMA_CTRL0_ENABLE_MSK (1U << DMA_CTRL0_ENABLE_POS) // CTRL #define DMA_CH_CTRL_FIFO_TH_POS 24U #define DMA_CH_CTRL_FIFO_TH_MSK (0x7U << DMA_CH_CTRL_FIFO_TH_POS) #define DMA_CH_CTRL_FIFO_TH(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CTRL_FIFO_TH_POS)) & DMA_CH_CTRL_FIFO_TH_MSK) #define DMA_CH_CTRL_AHB_HPROT_POS 19U #define DMA_CH_CTRL_AHB_HPROT_MSK (0x7U << DMA_CH_CTRL_AHB_HPROT_POS) #define DMA_CH_CTRL_AHB_HPROT(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CTRL_AHB_HPROT_POS)) & DMA_CH_CTRL_AHB_HPROT_MSK) #define DMA_CH_CTRL_SRC_BURST_SIZE_POS 16U #define DMA_CH_CTRL_SRC_BURST_SIZE_MSK (0x7U << DMA_CH_CTRL_SRC_BURST_SIZE_POS) #define DMA_CH_CTRL_SRC_BURST_SIZE(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CTRL_SRC_BURST_SIZE_POS)) & DMA_CH_CTRL_SRC_BURST_SIZE_MSK) #define DMA_CH_CTRL_ABORT_POS 15U #define DMA_CH_CTRL_ABORT_MSK (0x1U << DMA_CH_CTRL_ABORT_POS) #define DMA_CH_CTRL_SRC_DATA_WIDTH_POS 11U #define DMA_CH_CTRL_SRC_DATA_WIDTH_MSK (0x7U << DMA_CH_CTRL_SRC_DATA_WIDTH_POS) #define DMA_CH_CTRL_SRC_DATA_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CTRL_SRC_DATA_WIDTH_POS)) & DMA_CH_CTRL_SRC_DATA_WIDTH_MSK) #define DMA_CH_CTRL_DST_DATA_WIDTH_POS 8U #define DMA_CH_CTRL_DST_DATA_WIDTH_MSK (0x7U << DMA_CH_CTRL_DST_DATA_WIDTH_POS) #define DMA_CH_CTRL_DST_DATA_WIDTH(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CTRL_DST_DATA_WIDTH_POS)) & DMA_CH_CTRL_DST_DATA_WIDTH_MSK) #define DMA_CH_CTRL_MODE_POS 7U #define DMA_CH_CTRL_MODE_MSK (0x1U << DMA_CH_CTRL_MODE_POS) #define DMA_CH_CTRL_SRC_ADDR_CTRL_POS 5U #define DMA_CH_CTRL_SRC_ADDR_CTRL_MSK (0x3U << DMA_CH_CTRL_SRC_ADDR_CTRL_POS) #define DMA_CH_CTRL_SRC_ADDR_CTRL(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CTRL_SRC_ADDR_CTRL_POS)) & DMA_CH_CTRL_SRC_ADDR_CTRL_MSK) #define DMA_CH_CTRL_DST_ADDR_CTRL_POS 3U #define DMA_CH_CTRL_DST_ADDR_CTRL_MSK (0x3U << DMA_CH_CTRL_DST_ADDR_CTRL_POS) #define DMA_CH_CTRL_DST_ADDR_CTRL(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CTRL_DST_ADDR_CTRL_POS)) & DMA_CH_CTRL_DST_ADDR_CTRL_MSK) #define DMA_CH_CTRL_EN_POS 0U #define DMA_CH_CTRL_EN_MSK (0x1U << DMA_CH_CTRL_EN_POS) // CFG #define DMA_CH_CFG_DST_REQ_SEL_POS 9U #define DMA_CH_CFG_DST_REQ_SEL_MSK (0x1fU << DMA_CH_CFG_DST_REQ_SEL_POS) #define DMA_CH_CFG_DST_REQ_SEL(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CFG_DST_REQ_SEL_POS)) & DMA_CH_CFG_DST_REQ_SEL_MSK) #define DMA_CH_CFG_SRC_REQ_SEL_POS 3U #define DMA_CH_CFG_SRC_REQ_SEL_MSK (0x1fU << DMA_CH_CFG_SRC_REQ_SEL_POS) #define DMA_CH_CFG_SRC_REQ_SEL(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_CFG_SRC_REQ_SEL_POS)) & DMA_CH_CFG_SRC_REQ_SEL_MSK) #define DMA_CH_CFG_INT_ABORT_POS 2U #define DMA_CH_CFG_INT_ABORT_MSK (0x1U << DMA_CH_CFG_INT_ABORT_POS) #define DMA_CH_CFG_INT_ERR_POS 1U #define DMA_CH_CFG_INT_ERR_MSK (0x1U << DMA_CH_CFG_INT_ERR_POS) #define DMA_CH_CFG_INT_DONE_POS 0U #define DMA_CH_CFG_INT_DONE_MSK (0x1U << DMA_CH_CFG_INT_DONE_POS) // DATA_SIZE #define DMA_CH_DATA_SIZE_POS 0U #define DMA_CH_DATA_SIZE_MSK (0x3fffffU << DMA_CH_DATA_SIZE_POS) #define DMA_CH_DATA_SIZE(x) (((uint32_t)(((uint32_t)(x)) << DMA_CH_DATA_SIZE_POS)) & DMA_CH_DATA_SIZE_MSK) /* ========================================= End of section using anonymous unions ========================================= */ #if defined(__CC_ARM) #pragma pop #elif defined(__ICCARM__) /* leave anonymous unions enabled */ #elif (defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)) #pragma clang diagnostic pop #elif defined(__GNUC__) /* anonymous unions are enabled by default */ #elif defined(__TMS470__) /* anonymous unions are enabled by default */ #elif defined(__TASKING__) #pragma warning restore #elif defined(__CSMC__) /* anonymous unions are enabled by default */ #else #warning Not supported compiler type #endif /* =========================================================================================================================== */ /* ================ Device Specific Peripheral Address Map ================ */ /* =========================================================================================================================== */ /** @addtogroup MK8000_Address_Map * @{ */ /* Peripheral and SRAM base address */ #define FLASH_BASE (0x04000000U) /*!< (FLASH ) Base Address */ #define ROM_BASE (0x03000000U) /*!< (ROM ) Base Address */ #define SRAM_BASE (0x02000000U) /*!< (SRAM ) Base Address */ #define CODE_BASE (0x00000000U) /*!< (CODE ) Base Address */ #define APB_BASE (0x40000000U) /*!< (APB ) Base Address */ #define AHB_BASE (0x50000000U) /*!< (AHB ) Base Address */ /* Peripheral memory map */ #define EFUSE_CTRL_BASE (APB_BASE + 0x10080) /*!< (eFuse controller ) Base Address */ #define EFUSE_SHADOW_BASE (APB_BASE + 0x10000) /*!< (eFuse shadow register ) Base Address */ #define RTC_BASE (APB_BASE + 0x11000) /*!< (RTC ) Base Address */ #define I2C0_BASE (APB_BASE + 0x12000) /*!< (I2C0 ) Base Address */ #define PWM_BASE (APB_BASE + 0x13000) /*!< (PWM ) Base Address */ #define WDT_BASE (APB_BASE + 0x14000) /*!< (WDT ) Base Address */ #define TIMER0_BASE (APB_BASE + 0x15000) /*!< (Timer0 ) Base Address */ #define TIMER1_BASE (APB_BASE + 0x16000) /*!< (Timer1 ) Base Address */ #define TIMER2_BASE (APB_BASE + 0x17000) /*!< (Timer2 ) Base Address */ #define TIMER3_BASE (APB_BASE + 0x17020) /*!< (Timer3 ) Base Address */ #define UART0_BASE (APB_BASE + 0x19000) /*!< (UART0 ) Base Address */ #define UART1_BASE (APB_BASE + 0x1A000) /*!< (UART1 ) Base Address */ #define TRNG_BASE (APB_BASE + 0x1C000) /*!< (TRNG ) Base Address */ #define ADC_BASE (APB_BASE + 0x1D000) /*!< (ADC ) Base Address */ #define DMA_BASE (AHB_BASE + 0x0000) /*!< (DMA ) Base Address */ #define GPIO_BASE (AHB_BASE + 0x2000) /*!< (GPIO ) Base Address */ #define SPI0_BASE (AHB_BASE + 0x3000) /*!< (SPI0 ) Base Address */ #define SPI1_BASE (AHB_BASE + 0x8000) /*!< (SPI1 ) Base Address */ #define AES_BASE (AHB_BASE + 0x9000) /*!< (AES ) Base Address */ #define FLASH_CTRL_BASE (AHB_BASE + 0xB000) /*!< (FLASH_CTRL ) Base Address */ /** * @} */ /* =========================================================================================================================== */ /* ================ Peripheral declaration ================ */ /* =========================================================================================================================== */ #define FLASH_SIZE 0x80000 #define ROM_SIZE 0x20000 #define SRAM_SIZE 0x30000 #define SYSCON ((SYSCON_TypeDef *)APB_BASE) #define UART0 ((UART_TypeDef *)UART0_BASE) #define UART1 ((UART_TypeDef *)UART1_BASE) #define RTC ((RTC_TypeDef *)RTC_BASE) #define I2C0 ((I2C_TypeDef *)I2C0_BASE) #define PWM ((PWM_TypeDef *)PWM_BASE) #define WDT ((WDT_TypeDef *)WDT_BASE) #define TIMER0 ((TIMER_TypeDef *)TIMER0_BASE) #define TIMER1 ((TIMER_TypeDef *)TIMER1_BASE) #define TIMER2 ((DUAL_TIMER_TypeDef *)TIMER2_BASE) #define TIMER3 ((DUAL_TIMER_TypeDef *)TIMER3_BASE) #define SPI0 ((SPI_TypeDef *)SPI0_BASE) #define SPI1 ((SPI_TypeDef *)SPI1_BASE) #define GPIO ((GPIO_TypeDef *)GPIO_BASE) #define FLASH_CTRL ((FLASH_CTRL_TypeDef *)FLASH_CTRL_BASE) #define EFUSE_CTRL ((EFUSE_CTRL_TypeDef *)EFUSE_CTRL_BASE) #define TRNG ((TRNG_TypeDef *)TRNG_BASE) #define ADC ((ADC_TypeDef *)ADC_BASE) #define AES ((AES_TypeDef *)AES_BASE) #define DMA ((DMA_TypeDef *)DMA_BASE) #ifdef __cplusplus } #endif #endif /* MK8000_H */