rt-thread/bsp/phytium/libraries/standalone/doc/reference/driver/fiopad.md

10 KiB
Raw Blame History

FIOPAD 驱动程序

1. 概述

IOPad是输入/输出Input/Output引脚。嵌入式系统通常由处理器、内存、外设和输入/输出接口组成。输入/输出引脚是用于连接外部设备和嵌入式系统的接口。它们用于数据和控制信号的输入和输出可以连接各种传感器、执行器、存储设备等外围设备。IOPad通常由特定的计算机芯片或微控制器提供并通过编程方式进行配置和控制

2. 功能

iopad控制器驱动提供了iopad的控制访问方法

  • 初始化iopad控制器
  • 配置引脚复用,引脚输入输出延迟等

驱动相关的源文件包括

.
├── fiopad_g.c
├── fiopad_hw.c
├── fiopad_hw.h
├── fiopad_intr.c
├── fiopad_sinit.c
├── fiopad.c
└── fiopad.h

3. 配置方法

以下部分将指导您完成 fiopad 驱动的软件配置:

  • 初始化iopad控制器
  • 设置引脚功能复用,设置引脚延时

4 应用示例

5. API参考

5.1. 用户数据结构

  • fiopad控制数据
typedef struct
{
    FIOPadConfig config;/* iopad config */
    u32 is_ready;/* iopad init ready flag */
    
} FIOPadCtrl; 
  • fiopad配置数据FIOPadConfig主要是iopad控制器id、基地址FIOPadMulConfig主要包括用户可配置的复用参数包括复用功能上下拉驱动能力等FIOPadDelayConfig主要用户可配置的延时参数输入输出方向粗调延时精调延时等
typedef struct
{
    u32 instance_id; /* Device instance id */
    uintptr base_address; /* iopad control register base address */

} FIOPadConfig;
  • fiopad复用功能E2000最多支持8种功能
typedef enum
{
    FIOPAD_FUNC0 = 0b000,
    FIOPAD_FUNC1,
    FIOPAD_FUNC2,
    FIOPAD_FUNC3 = 0b011,
    FIOPAD_FUNC4,
    FIOPAD_FUNC5,
    FIOPAD_FUNC6,
    FIOPAD_FUNC7 = 0b111,

    FIOPAD_NUM_OF_FUNC
} FIOPadFunc; /* Pin multiplexing function configuration, func0 is the default function */
  • fiopad驱动能力
typedef enum
{
    FIOPAD_DRV0 = 0b0000,
    FIOPAD_DRV1,
    FIOPAD_DRV2,
    FIOPAD_DRV3,
    FIOPAD_DRV4,
    FIOPAD_DRV5,
    FIOPAD_DRV6,
    FIOPAD_DRV7,
    FIOPAD_DRV8,
    FIOPAD_DRV9,
    FIOPAD_DRV10,
    FIOPAD_DRV11,
    FIOPAD_DRV12,
    FIOPAD_DRV13,
    FIOPAD_DRV14,
    FIOPAD_DRV15 = 0b1111,

    FIOPAD_NUM_OF_DRIVE
} FIOPadDrive; /* Pin drive capability configuration divided into 16 levels*/
  • fiopad上下拉配置
typedef enum
{
    FIOPAD_PULL_NONE = 0b00,
    FIOPAD_PULL_DOWN = 0b01,
    FIOPAD_PULL_UP = 0b10,

    FIOPAD_NUM_OF_PULL
} FIOPadPull; /* Pin up pull-down configuration */

  • fiopad延迟输入输出方向配置
typedef enum
{
    FIOPAD_OUTPUT_DELAY = 0, /* Delay setting direction to output */
    FIOPAD_INPUT_DELAY, /* Delay setting direction to input */

    FIOPAD_NUM_OF_DELAY_DIR
} FIOPadDelayDir; /* Pin delay configuration direction */

  • fiopad粗调精调类型配置
typedef enum
{
    FIOPAD_DELAY_COARSE_TUNING = 0, /*delay coarse tuning */
    FIOPAD_DELAY_FINE_TUNING, /*delay fine tuning */

    FIOPAD_NUM_OF_DELAY_TYPE
} FIOPadDelayType; /* Pin delay configuration type */

  • fiopad粗调精调类型配置粗调每级延时均值约360ps精调每级延时均值约100ps
typedef enum
{
    FIOPAD_DELAY_NONE = 0,
    FIOPAD_DELAY_1,
    FIOPAD_DELAY_2,
    FIOPAD_DELAY_3,
    FIOPAD_DELAY_4,
    FIOPAD_DELAY_5,
    FIOPAD_DELAY_6,
    FIOPAD_DELAY_7,

    FIOPAD_NUM_OF_DELAY
} FIOPadDelay;/* Pin delay level configuration */

5.2 错误码定义

  • FIOPAD_SUCCESS 执行成功
  • FIOPAD_INVAL_PARAM 参数无效
  • FIOPAD_NOT_READY 驱动未初始化
  • FIOPAD_NOT_SUPPORT 驱动不支持

5.3. 用户API接口

FIOPadLookupConfig

  • 获取fiopad控制器默认配置
const FIOPadConfig *FIOPadLookupConfig(u32 instance_id);

Note:

  • 获取默认配置参数,包括基地址等

Input:

  • {u32} instance_idiopad控制器id号

Return:

  • {const FIOPadConfig *} iopad默认配置返回NULL如果找不到默认配置

FIOPadCfgInitialize

  • 初始化fiopad控制器, 使之可以使用
FError FIOPadCfgInitialize(FIOPadCtrl *instance_p, const FIOPadConfig *input_config_p);

Note:

  • 输入配置通过FIOPadLookupConfig获取用户按照需要修改后传入此函数

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {FIOPadConfig} *input_config_piopad用户输入配置

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败

FIOPadGetFunc

  • 获取iopad pin当前复用功能
FIOPadFunc FIOPadGetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off);

Note:

  • 获取iopad pin当前复用功能

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量

Return:

  • {FIOPadFunc} iopad pin当前复用功能

FIOPadSetFunc

  • 设置iopad pin复用功能
FError FIOPadSetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func);

Note:

  • 设置iopad pin复用功能

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量
  • {FIOPadFunc} func, 具体复用功能

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败

FIOPadGetPull

  • 获取iopad pin当前上下拉配置
FIOPadPull FIOPadGetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off);

Note:

  • 获取iopad pin当前上下拉配置

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量

Return:

  • {FIOPadFunc} iopad pin当前上下拉配置

FIOPadSetPull

  • 设置iopad pin上下拉
FError FIOPadSetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadPull pull);

Note:

  • 设置iopad pin上下拉

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量
  • {FIOPadPull} pull, 具体上下拉配置

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败

FIOPadGetDriver

  • 获取iopad pin当前驱动能力
FIOPadDrive FIOPadGetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off);

Note:

  • 获取iopad pin当前驱动能力

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量

Return:

  • {FIOPadDrive} iopad pin当前驱动能力

FIOPadSetDriver

  • 设置iopad pin驱动能力
FError FIOPadSetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDrive drive);

Note:

  • 设置iopad pin驱动能力

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量
  • {FIOPadDrive} Driver, 具体驱动能力参数

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败

FIOPadSetConfig

  • 设置iopad pin复用功能上下拉配置驱动能力
FError FIOPadSetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func, FIOPadPull pull, FIOPadDrive drive);

Note:

  • 设置iopad pin复用功能上下拉配置驱动能力此接口一次性设置三种配置

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量
  • {FIOPadFunc} func, 具体复用功能
  • {FIOPadPull} pull, 具体上下拉配置
  • {FIOPadDrive} Driver, 具体驱动能力参数

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败

FIOPadGetConfig

  • 获取iopad pin复用功能上下拉配置驱动能力
FError FIOPadGetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc *func, FIOPadPull *pull, FIOPadDrive *drive)

Note:

  • 胡去哦去iopad pin复用功能上下拉配置驱动能力此接口一次性获取三种配置

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量
  • {FIOPadFunc} *func, 具体复用功能
  • {FIOPadPull} *pull, 具体上下拉配置
  • {FIOPadDrive} *Driver, 具体驱动能力参数

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败

FIOPadGetDelay

  • 获取iopad pin当前延迟相关配置
FIOPadDelay FIOPadGetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type);

Note:

  • 获取iopad pin当前延迟相关配置

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量
  • {FIOPadDelayDir} dir延迟配置方向
  • {FIOPadDelayType} type延迟配置类型

Return:

  • {FIOPadDelay} iopad pin在具体方向和类型下延迟的具体挡位

FIOPadSetDelay

  • 设置iopad pin延迟挡位
FError FIOPadSetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type, FIOPadDelay delay);

Note:

  • 设置iopad pin延迟在具体方向和类型下的挡位

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量
  • {FIOPadDelayDir} dir延迟配置方向
  • {FIOPadDelayType} type延迟配置类型
  • {FIOPadDelay} delay要设置的延迟具体值

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败

FIOPadSetDelayEn

  • 设置iopad pin延迟使能
FError FIOPadSetDelayEn(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, boolean enable);

Note:

  • 设置iopad pin在具体方向和类型下的延迟使能

Input:

  • {FIOPadCtrl} *instance_piopad驱动控制数据
  • {u32} pin_reg_off对应pin地址偏移量
  • {FIOPadDelayDir} dir延迟配置方向
  • {FIOPadDelayType} type延迟配置类型
  • {boolean}enableture 使能;false 去使能

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败

FIOPadDeInitialize

FError FIOPadDeInitialize(FIOPadCtrl *instance_p)

Note:

  • 去初始化FIOPAD控制器实例

Input:

  • {FIOPadCtrl}instance_p, FIOPAD控制器实例

Return:

  • {FError} 驱动初始化的错误码信息FIOPAD_SUCCESS 表示初始化成功,其它返回值表示初始化失败