4G_module/include/cmiot/cm_iomux.h

308 lines
8.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @file cm_iomux.h
* @brief IOMUX接口
* @copyright Copyright © 2021 China Mobile IOT. All rights reserved.
* @author By zyf
* @date 2021/07/30
*
* @defgroup iomux
* @ingroup PI
* @{
*/
#ifndef __CM_IOMUX_H__
#define __CM_IOMUX_H__
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdint.h>
/****************************************************************************
* Public Types
****************************************************************************/
/**IOMUX PIN definition 和模组实际PIN脚对应一致,请参照资源综述*/
typedef enum{
CM_IOMUX_PIN_0 = 0,
CM_IOMUX_PIN_1,
CM_IOMUX_PIN_2,
CM_IOMUX_PIN_3,
CM_IOMUX_PIN_4,
CM_IOMUX_PIN_5,
CM_IOMUX_PIN_6,
CM_IOMUX_PIN_7,
CM_IOMUX_PIN_8,
CM_IOMUX_PIN_9,
CM_IOMUX_PIN_10,
CM_IOMUX_PIN_11,
CM_IOMUX_PIN_12,
CM_IOMUX_PIN_13,
CM_IOMUX_PIN_14,
CM_IOMUX_PIN_15,
CM_IOMUX_PIN_16,
CM_IOMUX_PIN_17,
CM_IOMUX_PIN_18,
CM_IOMUX_PIN_19,
CM_IOMUX_PIN_20,
CM_IOMUX_PIN_21,
CM_IOMUX_PIN_22,
CM_IOMUX_PIN_23,
CM_IOMUX_PIN_24,
CM_IOMUX_PIN_25,
CM_IOMUX_PIN_26,
CM_IOMUX_PIN_27,
CM_IOMUX_PIN_28,
CM_IOMUX_PIN_29,
CM_IOMUX_PIN_30,
CM_IOMUX_PIN_31,
CM_IOMUX_PIN_32,
CM_IOMUX_PIN_33,
CM_IOMUX_PIN_34,
CM_IOMUX_PIN_35,
CM_IOMUX_PIN_36,
CM_IOMUX_PIN_37,
CM_IOMUX_PIN_38,
CM_IOMUX_PIN_39,
CM_IOMUX_PIN_40,
CM_IOMUX_PIN_41,
CM_IOMUX_PIN_42,
CM_IOMUX_PIN_43,
CM_IOMUX_PIN_44,
CM_IOMUX_PIN_45,
CM_IOMUX_PIN_46,
CM_IOMUX_PIN_47,
CM_IOMUX_PIN_48,
CM_IOMUX_PIN_49,
CM_IOMUX_PIN_50,
CM_IOMUX_PIN_51,
CM_IOMUX_PIN_52,
CM_IOMUX_PIN_53,
CM_IOMUX_PIN_54,
CM_IOMUX_PIN_55,
CM_IOMUX_PIN_56,
CM_IOMUX_PIN_57,
CM_IOMUX_PIN_58,
CM_IOMUX_PIN_59,
CM_IOMUX_PIN_60,
CM_IOMUX_PIN_61,
CM_IOMUX_PIN_62,
CM_IOMUX_PIN_63,
CM_IOMUX_PIN_64,
CM_IOMUX_PIN_65,
CM_IOMUX_PIN_66,
CM_IOMUX_PIN_67,
CM_IOMUX_PIN_68,
CM_IOMUX_PIN_69,
CM_IOMUX_PIN_70,
CM_IOMUX_PIN_71,
CM_IOMUX_PIN_72,
CM_IOMUX_PIN_73,
CM_IOMUX_PIN_74,
CM_IOMUX_PIN_75,
CM_IOMUX_PIN_76,
CM_IOMUX_PIN_77,
CM_IOMUX_PIN_78,
CM_IOMUX_PIN_79,
CM_IOMUX_PIN_80,
CM_IOMUX_PIN_81,
CM_IOMUX_PIN_82,
CM_IOMUX_PIN_83,
CM_IOMUX_PIN_84,
CM_IOMUX_PIN_85,
CM_IOMUX_PIN_86,
CM_IOMUX_PIN_87,
CM_IOMUX_PIN_88,
CM_IOMUX_PIN_89,
CM_IOMUX_PIN_90,
CM_IOMUX_PIN_91,
CM_IOMUX_PIN_92,
CM_IOMUX_PIN_93,
CM_IOMUX_PIN_94,
CM_IOMUX_PIN_95,
CM_IOMUX_PIN_96,
CM_IOMUX_PIN_97,
CM_IOMUX_PIN_98,
CM_IOMUX_PIN_99,
CM_IOMUX_PIN_100,
CM_IOMUX_PIN_101,
CM_IOMUX_PIN_102,
CM_IOMUX_PIN_103,
CM_IOMUX_PIN_104,
CM_IOMUX_PIN_105,
CM_IOMUX_PIN_106,
CM_IOMUX_PIN_107,
CM_IOMUX_PIN_108,
CM_IOMUX_PIN_109,
CM_IOMUX_PIN_110,
CM_IOMUX_PIN_111,
CM_IOMUX_PIN_112,
CM_IOMUX_PIN_113,
CM_IOMUX_PIN_114,
CM_IOMUX_PIN_115,
CM_IOMUX_PIN_116,
CM_IOMUX_PIN_117,
CM_IOMUX_PIN_118,
CM_IOMUX_PIN_119,
CM_IOMUX_PIN_120,
CM_IOMUX_PIN_121,
CM_IOMUX_PIN_122,
CM_IOMUX_PIN_123,
CM_IOMUX_PIN_124,
CM_IOMUX_PIN_125,
CM_IOMUX_PIN_126,
CM_IOMUX_PIN_127,
CM_IOMUX_PIN_128,
CM_IOMUX_PIN_129,
CM_IOMUX_PIN_130,
CM_IOMUX_PIN_131,
CM_IOMUX_PIN_132,
CM_IOMUX_PIN_133,
CM_IOMUX_PIN_134,
CM_IOMUX_PIN_135,
CM_IOMUX_PIN_136,
CM_IOMUX_PIN_137,
CM_IOMUX_PIN_138,
CM_IOMUX_PIN_139,
CM_IOMUX_PIN_140,
CM_IOMUX_PIN_141,
CM_IOMUX_PIN_142,
CM_IOMUX_PIN_143,
CM_IOMUX_PIN_144,
CM_IOMUX_PIN_145,
CM_IOMUX_PIN_146,
CM_IOMUX_PIN_147,
CM_IOMUX_PIN_148,
CM_IOMUX_PIN_149,
CM_IOMUX_PIN_150,
CM_IOMUX_PIN_151,
CM_IOMUX_PIN_152,
CM_IOMUX_PIN_153,
CM_IOMUX_PIN_154,
CM_IOMUX_PIN_MAX
} cm_iomux_pin_e;
/*IOMUX FUNC definition */
typedef enum{
CM_IOMUX_FUNC_FUNCTION0 , /*!<不支持*/
CM_IOMUX_FUNC_FUNCTION1, /*!<功能1*/
CM_IOMUX_FUNC_FUNCTION2, /*!<功能2*/
CM_IOMUX_FUNC_FUNCTION3, /*!<功能3*/
CM_IOMUX_FUNC_FUNCTIONNUM_END,
} cm_iomux_func_e;
/*IOMUX PIN cmd*/
typedef enum{
CM_IOMUX_PINCMD0_SLEEP , /*!<休眠状态*/
CM_IOMUX_PINCMD1_LPMEDEG, /*!<边沿检测*/
CM_IOMUX_PINCMD2_DRIVEABILITY, /*!<驱动能力*/
CM_IOMUX_PINCMD3_PULL, /*!<上下拉*/
CM_IOMUX_PINCMDNUM_END
} cm_iomux_pincmd_e;
/*IOMUX PIN cmdnum enumeration*/
typedef enum{
CM_IOMUX_PINCMD0_FUNC0_SLEEP_NONE, /*!<不使能 pad 的 sleep 功能*/
CM_IOMUX_PINCMD0_FUNC1_SLEEP_DIR, /*!<不使能 sleep只是设置为 sleep 时候,输入状态*/
CM_IOMUX_PINCMD0_FUNC2_SLEEP_DATA, /*!<不使能 sleep只是设置为 sleep 时候,输出状态*/
CM_IOMUX_PINCMD0_FUNC3_SLEEP_FLOAT, /*!<使能 sleep 功能,设置为 sleep 时候,输入状态*/
CM_IOMUX_PINCMD0_FUNC4_SLEEP_OUTPUT_HIGH, /*!<使能 sleep 功能,设置为 sleep 时候,输出高状态*/
CM_IOMUX_PINCMD0_FUNC5_SLEEP_OUTPUT_LOW, /*!<使能 sleep 功能,设置为 sleep 时候,输出低状态*/
CM_IOMUX_PINCMD0_FUNCNUM_END
} cm_iomux_pincmd0_e;
typedef enum{
CM_IOMUX_PINCMD1_FUNC0_LPM_EDGE_NONE, /*!<不使能 pad 的边沿检测功能,需配合休眠解锁cm_pm_work_unlock函数使用*/
CM_IOMUX_PINCMD1_FUNC1_LPM_EDGE_RISE , /*!<使能 pad 的边沿检测功能,且是上升沿。并提供唤醒事件,需配合休眠锁cm_pm_work_lock函数使用*/
CM_IOMUX_PINCMD1_FUNC2_LPM_EDGE_FALL, /*!<使能 pad 的边沿检测功能,且是下降沿。并提供唤醒事件.需配合休眠锁cm_pm_work_lock函数使用*/
CM_IOMUX_PINCMD1_FUNC3_EDGE_BOTH, /*!<使能 pad 的边沿检测功能,且是双沿。并提供唤醒事件.需配合休眠锁cm_pm_work_lock函数使用*/
CM_IOMUX_PINCMD1_FUNCNUM_END
} cm_iomux_pincmd1_e;
typedef enum{
CM_IOMUX_PINCMD2_FUNC0_DRIVE_VERY_SLOW,
CM_IOMUX_PINCMD2_FUNC1_DRIVE_SLOW,
CM_IOMUX_PINCMD2_FUNC2_DRIVE_MEDIUM,
CM_IOMUX_PINCMD2_FUNC3_DRIVE_FAST,
CM_IOMUX_PINCMD2_FUNC4_MASK,
CM_IOMUX_PINCMD2_FUNCNUM_END
} cm_iomux_pincmd2_e;
typedef enum{
CM_IOMUX_PINCMD3_FUNC0_PULL_NONE, /*!<不使能内部的上拉下拉功能*/
CM_IOMUX_PINCMD3_FUNC1_PULL_LOW, /*!<使能下拉*/
CM_IOMUX_PINCMD3_FUNC2_PULL_HIGH, /*!<使能上拉*/
CM_IOMUX_PINCMD3_FUNC3_PULL_BOTH, /*!<使能上下拉*/
CM_IOMUX_PINCMD3_FUNC4_PULL_FLOAT, /*!<浮空功能*/
CM_IOMUX_PINCMD3_FUNCNUM_END
} cm_iomux_pincmd3_e;
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/*IOMUX PIN FUNCTION definition*/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/**
* @brief IOMUX 设置引脚复用功能
*
* @param [in] pin PIN 定义号
* @param [in] fun FUN 定义号
*
* @return
* = 0 - 成功 \n
* = -1 - 失败
*/
int32_t cm_iomux_set_pin_func(cm_iomux_pin_e pin, cm_iomux_func_e fun);
/**
* @brief IOMUX 获取引脚功能
*
* @param [in] pin PIN 定义号
* @param [out] fun FUN 定义号
*
* @return
* = 0 - 成功\n
* < 0 - 失败
*/
int32_t cm_iomux_get_pin_func(cm_iomux_pin_e pin, cm_iomux_func_e *fun);
/**
* @brief IOMUX PIN脚控制
*
* @param [in] pin PIN 定义号
* @param [in] cmd 功能定义
* @param [in] cmd_arg 具体功能值
*
* @return
* = 0 - 成功\n
* < 0 - 失败
*/
int32_t cm_iomux_set_pin_cmd(cm_iomux_pin_e pin, cm_iomux_pincmd_e cmd, uint8_t cmd_arg);
#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif /* __CM_IOMUX_H__ */
/** @}*/