inwudriver-weibo/target/include/interface/rom/soc_mdm_io.h

433 lines
13 KiB
C
Raw Normal View History

/*
* Copyright (c) CompanyNameMagicTag 2018-2020. All rights reserved.
* @defgroup hct_io IO
* @ingroup drivers
*/
#ifndef __SOC_MDM_IO_H__
#define __SOC_MDM_IO_H__
#include <soc_types_rom.h>
#include <soc_mdm_types_rom.h>
/**
* @ingroup hct_io
*
* GPIO ID
* GPIO 1-31 is used in the register.
* DW21E uses the GPIO 1<EFBFBD>C22, anDWDw21S uses GPIO 0<EFBFBD>C21.
* To be compatible with the two SoCs, GPIO 0<EFBFBD>C22 is defined in the software API.
*/
typedef enum {
EXT_GPIO_IDX_0, /**< GPIO0 */
EXT_GPIO_IDX_1, /**< GPIO1 */
EXT_GPIO_IDX_2, /**< GPIO2 */
EXT_GPIO_IDX_3, /**< GPIO3 */
EXT_GPIO_IDX_4, /**< GPIO4 */
EXT_GPIO_IDX_5, /**< GPIO5 */
EXT_GPIO_IDX_6, /**< GPIO6 */
EXT_GPIO_IDX_7, /**< GPIO7 */
EXT_GPIO_IDX_8, /**< GPIO8 */
EXT_GPIO_IDX_9, /**< GPIO9 */
EXT_GPIO_IDX_10, /**< GPIO10 */
EXT_GPIO_IDX_11, /**< GPIO11 */
EXT_GPIO_IDX_12, /**< GPIO12 */
EXT_GPIO_IDX_13, /**< GPIO13 */
EXT_GPIO_IDX_14, /**< GPIO14 */
EXT_GPIO_IDX_15, /**< GPIO15 */
EXT_GPIO_IDX_16, /**< GPIO16 */
EXT_GPIO_IDX_17, /**< GPIO17 */
EXT_GPIO_IDX_18, /**< GPIO18 */
EXT_GPIO_IDX_19, /**< GPIO19 */
EXT_GPIO_IDX_20, /**< GPIO20 */
EXT_GPIO_IDX_21, /**< GPIO21 */
EXT_GPIO_IDX_22, /**< GPIO22 */
EXT_GPIO_IDX_MAX, /**< Maximum value, which cannot be used */
} ext_gpio_idx_e;
/**
* @ingroup hct_io
*
* I/O level
*/
typedef enum {
EXT_GPIO_VALUE0 = 0, /**< Low level */
EXT_GPIO_VALUE1 /**< High level */
} ext_gpio_value_e;
/**
* @ingroup hct_io
*
* I/O direction
*/
typedef enum {
EXT_GPIO_DIRECTION_IN = 0, /**< Input */
EXT_GPIO_DIRECTION_OUT /**< Output */
} ext_gpio_direction_e;
/**
* @ingroup hct_io
*
* I/O interrupt trigger mode. This bit is used with EXT_GPIO_INT_POLARITY_E.
*/
typedef enum {
EXT_INT_LEVEL = 0, /**< The interrupt is triggered in level-sensitive mode. */
EXT_INT_EDGE /**< Interrupt triggered at the rising edge or falling edge */
} ext_gpio_int_e;
/**
* @ingroup hct_io
*
* I/O interrupt polarity. This pin is used with EXT_GPIO_INT_E.
*/
typedef enum {
EXT_EDGE_FALL_LEVEL_LOW = 0, /**< Interrupt triggered at low level or falling edge */
EXT_EDGE_RISE_LEVEL_HIGH /**< Interrupt triggered at high level or rising edge */
} ext_gpio_int_polarity_e;
/**
* @ingroup hct_io
*
* Enumeration of the I/O control register. The enumerated value corresponds to the offset address. For details, see the
* SoC data sheet. To be compatible with the two chips, the control registers of the two chips are written together.
* This API is used to set the I/O pin drive strength and enable pull-up.
*/
typedef enum {
EXT_IO_CTL_RSTN = 0x940,
EXT_IO_CTL_SEL = 0x91C,
EXT_IO_CTL_SFC_WPN = 0x860, /**< Flash write protection pin */
EXT_IO_CTL_SFC_HOLDN = 0x864, /**< Flash Hold pin */
EXT_IO_CTL_SFC_CLK = 0x920, /**< Flash CLK pin */
EXT_IO_CTL_SFC_CSN = 0x924, /**< Flash CSN pin */
EXT_IO_CTL_SFC_DI = 0x928, /**< Flash DI pin, input relative to the SoC */
EXT_IO_CTL_SFC_DO = 0x92C, /**< Flash DO pin, output relative to the SoC */
EXT_IO_CTL_GPIO_0 = 0x800,
EXT_IO_CTL_GPIO_1 = 0x804,
EXT_IO_CTL_GPIO_2 = 0x808,
EXT_IO_CTL_GPIO_3 = 0x80C,
EXT_IO_CTL_GPIO_4 = 0x810,
EXT_IO_CTL_LDRVR_PD = 0x814,
EXT_IO_CTL_GPIO_6 = 0x930,
EXT_IO_CTL_GPIO_7 = 0x81C,
EXT_IO_CTL_GPIO_8 = 0x820,
EXT_IO_CTL_GPIO_9 = 0x824,
EXT_IO_CTL_GPIO_10 = 0x828,
EXT_IO_CTL_GPIO_11 = 0x834,
EXT_IO_CTL_GPIO_12 = 0x838,
EXT_IO_CTL_UART1_RXD = 0x83C,
EXT_IO_CTL_UART1_TXD = 0x840,
EXT_IO_CTL_GPIO_15 = 0x844,
EXT_IO_CTL_GPIO_16 = 0x848,
EXT_IO_CTL_GPIO_17 = 0x84C,
EXT_IO_CTL_GPIO_18 = 0x850,
EXT_IO_CTL_GPIO_19 = 0x854,
EXT_IO_CTL_GPIO_20 = 0x858,
EXT_IO_CTL_GPIO_21 = 0x85C,
EXT_IO_CTL_GPIO_22 = 0x884,
} ext_io_ctl_idx_e;
/**
* @ingroup hct_io
*
* GPIO pull-up configuration
*/
typedef enum {
EXT_GPIO_DEN = 0, /**< Pull-up disabled */
EXT_GPIO_PU_EN, /**< Pull-up enabled */
EXT_GPIO_PU_MAX,
} ext_io_pull_e;
/**
* @ingroup hct_io
*
* I/O drive strength. For details, see the GPIO description in the DW21 V100 SoC Data Sheet.
*/
typedef enum {
EXT_IO_DRIVER_STRENGTH_0 = 0, /**< Drive strength level 0 (highest) */
EXT_IO_DRIVER_STRENGTH_1, /**< Drive strength level 1 */
EXT_IO_DRIVER_STRENGTH_2, /**< Drive strength level 2 */
EXT_IO_DRIVER_STRENGTH_3, /**< Drive strength level 3 (lowest) (default) */
EXT_IO_DRIVER_STRENGTH_MAX,
} ext_io_driver_strength_e;
typedef void (*gpio_isr_callback_func)(void);
/**
* @ingroup hct_io
* @brief Initializes all I/O output values and pin directions.
*
* @par Description:
* Sets all I/O output values (output active) and pin directions.
*
* @attention None
* @param val [IN] Type #td_u32* I/O output value
* @param dir [IN] Type #td_u32* I/O direction
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see None
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_init(EXT_CONST td_u32 *val, EXT_CONST td_u32 *dir);
/**
* @ingroup hct_io
* @brief Sets the direction of a single I/O pin.
*
* @par Description:
* Sets the direction of a single I/O pin.
*
* @attention None
* @param gpio_id [IN] Type #ext_gpio_idx_e I/O index
* @param enDir [IN] Type #EXT_GPIO_DIRECTION_E I/O direction.
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_get_dir
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_set_dir(ext_gpio_idx_e gpio_id, ext_gpio_direction_e enDir);
/**
* @ingroup hct_io
* @brief Obtains the direction of a single I/O pin.
*
* @par Description:
* Obtains the direction of a single I/O pin.
*
* @attention None
* @param gpio_id [IN] Type #ext_gpio_idx_e I/O index
* @param pDir [OUT] Type #ext_gpio_direction_e* I/O direction
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_set_dir
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_get_dir(ext_gpio_idx_e gpio_id, ext_gpio_direction_e *pDir);
/**
* @ingroup hct_io
* @brief Sets the output level of a single I/O pin.
*
* @par Description:
* Sets the output level of a single I/O pin.
*
* @attention None
* @param gpio_id [IN] Type #ext_gpio_idx_e I/O index
* @param enVal [IN] Type #EXT_GPIO_VALUE_E Output value.
* @li 0: low level
* @li 1: high level
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_get_input_val |uapi_io_get_output_val
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_set_ouput_val(ext_gpio_idx_e gpio_id, ext_gpio_value_e enVal);
/**
* @ingroup hct_io
* @brief Obtains the input level of a single I/O pin.
*
* @par Description:
* Obtains the input level of a single I/O pin.
*
* @attention None
* @param gpio_id [IN] Type #ext_gpio_idx_e I/O index
* @param pVal [OUT] Type #ext_gpio_value_e* Output value
* @li 0: low level
* @li 1: high level
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_set_ouput_val |uapi_io_get_output_val
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_get_input_val(ext_gpio_idx_e gpio_id, ext_gpio_value_e *pVal);
/**
* @ingroup hct_io
* @brief Obtains the output level of a single I/O pin.
*
* @par Description:
* Obtains the output level of a single I/O pin.
*
* @attention None
* @param gpio_id [IN] Type #ext_gpio_idx_e I/O index
* @param pVal [OUT] Type #ext_gpio_value_e* Output value
* @li 0: low level
* @li 1: high level
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_set_ouput_val |uapi_io_get_input_val
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_get_output_val(ext_gpio_idx_e gpio_id, ext_gpio_value_e *pVal);
/**
* @ingroup hct_io
* @brief Enables the interrupt function of a GPIO pin.
*
* @par Description:
* Enables the interrupt function of a GPIO pin.
*
* @attention None
* @param gpio_id [IN] Type #ext_gpio_idx_e I/O index
* @param int_type [IN] Type #EXT_GPIO_INT_E Interrupt type
* @li 0: level-triggered
* @li 1: edge-triggered
* @param int_polarity [IN] Type #EXT_GPIO_INT_POLARITY_E Interrupt polarity
* @li 0: triggered at falling edge or low level
* @li 1: triggered at rising edge or high level
* @param callback_func [IN] Type #gpio_isr_callback_func Interrupt callback function
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_int_disconnect
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_int_connect(ext_gpio_idx_e gpio_id, ext_gpio_int_e int_type, ext_gpio_int_polarity_e int_polarity,
gpio_isr_callback_func callback_func);
/**
* @ingroup hct_io
* @brief Disables the interrupt function of a GPIO pin.
*
* @par Description:
* Disables the interrupt function of a GPIO pin.
*
* @attention None
* @param gpio_id [IN] Type #ext_gpio_idx_e I/O index
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_int_connect
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_int_disconnect(ext_gpio_idx_e gpio_id);
/**
* @ingroup hct_io
* @brief I/O interrupt initialization
*
* @par Description:
* I/O interrupt initialization
*
* @attention
* @li In the initialization phase, the API needs to be called to enable the I/O interrupt so that the I/O interrupt can
* be responded.
* @li This API cannot be called repeatedly. It can be called only once during initialization.
*
* @param None
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see None
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_int_init(td_void);
/**
* @ingroup hct_io
* @brief Sets the I/O multiplexing.
*
* @par Description:
* Sets the I/O multiplexing.
*
* @attention None
* @param io_id [IN] Type #ext_gpio_idx_e I/O index
* @param func_val [IN] Type #td_u8 I/O multiplexing
* @li For details about the multiplexing value, see the multiplexing register description in the SoC data sheet.
* @li The user ensures the validity of the input register value. This API does not check the validity of the register
* value.
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_get_func
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_set_func(ext_gpio_idx_e io_id, td_u8 func_val);
/**
* @ingroup hct_io
* @brief Obtains the I/O multiplexing.
*
* @par Description:
* Obtains the I/O multiplexing.
*
* @attention None
* @param io_id [IN] Type #ext_gpio_idx_e I/O index
* @param func_val [OUT] Type #td_u8* I/O multiplexing
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see uapi_io_set_func
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_get_func(ext_gpio_idx_e io_id, td_u8 *func_val);
/**
* @ingroup hct_io
* @brief Sets the I/O drive strength.
*
* @par Description:
* The I/O drive strength is closely related to hardware design. For details, see SoC data sheet.
*
* @attention None
* @param id [IN] Type #ext_io_drv_idx_e I/O index
* @param level [IN] Type #ext_io_driver_strength_e I/O drive strength level
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see None
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_set_driver_strength(ext_io_ctl_idx_e id, ext_io_driver_strength_e level);
/**
* @ingroup hct_io
* @brief Enables the I/O pull-up.
*
* @par Description:
* Enables the I/O pull-up. For details, see SoC data sheet.
*
* @attention This API can be called in an interrupt.
* @param id [IN] Type #ext_io_ctl_idx_e I/O index
* @param enSpu [IN] Type #ext_io_spu_e I/O pull-up enable
*
* @retval #0 Success
* @retval #Other values Failure. For details, see soc_errno.h.
* @par Dependency:
* @li soc_mdm_io.h: Describes I/O APIs.
* @see None
* @since DW21_V100R001C00
*/
EXT_EXTERN td_u32 uapi_io_set_pull(ext_io_ctl_idx_e id, ext_io_pull_e enPu);
#endif