/****************************************************************************** * 版权所有:苏州领慧立芯科技有限公司 * Copyright (c) 2020-2025 Suzhou Legendsemi Technology Co., Ltd. ****************************************************************************** * All rights reserved. Distributed under MIT license. * The file is encoded in UTF-8 without signature. * @file lh32m0g30x_mio.h * @version 2025-10-16 ******************************************************************************/ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __LH32M0S3x_MIO_H #define __LH32M0S3x_MIO_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "lh32m0xx_lhl.h" /* ---------------------------------------------------------------------------- -- MIO Peripheral Access Layer ---------------------------------------------------------------------------- */ /*! * @addtogroup MIO_Peripheral_Access_Layer MIO Peripheral Access Layer * @{ */ /** MIO - Register Layout Typedef */ typedef struct { __I uint32_t VERID; /**< Version ID Register, offset: 0x0 */ __I uint32_t PARAM; /**< Parameter Register, offset: 0x4 */ __IO uint32_t CTRL; /**< MIO Control Register, offset: 0x8 */ __I uint32_t PIN; /**< Pin State Register, offset: 0xC */ __IO uint32_t SHIFTSTAT; /**< Shifter Status Register, offset: 0x10 */ __IO uint32_t SHIFTERR; /**< Shifter Error Register, offset: 0x14 */ __IO uint32_t TIMSTAT; /**< Timer Status Register, offset: 0x18 */ uint8_t RESERVED_0[4]; __IO uint32_t SHIFTSIEN; /**< Shifter Status Interrupt Enable, offset: 0x20 */ __IO uint32_t SHIFTEIEN; /**< Shifter Error Interrupt Enable, offset: 0x24 */ __IO uint32_t TIMIEN; /**< Timer Interrupt Enable Register, offset: 0x28 */ uint8_t RESERVED_1[4]; __IO uint32_t SHIFTSDEN; /**< Shifter Status DMA Enable, offset: 0x30 */ uint8_t RESERVED_2[76]; __IO uint32_t SHIFTCTL[4]; /**< Shifter Control N Register, array offset: 0x80, array step: 0x4 */ uint8_t RESERVED_3[112]; __IO uint32_t SHIFTCFG[4]; /**< Shifter Configuration N Register, array offset: 0x100, array step: 0x4 */ uint8_t RESERVED_4[240]; __IO uint32_t SHIFTBUF[4]; /**< Shifter Buffer N Register, array offset: 0x200, array step: 0x4 */ uint8_t RESERVED_5[112]; __IO uint32_t SHIFTBUFBIS[4]; /**< Shifter Buffer N Bit Swapped Register, array offset: 0x280, array step: 0x4 */ uint8_t RESERVED_6[112]; __IO uint32_t SHIFTBUFBYS[4]; /**< Shifter Buffer N Byte Swapped Register, array offset: 0x300, array step: 0x4 */ uint8_t RESERVED_7[112]; __IO uint32_t SHIFTBUFBBS[4]; /**< Shifter Buffer N Bit Byte Swapped Register, array offset: 0x380, array step: 0x4 */ uint8_t RESERVED_8[112]; __IO uint32_t TIMCTL[4]; /**< Timer Control N Register, array offset: 0x400, array step: 0x4 */ uint8_t RESERVED_9[112]; __IO uint32_t TIMCFG[4]; /**< Timer Configuration N Register, array offset: 0x480, array step: 0x4 */ uint8_t RESERVED_10[112]; __IO uint32_t TIMCMP[4]; /**< Timer Compare N Register, array offset: 0x500, array step: 0x4 */ } MIO_Type; /** * @brief MIO_TIMER_x:0或1 */ typedef enum { MIO_TIMER_0 = 0u, MIO_TIMER_1 = 1u, } MIO_TIMER_t; typedef enum { MIO_TIM_TRIG_ACTIVE_HIGH = 0x0u, /*!< Active high. */ MIO_TIM_TRIG_ACTIVE_LOW, /*!< Active low. */ } MIO_TIM_TRIG_POL_t; typedef enum { MIO_TIM_TRIG_SRC_EXTERNAL = 0x0u, /*!< External trigger selected. */ MIO_TIM_TRIG_SRC_INTERNAL, /*!< Internal trigger selected. */ } MIO_TIM_TRIG_SRC_t; typedef enum{ MIO_PIN_OUTPUT_DISABLED = 0x0u, /*!< Pin output disabled. */ MIO_PIN_OPENDRAIN_OR_BIDIRECTION_ENABLED, /*!< Pin open drain or bidirectional output enable. */ MIO_PIN_BIDIRECTION_ENABLED, /*!< Pin bidirectional output data. */ MIO_PIN_OUTPUT_ENABLED, /*!< Pin output. */ } MIO_PIN_CONFIG_t; typedef enum{ MIO_PIN_0 = 0x0u, /*!< MIO_D0 Pin. */ MIO_PIN_1, /*!< MIO_D1 Pin. */ MIO_PIN_2, /*!< MIO_D2 Pin. */ MIO_PIN_3, /*!< MIO_D3 Pin. */ } MIO_PIN_t; typedef enum{ MIO_PIN_ACTIVE_HIGH = 0x0u, /*!< Active high. */ MIO_PIN_ACTIVE_LOW, /*!< Active low. */ } MIO_PIN_POL_t; typedef enum{ MIO_TIM_DISABLED = 0x0u, /*!< Timer Disabled. */ MIO_TIM_DUAL_8BIT_BAUD, /*!< Dual 8-bit counters baud/bit mode. */ MIO_TIM_DUAL_8BIT_PWM, /*!< Dual 8-bit counters PWM mode. */ MIO_TIM_SINGLE_16BIT, /*!< Single 16-bit counter mode. */ } MIO_TIM_MODE_t; typedef enum{ MIO_TIM_OUTPUT_HIGH = 0x0u, /*!< Logic one when enabled and is not affected by timer reset. */ MIO_TIM_OUTPUT_LOW, /*!< Logic zero when enabled and is not affected by timer reset. */ MIO_TIM_OUTPUT_HIGH_ON_RESET, /*!< Logic one when enabled and on timer reset. */ MIO_TIM_OUTPUT_LOW_ON_RESET, /*!< Logic zero when enabled and on timer reset. */ } MIO_TIM_OUTPUT_t; typedef enum{ MIO_TIM_MIO_CLOCK = 0x0u, /*!< Decrement counter on MIO clock, Shift clock equals Timer output. */ MIO_TIM_TRIGGER_INPUT, /*!< Decrement counter on Trigger input (both edges), Shift clock equals Timer output. */ MIO_TIM_PIN_INPUT, /*!< Decrement counter on Pin input (both edges), Shift clock equals Pin input. */ MIO_TIM_TRIGGER_INPUT_EQUAL_SHIFT_CLOCK /*!< Decrement counter on Trigger input (both edges), Shift clock equals Trigger input. */ } MIO_TIM_CLK_t; typedef enum { MIO_TIM_RST_NEVER = 0x0u, /*!< Timer never reset. */ MIO_TIM_RST_PIN_EQUAL_OUTPUT = 0x2u, /*!< Timer reset on Timer Pin equal to Timer Output. */ MIO_TIM_RST_TRIGGER_EQUAL_OUTPUT = 0x3u, /*!< Timer reset on Timer Trigger equal to Timer Output. */ MIO_TIM_RST_PIN_RISING_EDGE = 0x4u, /*!< Timer reset on Timer Pin rising edge. */ MIO_TIM_RST_TRIGGER_RISING_EDGE = 0x6u, /*!< Timer reset on Trigger rising edge. */ MIO_TIM_RST_TRIGGER_BOTH_EDGE = 0x7u, /*!< Timer reset on Trigger rising or falling edge. */ } MIO_TIM_RESET_t; typedef enum { MIO_TIM_DIS_NEVER = 0x0u, /*!< Timer never disabled. */ MIO_TIM_DIS_PRE_TIMER_DISABLE = 0x1u, /*!< Timer disabled on Timer N-1 disable. */ MIO_TIM_DIS_COMPARE = 0x2u, /*!< Timer disabled on Timer compare. */ MIO_TIM_DIS_COMPARE_AND_TRIGGER_LOW = 0x3u, /*!< Timer disabled on Timer compare and Trigger Low. */ MIO_TIM_DIS_PIN_BOTH_EDGE = 0x4u, /*!< Timer disabled on Pin rising or falling edge. */ MIO_TIM_DIS_PIN_BOTH_EDGE_AND_TRIGGER_HIGH = 0x5u, /*!< Timer disabled on Pin rising or falling edge provided Trigger is high. */ MIO_TIM_DIS_TRIGGER_FALLING_EDGE = 0x6u, /*!< Timer disabled on Trigger falling edge. */ } MIO_TIM_DISABLE_t; typedef enum { MIO_TIM_ENA_ALWAYS = 0x0u, /*!< Timer always enabled. */ MIO_TIM_ENA_PRE_TIMER_ENABLE = 0x1u, /*!< Timer enabled on Timer N-1 enable. */ MIO_TIM_ENA_TRIGGER_HIGH = 0x2u, /*!< Timer enabled on Trigger high. */ MIO_TIM_ENA_TRIGGER_HIGH_AND_PIN_HIGH = 0x3u, /*!< Timer enabled on Trigger high and Pin high. */ MIO_TIM_ENA_PIN_RISING_EDGE = 0x4u, /*!< Timer enabled on Pin rising edge. */ MIO_TIM_ENA_PIN_RISING_EDGE_AND_TRIGGER_HIGH = 0x5u, /*!< Timer enabled on Pin rising edge and Trigger high. */ MIO_TIM_ENA_TRIGGER_RISING_EDGE = 0x6u, /*!< Timer enabled on Trigger rising edge. */ MIO_TIM_ENA_TRIGGER_BOTH_EDGE = 0x7u, /*!< Timer enabled on Trigger rising or falling edge. */ } MIO_TIM_ENABLE_t; typedef enum { MIO_TIM_STOP_BIT_DISABLED = 0x0U, /*!< Stop bit disabled. */ MIO_TIM_STOP_BIT_COMPARE_ENABLED = 0x1U, /*!< Stop bit is enabled on timer compare. */ MIO_TIM_STOP_BIT_DISABLE_ENABLED = 0x2U, /*!< Stop bit is enabled on timer disable. */ MIO_TIM_STOP_BIT_COMPARE_AND_DISABLE_ENABLED = 0x3U, /*!< Stop bit is enabled on timer compare and timer disable. */ } MIO_TIM_STOP_BIT_t; typedef enum { MIO_TIM_START_BIT_DISABLED = 0x0U, /*!< Start bit disabled. */ MIO_TIM_START_BIT_ENABLED = 0x1U, /*!< Start bit enabled. */ } MIO_TIM_START_BIT_t; typedef struct { /* Trigger. */ uint8_t Trigger_Select; /*!< The internal trigger selection number using MACROs. */ MIO_TIM_TRIG_POL_t Trigger_Polarity; /*!< Trigger Polarity. */ MIO_TIM_TRIG_SRC_t Trigger_Source; /*!< Trigger Source, internal (see 'trgsel') or external. */ /* Pin. */ MIO_PIN_CONFIG_t Pin_Config; /*!< Timer Pin Configuration. */ MIO_PIN_t Pin_Select; /*!< Timer Pin number Select. */ MIO_PIN_POL_t Pin_Polarity; /*!< Timer Pin Polarity. */ /* Timer. */ MIO_TIM_MODE_t Timer_Mode; /*!< Timer work Mode. */ MIO_TIM_OUTPUT_t Timer_Output; /*!< Configures the initial state of the Timer Output and whether it is affected by the Timer reset. */ MIO_TIM_CLK_t Timer_Decrement_Clock; /*!< Configures the source of the Timer decrement and the source of the Shift clock. */ MIO_TIM_RESET_t Timer_Reset_Condition; /*!< Configures the condition that causes the timer counter (and optionally the timer output) to be reset. */ MIO_TIM_DISABLE_t Timer_Disable_Condition;/*!< Configures the condition that causes the Timer to be disabled and stop decrementing. */ MIO_TIM_ENABLE_t Timer_Enable_Condition; /*!< Configures the condition that causes the Timer to be enabled and start decrementing. */ MIO_TIM_STOP_BIT_t Timer_StopBit_Condition; /*!< Timer STOP Bit generation. */ MIO_TIM_START_BIT_t Timer_StartBit_Condition; /*!< Timer STRAT Bit generation. */ uint8_t Reserved[2]; uint32_t Timer_Compare; /*!< Value for Timer Compare N Register. */ } MIO_TIM_InitTypedef; /* ---------------------------------------------------------------------------- -- MIO Register Masks ---------------------------------------------------------------------------- */ /*! * @addtogroup MIO_Register_Masks MIO Register Masks * @{ */ /*! @name VERID - Version ID Register */ /*! @{ */ #define MIO_VERID_FEATURE_MASK (0xFFFFU) #define MIO_VERID_FEATURE_SHIFT (0U) /*! FEATURE - Feature Specification Number * 0b0000000000000000..Standard features implemented. * 0b0000000000000001..Supports state, logic and parallel modes. */ #define MIO_VERID_FEATURE(x) (((uint32_t)(((uint32_t)(x)) << MIO_VERID_FEATURE_SHIFT)) & MIO_VERID_FEATURE_MASK) #define MIO_VERID_MINOR_MASK (0xFF0000U) #define MIO_VERID_MINOR_SHIFT (16U) /*! MINOR - Minor Version Number */ #define MIO_VERID_MINOR(x) (((uint32_t)(((uint32_t)(x)) << MIO_VERID_MINOR_SHIFT)) & MIO_VERID_MINOR_MASK) #define MIO_VERID_MAJOR_MASK (0xFF000000U) #define MIO_VERID_MAJOR_SHIFT (24U) /*! MAJOR - Major Version Number */ #define MIO_VERID_MAJOR(x) (((uint32_t)(((uint32_t)(x)) << MIO_VERID_MAJOR_SHIFT)) & MIO_VERID_MAJOR_MASK) /*! @} */ /*! @name PARAM - Parameter Register */ /*! @{ */ #define MIO_PARAM_SHIFTER_MASK (0xFFU) #define MIO_PARAM_SHIFTER_SHIFT (0U) /*! SHIFTER - Shifter Number */ #define MIO_PARAM_SHIFTER(x) (((uint32_t)(((uint32_t)(x)) << MIO_PARAM_SHIFTER_SHIFT)) & MIO_PARAM_SHIFTER_MASK) #define MIO_PARAM_TIMER_MASK (0xFF00U) #define MIO_PARAM_TIMER_SHIFT (8U) /*! TIMER - Timer Number */ #define MIO_PARAM_TIMER(x) (((uint32_t)(((uint32_t)(x)) << MIO_PARAM_TIMER_SHIFT)) & MIO_PARAM_TIMER_MASK) #define MIO_PARAM_PIN_MASK (0xFF0000U) #define MIO_PARAM_PIN_SHIFT (16U) /*! PIN - Pin Number */ #define MIO_PARAM_PIN(x) (((uint32_t)(((uint32_t)(x)) << MIO_PARAM_PIN_SHIFT)) & MIO_PARAM_PIN_MASK) #define MIO_PARAM_TRIGGER_MASK (0xFF000000U) #define MIO_PARAM_TRIGGER_SHIFT (24U) /*! TRIGGER - Trigger Number */ #define MIO_PARAM_TRIGGER(x) (((uint32_t)(((uint32_t)(x)) << MIO_PARAM_TRIGGER_SHIFT)) & MIO_PARAM_TRIGGER_MASK) /*! @} */ /*! @name CTRL - MIO Control Register */ /*! @{ */ #define MIO_CTRL_MIOEN_MASK (0x1U) #define MIO_CTRL_MIOEN_SHIFT (0U) /*! MIOEN - MIO Enable * 0b0..MIO module is disabled. * 0b1..MIO module is enabled. */ #define MIO_CTRL_MIOEN(x) (((uint32_t)(((uint32_t)(x)) << MIO_CTRL_MIOEN_SHIFT)) & MIO_CTRL_MIOEN_MASK) #define MIO_CTRL_SWRST_MASK (0x2U) #define MIO_CTRL_SWRST_SHIFT (1U) /*! SWRST - Software Reset * 0b0..Software reset is disabled * 0b1..Software reset is enabled, all MIO registers except the Control Register are reset. */ #define MIO_CTRL_SWRST(x) (((uint32_t)(((uint32_t)(x)) << MIO_CTRL_SWRST_SHIFT)) & MIO_CTRL_SWRST_MASK) #define MIO_CTRL_FASTACC_MASK (0x4U) #define MIO_CTRL_FASTACC_SHIFT (2U) /*! FASTACC - Fast Access * 0b0..Configures for normal register accesses to MIO * 0b1..Configures for fast register accesses to MIO */ #define MIO_CTRL_FASTACC(x) (((uint32_t)(((uint32_t)(x)) << MIO_CTRL_FASTACC_SHIFT)) & MIO_CTRL_FASTACC_MASK) #define MIO_CTRL_DBGE_MASK (0x40000000U) #define MIO_CTRL_DBGE_SHIFT (30U) /*! DBGE - Debug Enable * 0b0..MIO is disabled in debug modes. * 0b1..MIO is enabled in debug modes */ #define MIO_CTRL_DBGE(x) (((uint32_t)(((uint32_t)(x)) << MIO_CTRL_DBGE_SHIFT)) & MIO_CTRL_DBGE_MASK) #define MIO_CTRL_DOZEN_MASK (0x80000000U) #define MIO_CTRL_DOZEN_SHIFT (31U) /*! DOZEN - Doze Enable * 0b0..MIO enabled in Doze modes. * 0b1..MIO disabled in Doze modes. */ #define MIO_CTRL_DOZEN(x) (((uint32_t)(((uint32_t)(x)) << MIO_CTRL_DOZEN_SHIFT)) & MIO_CTRL_DOZEN_MASK) /*! @} */ /*! @name PIN - Pin State Register */ /*! @{ */ #define MIO_PIN_PDI_MASK (0xFFU) #define MIO_PIN_PDI_SHIFT (0U) /*! PDI - Pin Data Input */ #define MIO_PIN_PDI(x) (((uint32_t)(((uint32_t)(x)) << MIO_PIN_PDI_SHIFT)) & MIO_PIN_PDI_MASK) /*! @} */ /*! @name SHIFTSTAT - Shifter Status Register */ /*! @{ */ #define MIO_SHIFTSTAT_SSF_MASK (0xFU) #define MIO_SHIFTSTAT_SSF_SHIFT (0U) /*! SSF - Shifter Status Flag * 0b0000..Status flag is clear * 0b0001..Status flag is set */ #define MIO_SHIFTSTAT_SSF(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTSTAT_SSF_SHIFT)) & MIO_SHIFTSTAT_SSF_MASK) /*! @} */ /*! @name SHIFTERR - Shifter Error Register */ /*! @{ */ #define MIO_SHIFTERR_SEF_MASK (0xFU) #define MIO_SHIFTERR_SEF_SHIFT (0U) /*! SEF - Shifter Error Flags * 0b0000..Shifter Error Flag is clear * 0b0001..Shifter Error Flag is set */ #define MIO_SHIFTERR_SEF(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTERR_SEF_SHIFT)) & MIO_SHIFTERR_SEF_MASK) /*! @} */ /*! @name TIMSTAT - Timer Status Register */ /*! @{ */ #define MIO_TIMSTAT_TSF_MASK (0xFU) #define MIO_TIMSTAT_TSF_SHIFT (0U) /*! TSF - Timer Status Flags * 0b0000..Timer Status Flag is clear * 0b0001..Timer Status Flag is set */ #define MIO_TIMSTAT_TSF(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMSTAT_TSF_SHIFT)) & MIO_TIMSTAT_TSF_MASK) /*! @} */ /*! @name SHIFTSIEN - Shifter Status Interrupt Enable */ /*! @{ */ #define MIO_SHIFTSIEN_SSIE_MASK (0xFU) #define MIO_SHIFTSIEN_SSIE_SHIFT (0U) /*! SSIE - Shifter Status Interrupt Enable * 0b0000..Shifter Status Flag interrupt disabled * 0b0001..Shifter Status Flag interrupt enabled */ #define MIO_SHIFTSIEN_SSIE(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTSIEN_SSIE_SHIFT)) & MIO_SHIFTSIEN_SSIE_MASK) /*! @} */ /*! @name SHIFTEIEN - Shifter Error Interrupt Enable */ /*! @{ */ #define MIO_SHIFTEIEN_SEIE_MASK (0xFU) #define MIO_SHIFTEIEN_SEIE_SHIFT (0U) /*! SEIE - Shifter Error Interrupt Enable * 0b0000..Shifter Error Flag interrupt disabled * 0b0001..Shifter Error Flag interrupt enabled */ #define MIO_SHIFTEIEN_SEIE(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTEIEN_SEIE_SHIFT)) & MIO_SHIFTEIEN_SEIE_MASK) /*! @} */ /*! @name TIMIEN - Timer Interrupt Enable Register */ /*! @{ */ #define MIO_TIMIEN_TEIE_MASK (0xFU) #define MIO_TIMIEN_TEIE_SHIFT (0U) /*! TEIE - Timer Status Interrupt Enable * 0b0000..Timer Status Flag interrupt is disabled * 0b0001..Timer Status Flag interrupt is enabled */ #define MIO_TIMIEN_TEIE(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMIEN_TEIE_SHIFT)) & MIO_TIMIEN_TEIE_MASK) /*! @} */ /*! @name SHIFTSDEN - Shifter Status DMA Enable */ /*! @{ */ #define MIO_SHIFTSDEN_SSDE_MASK (0xFU) #define MIO_SHIFTSDEN_SSDE_SHIFT (0U) /*! SSDE - Shifter Status DMA Enable * 0b0000..Shifter Status Flag DMA request is disabled * 0b0001..Shifter Status Flag DMA request is enabled */ #define MIO_SHIFTSDEN_SSDE(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTSDEN_SSDE_SHIFT)) & MIO_SHIFTSDEN_SSDE_MASK) /*! @} */ /*! @name SHIFTCTL - Shifter Control N Register */ /*! @{ */ #define MIO_SHIFTCTL_SMOD_MASK (0x7U) #define MIO_SHIFTCTL_SMOD_SHIFT (0U) /*! SMOD - Shifter Mode * 0b000..Disabled. * 0b001..Receive mode. Captures the current Shifter content into the SHIFTBUF on expiration of the Timer. * 0b010..Transmit mode. Load SHIFTBUF contents into the Shifter on expiration of the Timer. * 0b011..Reserved. * 0b100..Match Store mode. Shifter data is compared to SHIFTBUF content on expiration of the Timer. * 0b101..Match Continuous mode. Shifter data is continuously compared to SHIFTBUF contents. * 0b110..Reserved. * 0b111..Reserved. */ #define MIO_SHIFTCTL_SMOD(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCTL_SMOD_SHIFT)) & MIO_SHIFTCTL_SMOD_MASK) #define MIO_SHIFTCTL_PINPOL_MASK (0x80U) #define MIO_SHIFTCTL_PINPOL_SHIFT (7U) /*! PINPOL - Shifter Pin Polarity * 0b0..Pin is active high * 0b1..Pin is active low */ #define MIO_SHIFTCTL_PINPOL(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCTL_PINPOL_SHIFT)) & MIO_SHIFTCTL_PINPOL_MASK) #define MIO_SHIFTCTL_PINSEL_MASK (0x700U) #define MIO_SHIFTCTL_PINSEL_SHIFT (8U) /*! PINSEL - Shifter Pin Select */ #define MIO_SHIFTCTL_PINSEL(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCTL_PINSEL_SHIFT)) & MIO_SHIFTCTL_PINSEL_MASK) #define MIO_SHIFTCTL_PINCFG_MASK (0x30000U) #define MIO_SHIFTCTL_PINCFG_SHIFT (16U) /*! PINCFG - Shifter Pin Configuration * 0b00..Shifter pin output disabled * 0b01..Shifter pin open drain or bidirectional output enable * 0b10..Shifter pin bidirectional output data * 0b11..Shifter pin output */ #define MIO_SHIFTCTL_PINCFG(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCTL_PINCFG_SHIFT)) & MIO_SHIFTCTL_PINCFG_MASK) #define MIO_SHIFTCTL_TIMPOL_MASK (0x800000U) #define MIO_SHIFTCTL_TIMPOL_SHIFT (23U) /*! TIMPOL - Timer Polarity * 0b0..Shift on posedge of Shift clock * 0b1..Shift on negedge of Shift clock */ #define MIO_SHIFTCTL_TIMPOL(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCTL_TIMPOL_SHIFT)) & MIO_SHIFTCTL_TIMPOL_MASK) #define MIO_SHIFTCTL_TIMSEL_MASK (0x3000000U) #define MIO_SHIFTCTL_TIMSEL_SHIFT (24U) /*! TIMSEL - Timer Select */ #define MIO_SHIFTCTL_TIMSEL(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCTL_TIMSEL_SHIFT)) & MIO_SHIFTCTL_TIMSEL_MASK) /*! @} */ /* The count of MIO_SHIFTCTL */ #define MIO_SHIFTCTL_COUNT (4U) /*! @name SHIFTCFG - Shifter Configuration N Register */ /*! @{ */ #define MIO_SHIFTCFG_SSTART_MASK (0x3U) #define MIO_SHIFTCFG_SSTART_SHIFT (0U) /*! SSTART - Shifter Start bit * 0b00..Start bit disabled for transmitter/receiver/match store, transmitter loads data on enable * 0b01..Start bit disabled for transmitter/receiver/match store, transmitter loads data on first shift * 0b10..Transmitter outputs start bit value 0 before loading data on first shift, receiver/match store sets error flag if start bit is not 0 * 0b11..Transmitter outputs start bit value 1 before loading data on first shift, receiver/match store sets error flag if start bit is not 1 */ #define MIO_SHIFTCFG_SSTART(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCFG_SSTART_SHIFT)) & MIO_SHIFTCFG_SSTART_MASK) #define MIO_SHIFTCFG_SSTOP_MASK (0x30U) #define MIO_SHIFTCFG_SSTOP_SHIFT (4U) /*! SSTOP - Shifter Stop bit * 0b00..Stop bit disabled for transmitter/receiver/match store * 0b01..Reserved for transmitter/receiver/match store * 0b10..Transmitter outputs stop bit value 0 on store, receiver/match store sets error flag if stop bit is not 0 * 0b11..Transmitter outputs stop bit value 1 on store, receiver/match store sets error flag if stop bit is not 1 */ #define MIO_SHIFTCFG_SSTOP(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCFG_SSTOP_SHIFT)) & MIO_SHIFTCFG_SSTOP_MASK) #define MIO_SHIFTCFG_INSRC_MASK (0x100U) #define MIO_SHIFTCFG_INSRC_SHIFT (8U) /*! INSRC - Input Source * 0b0..Pin * 0b1..Shifter N+1 Output */ #define MIO_SHIFTCFG_INSRC(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTCFG_INSRC_SHIFT)) & MIO_SHIFTCFG_INSRC_MASK) /*! @} */ /* The count of MIO_SHIFTCFG */ #define MIO_SHIFTCFG_COUNT (4U) /*! @name SHIFTBUF - Shifter Buffer N Register */ /*! @{ */ #define MIO_SHIFTBUF_SHIFTBUF_MASK (0xFFFFFFFFU) #define MIO_SHIFTBUF_SHIFTBUF_SHIFT (0U) /*! SHIFTBUF - Shift Buffer */ #define MIO_SHIFTBUF_SHIFTBUF(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTBUF_SHIFTBUF_SHIFT)) & MIO_SHIFTBUF_SHIFTBUF_MASK) /*! @} */ /* The count of MIO_SHIFTBUF */ #define MIO_SHIFTBUF_COUNT (4U) /*! @name SHIFTBUFBIS - Shifter Buffer N Bit Swapped Register */ /*! @{ */ #define MIO_SHIFTBUFBIS_SHIFTBUFBIS_MASK (0xFFFFFFFFU) #define MIO_SHIFTBUFBIS_SHIFTBUFBIS_SHIFT (0U) /*! SHIFTBUFBIS - Shift Buffer */ #define MIO_SHIFTBUFBIS_SHIFTBUFBIS(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTBUFBIS_SHIFTBUFBIS_SHIFT)) & MIO_SHIFTBUFBIS_SHIFTBUFBIS_MASK) /*! @} */ /* The count of MIO_SHIFTBUFBIS */ #define MIO_SHIFTBUFBIS_COUNT (4U) /*! @name SHIFTBUFBYS - Shifter Buffer N Byte Swapped Register */ /*! @{ */ #define MIO_SHIFTBUFBYS_SHIFTBUFBYS_MASK (0xFFFFFFFFU) #define MIO_SHIFTBUFBYS_SHIFTBUFBYS_SHIFT (0U) /*! SHIFTBUFBYS - Shift Buffer */ #define MIO_SHIFTBUFBYS_SHIFTBUFBYS(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTBUFBYS_SHIFTBUFBYS_SHIFT)) & MIO_SHIFTBUFBYS_SHIFTBUFBYS_MASK) /*! @} */ /* The count of MIO_SHIFTBUFBYS */ #define MIO_SHIFTBUFBYS_COUNT (4U) /*! @name SHIFTBUFBBS - Shifter Buffer N Bit Byte Swapped Register */ /*! @{ */ #define MIO_SHIFTBUFBBS_SHIFTBUFBBS_MASK (0xFFFFFFFFU) #define MIO_SHIFTBUFBBS_SHIFTBUFBBS_SHIFT (0U) /*! SHIFTBUFBBS - Shift Buffer */ #define MIO_SHIFTBUFBBS_SHIFTBUFBBS(x) (((uint32_t)(((uint32_t)(x)) << MIO_SHIFTBUFBBS_SHIFTBUFBBS_SHIFT)) & MIO_SHIFTBUFBBS_SHIFTBUFBBS_MASK) /*! @} */ /* The count of MIO_SHIFTBUFBBS */ #define MIO_SHIFTBUFBBS_COUNT (4U) /*! @name TIMCTL - Timer Control N Register */ /*! @{ */ #define MIO_TIMCTL_TIMOD_MASK (0x3U) #define MIO_TIMCTL_TIMOD_SHIFT (0U) /*! TIMOD - Timer Mode * 0b00..Timer Disabled. * 0b01..Dual 8-bit counters baud/bit mode. * 0b10..Dual 8-bit counters PWM mode. * 0b11..Single 16-bit counter mode. */ #define MIO_TIMCTL_TIMOD(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCTL_TIMOD_SHIFT)) & MIO_TIMCTL_TIMOD_MASK) #define MIO_TIMCTL_PINPOL_MASK (0x80U) #define MIO_TIMCTL_PINPOL_SHIFT (7U) /*! PINPOL - Timer Pin Polarity * 0b0..Pin is active high * 0b1..Pin is active low */ #define MIO_TIMCTL_PINPOL(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCTL_PINPOL_SHIFT)) & MIO_TIMCTL_PINPOL_MASK) #define MIO_TIMCTL_PINSEL_MASK (0x700U) #define MIO_TIMCTL_PINSEL_SHIFT (8U) /*! PINSEL - Timer Pin Select */ #define MIO_TIMCTL_PINSEL(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCTL_PINSEL_SHIFT)) & MIO_TIMCTL_PINSEL_MASK) #define MIO_TIMCTL_PINCFG_MASK (0x30000U) #define MIO_TIMCTL_PINCFG_SHIFT (16U) /*! PINCFG - Timer Pin Configuration * 0b00..Timer pin output disabled * 0b01..Timer pin open drain or bidirectional output enable * 0b10..Timer pin bidirectional output data * 0b11..Timer pin output */ #define MIO_TIMCTL_PINCFG(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCTL_PINCFG_SHIFT)) & MIO_TIMCTL_PINCFG_MASK) #define MIO_TIMCTL_TRGSRC_MASK (0x400000U) #define MIO_TIMCTL_TRGSRC_SHIFT (22U) /*! TRGSRC - Trigger Source * 0b0..External trigger selected * 0b1..Internal trigger selected */ #define MIO_TIMCTL_TRGSRC(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCTL_TRGSRC_SHIFT)) & MIO_TIMCTL_TRGSRC_MASK) #define MIO_TIMCTL_TRGPOL_MASK (0x800000U) #define MIO_TIMCTL_TRGPOL_SHIFT (23U) /*! TRGPOL - Trigger Polarity * 0b0..Trigger active high * 0b1..Trigger active low */ #define MIO_TIMCTL_TRGPOL(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCTL_TRGPOL_SHIFT)) & MIO_TIMCTL_TRGPOL_MASK) #define MIO_TIMCTL_TRGSEL_MASK (0xF000000U) #define MIO_TIMCTL_TRGSEL_SHIFT (24U) /*! TRGSEL - Trigger Select */ #define MIO_TIMCTL_TRGSEL(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCTL_TRGSEL_SHIFT)) & MIO_TIMCTL_TRGSEL_MASK) /*! @} */ /* The count of MIO_TIMCTL */ #define MIO_TIMCTL_COUNT (4U) /*! @name TIMCFG - Timer Configuration N Register */ /*! @{ */ #define MIO_TIMCFG_TSTART_MASK (0x2U) #define MIO_TIMCFG_TSTART_SHIFT (1U) /*! TSTART - Timer Start Bit * 0b0..Start bit disabled * 0b1..Start bit enabled */ #define MIO_TIMCFG_TSTART(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCFG_TSTART_SHIFT)) & MIO_TIMCFG_TSTART_MASK) #define MIO_TIMCFG_TSTOP_MASK (0x30U) #define MIO_TIMCFG_TSTOP_SHIFT (4U) /*! TSTOP - Timer Stop Bit * 0b00..Stop bit disabled * 0b01..Stop bit is enabled on timer compare * 0b10..Stop bit is enabled on timer disable * 0b11..Stop bit is enabled on timer compare and timer disable */ #define MIO_TIMCFG_TSTOP(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCFG_TSTOP_SHIFT)) & MIO_TIMCFG_TSTOP_MASK) #define MIO_TIMCFG_TIMENA_MASK (0x700U) #define MIO_TIMCFG_TIMENA_SHIFT (8U) /*! TIMENA - Timer Enable * 0b000..Timer always enabled * 0b001..Timer enabled on Timer N-1 enable * 0b010..Timer enabled on Trigger high * 0b011..Timer enabled on Trigger high and Pin high * 0b100..Timer enabled on Pin rising edge * 0b101..Timer enabled on Pin rising edge and Trigger high * 0b110..Timer enabled on Trigger rising edge * 0b111..Timer enabled on Trigger rising or falling edge */ #define MIO_TIMCFG_TIMENA(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCFG_TIMENA_SHIFT)) & MIO_TIMCFG_TIMENA_MASK) #define MIO_TIMCFG_TIMDIS_MASK (0x7000U) #define MIO_TIMCFG_TIMDIS_SHIFT (12U) /*! TIMDIS - Timer Disable * 0b000..Timer never disabled * 0b001..Timer disabled on Timer N-1 disable * 0b010..Timer disabled on Timer compare * 0b011..Timer disabled on Timer compare and Trigger Low * 0b100..Timer disabled on Pin rising or falling edge * 0b101..Timer disabled on Pin rising or falling edge provided Trigger is high * 0b110..Timer disabled on Trigger falling edge * 0b111..Reserved */ #define MIO_TIMCFG_TIMDIS(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCFG_TIMDIS_SHIFT)) & MIO_TIMCFG_TIMDIS_MASK) #define MIO_TIMCFG_TIMRST_MASK (0x70000U) #define MIO_TIMCFG_TIMRST_SHIFT (16U) /*! TIMRST - Timer Reset * 0b000..Timer never reset * 0b001..Reserved * 0b010..Timer reset on Timer Pin equal to Timer Output * 0b011..Timer reset on Timer Trigger equal to Timer Output * 0b100..Timer reset on Timer Pin rising edge * 0b101..Reserved * 0b110..Timer reset on Trigger rising edge * 0b111..Timer reset on Trigger rising or falling edge */ #define MIO_TIMCFG_TIMRST(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCFG_TIMRST_SHIFT)) & MIO_TIMCFG_TIMRST_MASK) #define MIO_TIMCFG_TIMDEC_MASK (0x300000U) #define MIO_TIMCFG_TIMDEC_SHIFT (20U) /*! TIMDEC - Timer Decrement * 0b00..Decrement counter on MIO clock, Shift clock equals Timer output. * 0b01..Decrement counter on Trigger input (both edges), Shift clock equals Timer output. * 0b10..Decrement counter on Pin input (both edges), Shift clock equals Pin input. * 0b11..Decrement counter on Trigger input (both edges), Shift clock equals Trigger input. */ #define MIO_TIMCFG_TIMDEC(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCFG_TIMDEC_SHIFT)) & MIO_TIMCFG_TIMDEC_MASK) #define MIO_TIMCFG_TIMOUT_MASK (0x3000000U) #define MIO_TIMCFG_TIMOUT_SHIFT (24U) /*! TIMOUT - Timer Output * 0b00..Timer output is logic one when enabled and is not affected by timer reset * 0b01..Timer output is logic zero when enabled and is not affected by timer reset * 0b10..Timer output is logic one when enabled and on timer reset * 0b11..Timer output is logic zero when enabled and on timer reset */ #define MIO_TIMCFG_TIMOUT(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCFG_TIMOUT_SHIFT)) & MIO_TIMCFG_TIMOUT_MASK) /*! @} */ /* The count of MIO_TIMCFG */ #define MIO_TIMCFG_COUNT (4U) /*! @name TIMCMP - Timer Compare N Register */ /*! @{ */ #define MIO_TIMCMP_CMP_MASK (0xFFFFU) #define MIO_TIMCMP_CMP_SHIFT (0U) /*! CMP - Timer Compare Value */ #define MIO_TIMCMP_CMP(x) (((uint32_t)(((uint32_t)(x)) << MIO_TIMCMP_CMP_SHIFT)) & MIO_TIMCMP_CMP_MASK) /*! @} */ /* The count of MIO_TIMCMP */ #define MIO_TIMCMP_COUNT (4U) /*! * @} */ /* end of group MIO_Register_Masks */ /* MIO - Peripheral instance base addresses */ /** Peripheral MIO base address */ //#define MIO_BASE (0x40018000u) /** Peripheral MIO base pointer */ #define MIO ((MIO_Type *)MIO_BASE) /** Array initializer of MIO peripheral base addresses */ #define MIO_BASE_ADDRS { MIO_BASE } /** Array initializer of MIO peripheral base pointers */ #define MIO_BASE_PTRS { MIO } /** Interrupt vectors for the MIO peripheral type */ #define MIO_IRQS { MIO_IRQn } /*! * @} */ /* end of group MIO_Peripheral_Access_Layer */ /*! * @addtogroup mio_driver * @{ */ /******************************************************************************* * Definitions ******************************************************************************/ typedef enum { MIO_SHIFT0_IT_SSIE, MIO_SHIFT1_IT_SSIE, MIO_SHIFT0_IT_SEIE, MIO_SHIFT1_IT_SEIE, MIO_TIMER0_IT_TSIE, MIO_TIMER1_IT_TSIE, } MIO_IT_t; typedef enum { MIO_SHIFT0_IT_FLAG_SSF, MIO_SHIFT1_IT_FLAG_SSF, MIO_SHIFT0_IT_FLAG_SEF, MIO_SHIFT1_IT_FLAG_SEF, MIO_TIMER0_IT_FLAG_TSF, MIO_TIMER1_IT_FLAG_TSF, } MIO_IT_FLAG_t; typedef enum { MIO_SHIFT0_FLAG_SSF, MIO_SHIFT1_FLAG_SSF, MIO_SHIFT0_FLAG_SEF, MIO_SHIFT1_FLAG_SEF, MIO_TIMER0_FLAG_TSF, MIO_TIMER1_FLAG_TSF, } MIO_FLAG_t; #define MIO_TIM_TRIG_PIN(x) ((uint8_t)(x) << 1U) #define MIO_TIM_TRIG_SHIFT(x) (((uint8_t)(x) << 2U) | 0x1U) #define MIO_TIM_TRIG_TIMER(x) (((uint8_t)(x) << 2U) | 0x3U) #define MIO_TIM_TRIG_XLINK(x) ((uint8_t)(x)) /*! @brief Calculate MIO timer trigger.*/ //#define MIO_TIMER_TRIGGER_SEL_PININPUT(x) ((uint32_t)(x) << 1U) //#define MIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(x) (((uint32_t)(x) << 2U) | 0x1U) //#define MIO_TIMER_TRIGGER_SEL_TIMn(x) (((uint32_t)(x) << 2U) | 0x3U) /*! @brief Define time of timer trigger polarity.*/ typedef enum _mio_timer_trigger_polarity { MIO_TimerTriggerPolarityActiveHigh = 0x0U, /*!< Active high. */ MIO_TimerTriggerPolarityActiveLow = 0x1U, /*!< Active low. */ } mio_timer_trigger_polarity_t; /*! @brief Define type of timer trigger source.*/ typedef enum _mio_timer_trigger_source { MIO_TimerTriggerSourceExternal = 0x0U, /*!< External trigger selected. */ MIO_TimerTriggerSourceInternal = 0x1U, /*!< Internal trigger selected. */ } mio_timer_trigger_source_t; /*! @brief Define type of timer/shifter pin configuration.*/ typedef enum _mio_pin_config { MIO_PinConfigOutputDisabled = 0x0U, /*!< Pin output disabled. */ MIO_PinConfigOpenDrainOrBidirection = 0x1U, /*!< Pin open drain or bidirectional output enable. */ MIO_PinConfigBidirectionOutputData = 0x2U, /*!< Pin bidirectional output data. */ MIO_PinConfigOutput = 0x3U, /*!< Pin output. */ } mio_pin_config_t; /*! @brief Definition of pin polarity.*/ typedef enum _mio_pin_polarity { MIO_PinActiveHigh = 0x0U, /*!< Active high. */ MIO_PinActiveLow = 0x1U, /*!< Active low. */ } mio_pin_polarity_t; /*! @brief Define type of timer work mode.*/ typedef enum _mio_timer_mode { MIO_TimerModeDisabled = 0x0U, /*!< Timer Disabled. */ MIO_TimerModeDual8BitBaudBit = 0x1U, /*!< Dual 8-bit counters baud/bit mode. */ MIO_TimerModeDual8BitPWM = 0x2U, /*!< Dual 8-bit counters PWM mode. */ MIO_TimerModeSingle16Bit = 0x3U, /*!< Single 16-bit counter mode. */ } mio_timer_mode_t; /*! @brief Define type of timer initial output or timer reset condition.*/ typedef enum _mio_timer_output { MIO_TimerOutputOneNotAffectedByReset = 0x0U, /*!< Logic one when enabled and is not affected by timer reset. */ MIO_TimerOutputZeroNotAffectedByReset = 0x1U, /*!< Logic zero when enabled and is not affected by timer reset. */ MIO_TimerOutputOneAffectedByReset = 0x2U, /*!< Logic one when enabled and on timer reset. */ MIO_TimerOutputZeroAffectedByReset = 0x3U, /*!< Logic zero when enabled and on timer reset. */ } mio_timer_output_t; /*! @brief Define type of timer decrement.*/ typedef enum _mio_timer_decrement_source { MIO_TimerDecSrcOnMIOClockShiftTimerOutput = 0x0U, /*!< Decrement counter on MIO clock, Shift clock equals Timer output. */ MIO_TimerDecSrcOnTriggerInputShiftTimerOutput, /*!< Decrement counter on Trigger input (both edges), Shift clock equals Timer output. */ MIO_TimerDecSrcOnPinInputShiftPinInput, /*!< Decrement counter on Pin input (both edges), Shift clock equals Pin input. */ MIO_TimerDecSrcOnTriggerInputShiftTriggerInput /*!< Decrement counter on Trigger input (both edges), Shift clock equals Trigger input. */ #if (defined(LHC_FEATURE_MIO_TIMCFG_TIMDCE_FIELD_WIDTH) && (LHC_FEATURE_MIO_TIMCFG_TIMDCE_FIELD_WIDTH == 3)) , MIO_TimerDecSrcDiv16OnMIOClockShiftTimerOutput, /*!< Decrement counter on MIO clock divided by 16, Shift clock equals Timer output. */ MIO_TimerDecSrcDiv256OnMIOClockShiftTimerOutput, /*!< Decrement counter on MIO clock divided by 256, Shift clock equals Timer output. */ MIO_TimerRisSrcOnPinInputShiftPinInput, /*!< Decrement counter on Pin input (rising edges), Shift clock equals Pin input. */ MIO_TimerRisSrcOnTriggerInputShiftTriggerInput /*!< Decrement counter on Trigger input (rising edges), Shift clock equals Trigger input. */ #endif /* LHC_FEATURE_MIO_TIMCFG_TIMDCE_FIELD_WIDTH */ } mio_timer_decrement_source_t; /*! @brief Define type of timer reset condition.*/ typedef enum _mio_timer_reset_condition { MIO_TimerResetNever = 0x0U, /*!< Timer never reset. */ MIO_TimerResetOnTimerPinEqualToTimerOutput = 0x2U, /*!< Timer reset on Timer Pin equal to Timer Output. */ MIO_TimerResetOnTimerTriggerEqualToTimerOutput = 0x3U, /*!< Timer reset on Timer Trigger equal to Timer Output. */ MIO_TimerResetOnTimerPinRisingEdge = 0x4U, /*!< Timer reset on Timer Pin rising edge. */ MIO_TimerResetOnTimerTriggerRisingEdge = 0x6U, /*!< Timer reset on Trigger rising edge. */ MIO_TimerResetOnTimerTriggerBothEdge = 0x7U, /*!< Timer reset on Trigger rising or falling edge. */ } mio_timer_reset_condition_t; /*! @brief Define type of timer disable condition.*/ typedef enum _mio_timer_disable_condition { MIO_TimerDisableNever = 0x0U, /*!< Timer never disabled. */ MIO_TimerDisableOnPreTimerDisable = 0x1U, /*!< Timer disabled on Timer N-1 disable. */ MIO_TimerDisableOnTimerCompare = 0x2U, /*!< Timer disabled on Timer compare. */ MIO_TimerDisableOnTimerCompareTriggerLow = 0x3U, /*!< Timer disabled on Timer compare and Trigger Low. */ MIO_TimerDisableOnPinBothEdge = 0x4U, /*!< Timer disabled on Pin rising or falling edge. */ MIO_TimerDisableOnPinBothEdgeTriggerHigh = 0x5U, /*!< Timer disabled on Pin rising or falling edge provided Trigger is high. */ MIO_TimerDisableOnTriggerFallingEdge = 0x6U, /*!< Timer disabled on Trigger falling edge. */ } mio_timer_disable_condition_t; /*! @brief Define type of timer enable condition.*/ typedef enum _mio_timer_enable_condition { MIO_TimerEnabledAlways = 0x0U, /*!< Timer always enabled. */ MIO_TimerEnableOnPrevTimerEnable = 0x1U, /*!< Timer enabled on Timer N-1 enable. */ MIO_TimerEnableOnTriggerHigh = 0x2U, /*!< Timer enabled on Trigger high. */ MIO_TimerEnableOnTriggerHighPinHigh = 0x3U, /*!< Timer enabled on Trigger high and Pin high. */ MIO_TimerEnableOnPinRisingEdge = 0x4U, /*!< Timer enabled on Pin rising edge. */ MIO_TimerEnableOnPinRisingEdgeTriggerHigh = 0x5U, /*!< Timer enabled on Pin rising edge and Trigger high. */ MIO_TimerEnableOnTriggerRisingEdge = 0x6U, /*!< Timer enabled on Trigger rising edge. */ MIO_TimerEnableOnTriggerBothEdge = 0x7U, /*!< Timer enabled on Trigger rising or falling edge. */ } mio_timer_enable_condition_t; /*! @brief Define type of timer stop bit generate condition.*/ typedef enum _mio_timer_stop_bit_condition { MIO_TimerStopBitDisabled = 0x0U, /*!< Stop bit disabled. */ MIO_TimerStopBitEnableOnTimerCompare = 0x1U, /*!< Stop bit is enabled on timer compare. */ MIO_TimerStopBitEnableOnTimerDisable = 0x2U, /*!< Stop bit is enabled on timer disable. */ MIO_TimerStopBitEnableOnTimerCompareDisable = 0x3U, /*!< Stop bit is enabled on timer compare and timer disable. */ } mio_timer_stop_bit_condition_t; /*! @brief Define type of timer start bit generate condition.*/ typedef enum _mio_timer_start_bit_condition { MIO_TimerStartBitDisabled = 0x0U, /*!< Start bit disabled. */ MIO_TimerStartBitEnabled = 0x1U, /*!< Start bit enabled. */ } mio_timer_start_bit_condition_t; /*! @brief MIO as PWM channel output state */ typedef enum _mio_timer_output_state { MIO_PwmLow = 0, /*!< The output state of PWM channel is low */ MIO_PwmHigh, /*!< The output state of PWM channel is high */ } mio_timer_output_state_t; /*! @brief Define type of timer polarity for shifter control. */ typedef enum _mio_shifter_timer_polarity { MIO_ShifterTimerPolarityOnPositive = 0x0U, /*!< Shift on positive edge of shift clock. */ MIO_ShifterTimerPolarityOnNegitive = 0x1U, /*!< Shift on negative edge of shift clock. */ } mio_shifter_timer_polarity_t; /*! @brief Define type of shifter working mode.*/ typedef enum _mio_shifter_mode { MIO_ShifterDisabled = 0x0U, /*!< Shifter is disabled. */ MIO_ShifterModeReceive = 0x1U, /*!< Receive mode. */ MIO_ShifterModeTransmit = 0x2U, /*!< Transmit mode. */ MIO_ShifterModeMatchStore = 0x4U, /*!< Match store mode. */ MIO_ShifterModeMatchContinuous = 0x5U, /*!< Match continuous mode. */ #if defined(LHC_FEATURE_MIO_HAS_STATE_MODE) && LHC_FEATURE_MIO_HAS_STATE_MODE MIO_ShifterModeState = 0x6U, /*!< SHIFTBUF contents are used for storing programmable state attributes. */ #endif /* LHC_FEATURE_MIO_HAS_STATE_MODE */ #if defined(LHC_FEATURE_MIO_HAS_LOGIC_MODE) && LHC_FEATURE_MIO_HAS_LOGIC_MODE MIO_ShifterModeLogic = 0x7U, /*!< SHIFTBUF contents are used for implementing programmable logic look up table. */ #endif /* LHC_FEATURE_MIO_HAS_LOGIC_MODE */ } mio_shifter_mode_t; /*! @brief Define type of shifter input source.*/ typedef enum _mio_shifter_input_source { MIO_ShifterInputFromPin = 0x0U, /*!< Shifter input from pin. */ MIO_ShifterInputFromNextShifterOutput = 0x1U, /*!< Shifter input from Shifter N+1. */ } mio_shifter_input_source_t; /*! @brief Define of STOP bit configuration.*/ typedef enum _mio_shifter_stop_bit { MIO_ShifterStopBitDisable = 0x0U, /*!< Disable shifter stop bit. */ MIO_ShifterStopBitLow = 0x2U, /*!< Set shifter stop bit to logic low level. */ MIO_ShifterStopBitHigh = 0x3U, /*!< Set shifter stop bit to logic high level. */ } mio_shifter_stop_bit_t; /*! @brief Define type of START bit configuration.*/ typedef enum _mio_shifter_start_bit { MIO_ShifterStartBitDisabledLoadDataOnEnable = 0x0U, /*!< Disable shifter start bit, transmitter loads data on enable. */ MIO_ShifterStartBitDisabledLoadDataOnShift = 0x1U, /*!< Disable shifter start bit, transmitter loads data on first shift. */ MIO_ShifterStartBitLow = 0x2U, /*!< Set shifter start bit to logic low level. */ MIO_ShifterStartBitHigh = 0x3U, /*!< Set shifter start bit to logic high level. */ } mio_shifter_start_bit_t; /*! @brief Define MIO shifter buffer type*/ typedef enum _mio_shifter_buffer_type { MIO_ShifterBuffer = 0x0U, /*!< Shifter Buffer N Register. */ MIO_ShifterBufferBitSwapped = 0x1U, /*!< Shifter Buffer N Bit Byte Swapped Register. */ MIO_ShifterBufferByteSwapped = 0x2U, /*!< Shifter Buffer N Byte Swapped Register. */ MIO_ShifterBufferBitByteSwapped = 0x3U, /*!< Shifter Buffer N Bit Swapped Register. */ #if defined(LHC_FEATURE_MIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP) && LHC_FEATURE_MIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP MIO_ShifterBufferNibbleByteSwapped = 0x4U, /*!< Shifter Buffer N Nibble Byte Swapped Register. */ #endif /*LHC_FEATURE_MIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP*/ #if defined(LHC_FEATURE_MIO_HAS_SHFT_BUFFER_HALF_WORD_SWAP) && LHC_FEATURE_MIO_HAS_SHFT_BUFFER_HALF_WORD_SWAP MIO_ShifterBufferHalfWordSwapped = 0x5U, /*!< Shifter Buffer N Half Word Swapped Register. */ #endif #if defined(LHC_FEATURE_MIO_HAS_SHFT_BUFFER_NIBBLE_SWAP) && LHC_FEATURE_MIO_HAS_SHFT_BUFFER_NIBBLE_SWAP MIO_ShifterBufferNibbleSwapped = 0x6U, /*!< Shifter Buffer N Nibble Swapped Register. */ #endif } mio_shifter_buffer_type_t; /*! @brief Define MIO user configuration structure. */ typedef struct _mio_config_ { bool enableMio; /*!< Enable/disable MIO module */ bool enableInDoze; /*!< Enable/disable MIO operation in doze mode */ bool enableInDebug; /*!< Enable/disable MIO operation in debug mode */ bool enableFastAccess; /*!< Enable/disable fast access to MIO registers, fast access requires the MIO clock to be at least twice the frequency of the bus clock. */ } mio_config_t; /*! @brief Define MIO timer configuration structure. */ typedef struct _mio_timer_config { /* Trigger. */ uint32_t triggerSelect; /*!< The internal trigger selection number using MACROs. */ mio_timer_trigger_polarity_t triggerPolarity; /*!< Trigger Polarity. */ mio_timer_trigger_source_t triggerSource; /*!< Trigger Source, internal (see 'trgsel') or external. */ /* Pin. */ mio_pin_config_t pinConfig; /*!< Timer Pin Configuration. */ uint32_t pinSelect; /*!< Timer Pin number Select. */ mio_pin_polarity_t pinPolarity; /*!< Timer Pin Polarity. */ /* Timer. */ mio_timer_mode_t timerMode; /*!< Timer work Mode. */ mio_timer_output_t timerOutput; /*!< Configures the initial state of the Timer Output and whether it is affected by the Timer reset. */ mio_timer_decrement_source_t timerDecrement; /*!< Configures the source of the Timer decrement and the source of the Shift clock. */ mio_timer_reset_condition_t timerReset; /*!< Configures the condition that causes the timer counter (and optionally the timer output) to be reset. */ mio_timer_disable_condition_t timerDisable; /*!< Configures the condition that causes the Timer to be disabled and stop decrementing. */ mio_timer_enable_condition_t timerEnable; /*!< Configures the condition that causes the Timer to be enabled and start decrementing. */ mio_timer_stop_bit_condition_t timerStop; /*!< Timer STOP Bit generation. */ mio_timer_start_bit_condition_t timerStart; /*!< Timer STRAT Bit generation. */ uint32_t timerCompare; /*!< Value for Timer Compare N Register. */ } mio_timer_config_t; /*! @brief Define MIO shifter configuration structure. */ typedef struct _mio_shifter_config { /* Timer. */ uint32_t timerSelect; /*!< Selects which Timer is used for controlling the logic/shift register and generating the Shift clock. */ mio_shifter_timer_polarity_t timerPolarity; /*!< Timer Polarity. */ /* Pin. */ mio_pin_config_t pinConfig; /*!< Shifter Pin Configuration. */ uint32_t pinSelect; /*!< Shifter Pin number Select. */ mio_pin_polarity_t pinPolarity; /*!< Shifter Pin Polarity. */ /* Shifter. */ mio_shifter_mode_t shifterMode; /*!< Configures the mode of the Shifter. */ #if defined(LHC_FEATURE_MIO_HAS_PARALLEL_WIDTH) && LHC_FEATURE_MIO_HAS_PARALLEL_WIDTH uint32_t parallelWidth; /*!< Configures the parallel width when using parallel mode.*/ #endif /* LHC_FEATURE_MIO_HAS_PARALLEL_WIDTH */ mio_shifter_input_source_t inputSource; /*!< Selects the input source for the shifter. */ mio_shifter_stop_bit_t shifterStop; /*!< Shifter STOP bit. */ mio_shifter_start_bit_t shifterStart; /*!< Shifter START bit. */ } mio_shifter_config_t; #if defined(LHC_FEATURE_MIO_HAS_PIN_REGISTER) && LHC_FEATURE_MIO_HAS_PIN_REGISTER /*! @brief MIO gpio direction definition */ typedef enum _mio_gpio_direction { MIO_DigitalInput = 0U, /*!< Set current pin as digital input*/ MIO_DigitalOutput = 1U, /*!< Set current pin as digital output*/ } mio_gpio_direction_t; /*! @brief MIO gpio input config */ typedef enum _mio_pin_input_config { MIO_InputInterruptDisabled = 0x0U, /*!< Interrupt request is disabled. */ MIO_InputInterruptEnable = 0x1U, /*!< Interrupt request is enable. */ MIO_FlagRisingEdgeEnable = 0x2U, /*!< Input pin flag on rising edge. */ MIO_FlagFallingEdgeEnable = 0x4U, /*!< Input pin flag on falling edge. */ } mio_pin_input_config_t; /*! * @brief The MIO pin configuration structure. * * Each pin can only be configured as either an output pin or an input pin at a time. * If configured as an input pin, use inputConfig param. * If configured as an output pin, use outputLogic. */ typedef struct _mio_gpio_config { mio_gpio_direction_t pinDirection; /*!< MIO pin direction, input or output */ uint8_t outputLogic; /*!< Set a default output logic, which has no use in input */ uint8_t inputConfig; /*!< Set an input config */ } mio_gpio_config_t; #endif /*LHC_FEATURE_MIO_HAS_PIN_REGISTER*/ /*! @brief typedef for MIO simulated driver interrupt handler.*/ typedef void (*mio_isr_t)(void *base, void *handle); /******************************************************************************* * Variables ******************************************************************************/ ///*! @brief Pointers to mio bases for each instance. */ //extern MIO_Type *const s_mioBases[]; //#if !(defined(LHC_SDK_DISABLE_DRIVER_CLOCK_CONTROL) && LHC_SDK_DISABLE_DRIVER_CLOCK_CONTROL) ///*! @brief Pointers to mio clocks for each instance. */ //extern const clock_ip_name_t s_mioClocks[]; //#endif /* LHC_SDK_DISABLE_DRIVER_CLOCK_CONTROL */ /******************************************************************************* * API ******************************************************************************/ #if defined(LHC_FEATURE_MIO_HAS_PIN_STATUS) && LHC_FEATURE_MIO_HAS_PIN_STATUS /*! * @brief Reads the input data on each of the MIO pins. * * @param base MIO peripheral base address * @return MIO pin input data */ static inline uint32_t MIO_ReadPinInput(MIO_Type *base) { return base->PIN; } #endif /*LHC_FEATURE_MIO_HAS_PIN_STATUS*/ #if defined(LHC_FEATURE_MIO_HAS_STATE_MODE) && LHC_FEATURE_MIO_HAS_STATE_MODE /*! * @brief Gets the current state pointer for state mode use. * * @param base MIO peripheral base address * @return current State pointer */ static inline uint8_t MIO_GetShifterState(MIO_Type *base) { return ((uint8_t)(base->SHIFTSTATE) & MIO_SHIFTSTATE_STATE_MASK); } #endif /*LHC_FEATURE_MIO_HAS_STATE_MODE*/ /*! * @brief Configures the shifter with the shifter configuration. The configuration structure * covers both the SHIFTCTL and SHIFTCFG registers. To configure the shifter to the proper * mode, select which timer controls the shifter to shift, whether to generate start bit/stop * bit, and the polarity of start bit and stop bit. * * Example @code mio_shifter_config_t config = { .timerSelect = 0, .timerPolarity = MIO_ShifterTimerPolarityOnPositive, .pinConfig = MIO_PinConfigOpenDrainOrBidirection, .pinPolarity = MIO_PinActiveLow, .shifterMode = MIO_ShifterModeTransmit, .inputSource = MIO_ShifterInputFromPin, .shifterStop = MIO_ShifterStopBitHigh, .shifterStart = MIO_ShifterStartBitLow }; MIO_SetShifterConfig(base, &config); @endcode * * @param base MIO peripheral base address * @param index Shifter index * @param shifterConfig Pointer to mio_shifter_config_t structure */ void MIO_SetShifterConfig(MIO_Type *base, uint8_t index, const mio_shifter_config_t *shifterConfig); /*! * @brief Configures the timer with the timer configuration. The configuration structure * covers both the TIMCTL and TIMCFG registers. To configure the timer to the proper * mode, select trigger source for timer and the timer pin output and the timing for timer. * * Example @code mio_timer_config_t config = { .triggerSelect = MIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(0), .triggerPolarity = MIO_TimerTriggerPolarityActiveLow, .triggerSource = MIO_TimerTriggerSourceInternal, .pinConfig = MIO_PinConfigOpenDrainOrBidirection, .pinSelect = 0, .pinPolarity = MIO_PinActiveHigh, .timerMode = MIO_TimerModeDual8BitBaudBit, .timerOutput = MIO_TimerOutputZeroNotAffectedByReset, .timerDecrement = MIO_TimerDecSrcOnMIOClockShiftTimerOutput, .timerReset = MIO_TimerResetOnTimerPinEqualToTimerOutput, .timerDisable = MIO_TimerDisableOnTimerCompare, .timerEnable = MIO_TimerEnableOnTriggerHigh, .timerStop = MIO_TimerStopBitEnableOnTimerDisable, .timerStart = MIO_TimerStartBitEnabled }; MIO_SetTimerConfig(base, &config); @endcode * * @param base MIO peripheral base address * @param index Timer index * @param timerConfig Pointer to the mio_timer_config_t structure */ void MIO_SetTimerConfig(MIO_Type *base, uint8_t index, const mio_timer_config_t *timerConfig); #if 0 /*! * @brief This function set the value of the prescaler on mio channels * * @param base Pointer to the MIO simulated peripheral type. * @param index Timer index * @param clocksource Set clock value */ static inline void MIO_SetClockMode(MIO_Type *base, uint8_t index, mio_timer_decrement_source_t clocksource) { uint32_t reg = base->TIMCFG[index]; reg &= ~MIO_TIMCFG_TIMDEC_MASK; reg |= MIO_TIMCFG_TIMDEC(clocksource); base->TIMCFG[index] = reg; } /*! @} */ /*! * @name MIO Interrupt Operation * @{ */ /*! * @brief Enables the shifter status interrupt. The interrupt generates when the corresponding SSF is set. * * @param base MIO peripheral base address * @param mask The shifter status mask which can be calculated by (1 << shifter index) * @note For multiple shifter status interrupt enable, for example, two shifter status enable, can calculate * the mask by using ((1 << shifter index0) | (1 << shifter index1)) */ static inline void MIO_EnableShifterStatusInterrupts(MIO_Type *base, uint32_t mask) { base->SHIFTSIEN |= mask; } /*! * @brief Disables the shifter status interrupt. The interrupt won't generate when the corresponding SSF is set. * * @param base MIO peripheral base address * @param mask The shifter status mask which can be calculated by (1 << shifter index) * @note For multiple shifter status interrupt enable, for example, two shifter status enable, can calculate * the mask by using ((1 << shifter index0) | (1 << shifter index1)) */ static inline void MIO_DisableShifterStatusInterrupts(MIO_Type *base, uint32_t mask) { base->SHIFTSIEN &= ~mask; } /*! * @brief Enables the shifter error interrupt. The interrupt generates when the corresponding SEF is set. * * @param base MIO peripheral base address * @param mask The shifter error mask which can be calculated by (1 << shifter index) * @note For multiple shifter error interrupt enable, for example, two shifter error enable, can calculate * the mask by using ((1 << shifter index0) | (1 << shifter index1)) */ static inline void MIO_EnableShifterErrorInterrupts(MIO_Type *base, uint32_t mask) { base->SHIFTEIEN |= mask; } /*! * @brief Disables the shifter error interrupt. The interrupt won't generate when the corresponding SEF is set. * * @param base MIO peripheral base address * @param mask The shifter error mask which can be calculated by (1 << shifter index) * @note For multiple shifter error interrupt enable, for example, two shifter error enable, can calculate * the mask by using ((1 << shifter index0) | (1 << shifter index1)) */ static inline void MIO_DisableShifterErrorInterrupts(MIO_Type *base, uint32_t mask) { base->SHIFTEIEN &= ~mask; } /*! * @brief Enables the timer status interrupt. The interrupt generates when the corresponding SSF is set. * * @param base MIO peripheral base address * @param mask The timer status mask which can be calculated by (1 << timer index) * @note For multiple timer status interrupt enable, for example, two timer status enable, can calculate * the mask by using ((1 << timer index0) | (1 << timer index1)) */ static inline void MIO_EnableTimerStatusInterrupts(MIO_Type *base, uint32_t mask) { base->TIMIEN |= mask; } /*! * @brief Disables the timer status interrupt. The interrupt won't generate when the corresponding SSF is set. * * @param base MIO peripheral base address * @param mask The timer status mask which can be calculated by (1 << timer index) * @note For multiple timer status interrupt enable, for example, two timer status enable, can calculate * the mask by using ((1 << timer index0) | (1 << timer index1)) */ static inline void MIO_DisableTimerStatusInterrupts(MIO_Type *base, uint32_t mask) { base->TIMIEN &= ~mask; } /*! @} */ /*! * @name MIO Status Operation * @{ */ /*! * @brief Gets the shifter status flags. * * @param base MIO peripheral base address * @return Shifter status flags */ static inline uint32_t MIO_GetShifterStatusFlags(MIO_Type *base) { return ((base->SHIFTSTAT) & MIO_SHIFTSTAT_SSF_MASK); } /*! * @brief Clears the shifter status flags. * * @param base MIO peripheral base address * @param mask The shifter status mask which can be calculated by (1 << shifter index) * @note For clearing multiple shifter status flags, for example, two shifter status flags, can calculate * the mask by using ((1 << shifter index0) | (1 << shifter index1)) */ static inline void MIO_ClearShifterStatusFlags(MIO_Type *base, uint32_t mask) { base->SHIFTSTAT = mask; } /*! * @brief Gets the shifter error flags. * * @param base MIO peripheral base address * @return Shifter error flags */ static inline uint32_t MIO_GetShifterErrorFlags(MIO_Type *base) { return ((base->SHIFTERR) & MIO_SHIFTERR_SEF_MASK); } /*! * @brief Clears the shifter error flags. * * @param base MIO peripheral base address * @param mask The shifter error mask which can be calculated by (1 << shifter index) * @note For clearing multiple shifter error flags, for example, two shifter error flags, can calculate * the mask by using ((1 << shifter index0) | (1 << shifter index1)) */ static inline void MIO_ClearShifterErrorFlags(MIO_Type *base, uint32_t mask) { base->SHIFTERR = mask; } /*! * @brief Gets the timer status flags. * * @param base MIO peripheral base address * @return Timer status flags */ static inline uint32_t MIO_GetTimerStatusFlags(MIO_Type *base) { return ((base->TIMSTAT) & MIO_TIMSTAT_TSF_MASK); } #endif /*! * @brief Clears the timer status flags. * * @param base MIO peripheral base address * @param mask The timer status mask which can be calculated by (1 << timer index) * @note For clearing multiple timer status flags, for example, two timer status flags, can calculate * the mask by using ((1 << timer index0) | (1 << timer index1)) */ /*static inline void MIO_ClearTimerStatusFlags(MIO_Type *base, uint32_t mask) { base->TIMSTAT = mask; } */ /*! @} */ /*! * @name MIO DMA Operation * @{ */ /*! * @brief Enables/disables the shifter status DMA. The DMA request generates when the corresponding SSF is set. * * @note For multiple shifter status DMA enables, for example, calculate * the mask by using ((1 << shifter index0) | (1 << shifter index1)) * * @param base MIO peripheral base address * @param mask The shifter status mask which can be calculated by (1 << shifter index) * @param enable True to enable, false to disable. */ static inline void MIO_EnableShifterStatusDMA(MIO_Type *base, uint32_t mask, bool enable) { if (enable) { base->SHIFTSDEN |= mask; } else { base->SHIFTSDEN &= ~mask; } } /*! * @brief Gets the shifter buffer address for the DMA transfer usage. * * @param base MIO peripheral base address * @param type Shifter type of mio_shifter_buffer_type_t * @param index Shifter index * @return Corresponding shifter buffer index */ uint32_t MIO_GetShifterBufferAddress(MIO_Type *base, mio_shifter_buffer_type_t type, uint8_t index); /*! * @brief Registers the handle and the interrupt handler for the MIO-simulated peripheral. * * @param base Pointer to the MIO simulated peripheral type. * @param handle Pointer to the handler for MIO simulated peripheral. * @param isr MIO simulated peripheral interrupt handler. * @retval kStatus_Success Successfully create the handle. * @retval kStatus_OutOfRange The MIO type/handle/ISR table out of range. */ status_t MIO_RegisterHandleIRQ(void *base, void *handle, mio_isr_t isr); /*! * @brief Unregisters the handle and the interrupt handler for the MIO-simulated peripheral. * * @param base Pointer to the MIO simulated peripheral type. * @retval kStatus_Success Successfully create the handle. * @retval kStatus_OutOfRange The MIO type/handle/ISR table out of range. */ status_t MIO_UnregisterHandleIRQ(void *base); /*! @} */ #if defined(LHC_FEATURE_MIO_HAS_PIN_REGISTER) && LHC_FEATURE_MIO_HAS_PIN_REGISTER /*! * @brief Configure a MIO pin used by the board. * * To Config the MIO PIN, define a pin configuration, as either input or output, in the user file. * Then, call the MIO_SetPinConfig() function. * * This is an example to define an input pin or an output pin configuration. * @code * Define a digital input pin configuration, * mio_gpio_config_t config = * { * MIO_DigitalInput, * 0U, * MIO_FlagRisingEdgeEnable | MIO_InputInterruptEnable, * } * Define a digital output pin configuration, * mio_gpio_config_t config = * { * MIO_DigitalOutput, * 0U, * 0U * } * @endcode * @param base MIO peripheral base address * @param pin MIO pin number. * @param config MIO pin configuration pointer. */ void MIO_SetPinConfig(MIO_Type *base, uint32_t pin, mio_gpio_config_t *config); /*! * @name GPIO Output Operations * @{ */ /*! * @brief Sets the output level of the multiple MIO pins to the logic 0. * * @param base MIO peripheral base address * @param mask MIO pin number mask */ static inline void MIO_ClearPortOutput(MIO_Type *base, uint32_t mask) { base->PINOUTCLR = mask; } /*! * @brief Sets the output level of the multiple MIO pins to the logic 1. * * @param base MIO peripheral base address * @param mask MIO pin number mask */ static inline void MIO_SetPortOutput(MIO_Type *base, uint32_t mask) { base->PINOUTSET = mask; } /*! * @brief Reverses the current output logic of the multiple MIO pins. * * @param base MIO peripheral base address * @param mask MIO pin number mask */ static inline void MIO_TogglePortOutput(MIO_Type *base, uint32_t mask) { base->PINOUTTOG = mask; } /*! * @brief Sets the output level of the MIO pins to the logic 1 or 0. * * @param base MIO peripheral base address * @param pin MIO pin number. * @param output MIO pin output logic level. * - 0: corresponding pin output low-logic level. * - 1: corresponding pin output high-logic level. */ static inline void MIO_PinWrite(MIO_Type *base, uint32_t pin, uint8_t output) { if (output == 0U) { MIO_ClearPortOutput(base, 1UL << pin); } else { MIO_SetPortOutput(base, 1UL << pin); } } /*! * @brief Enables the MIO output pin function. * * @param base MIO peripheral base address * @param pin MIO pin number. */ static inline void MIO_EnablePinOutput(MIO_Type *base, uint32_t pin) { base->PINOUTE |= (1UL << pin); } /*! @} */ /*! * @name MIO PIN Input Operations * @{ */ /*! * @brief Reads the current input value of the MIO pin. * * @param base MIO peripheral base address * @param pin MIO pin number. * @retval MIO port input value * - 0: corresponding pin input low-logic level. * - 1: corresponding pin input high-logic level. */ static inline uint32_t MIO_PinRead(MIO_Type *base, uint32_t pin) { return (((base->PIN) >> pin) & 0x01U); } /*! * @brief Gets the MIO input pin status. * * @param base MIO peripheral base address * @param pin MIO pin number. * @retval MIO port input status * - 0: corresponding pin input capture no status. * - 1: corresponding pin input capture rising or falling edge. */ static inline uint32_t MIO_GetPinStatus(MIO_Type *base, uint32_t pin) { return (((base->PINSTAT) >> pin) & 0x01U); } /*! * @brief Clears the multiple MIO input pins status. * * @param base MIO peripheral base address * @param mask MIO pin number mask */ static inline void MIO_ClearPortStatus(MIO_Type *base, uint32_t mask) { base->PINSTAT = mask; } /*! @} */ #endif /*LHC_FEATURE_MIO_HAS_PIN_REGISTER*/ void LHL_MIO_Init(void); void LHL_MIO_DeInit(void); void LHL_MIO_Reset(void); void LHL_MIO_TimerInit(MIO_TIMER_t id, MIO_TIM_InitTypedef *init); void LHL_MIO_ITConfig(MIO_IT_t MIO_IT, FunctionalState NewState); ITStatus LHL_MIO_GetPending(MIO_IT_t MIO_IT); void LHL_MIO_ClearPending(MIO_IT_FLAG_t IT_FLAG); FlagStatus LHL_MIO_GetFlag(MIO_FLAG_t MIO_FLAG); #ifdef __cplusplus } #endif #endif /*********************************End of File**********************************/