IOPad,是输入/输出(Input/Output)引脚。嵌入式系统通常由处理器、内存、外设和输入/输出接口组成。输入/输出引脚是用于连接外部设备和嵌入式系统的接口。它们用于数据和控制信号的输入和输出,可以连接各种传感器、执行器、存储设备等外围设备。IOPad通常由特定的计算机芯片或微控制器提供,并通过编程方式进行配置和控制
iopad控制器驱动提供了iopad的控制访问方法,
驱动相关的源文件包括
.
├── fiopad_g.c
├── fiopad_hw.c
├── fiopad_hw.h
├── fiopad_intr.c
├── fiopad_sinit.c
├── fiopad.c
└── fiopad.h
以下部分将指导您完成 fiopad 驱动的软件配置:
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 */
获取fiopad控制器默认配置
const FIOPadConfig *FIOPadLookupConfig(u32 instance_id);
Note:
Input:
Return:
初始化fiopad控制器, 使之可以使用
FError FIOPadCfgInitialize(FIOPadCtrl *instance_p, const FIOPadConfig *input_config_p);
Note:
Input:
Return:
获取iopad pin当前复用功能
FIOPadFunc FIOPadGetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off);
Note:
Input:
Return:
设置iopad pin复用功能
FError FIOPadSetFunc(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func);
Note:
Input:
Return:
获取iopad pin当前上下拉配置
FIOPadPull FIOPadGetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off);
Note:
Input:
Return:
设置iopad pin上下拉
FError FIOPadSetPull(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadPull pull);
Note:
Input:
Return:
获取iopad pin当前驱动能力
FIOPadDrive FIOPadGetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off);
Note:
Input:
Return:
设置iopad pin驱动能力
FError FIOPadSetDriver(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDrive drive);
Note:
Input:
Return:
设置iopad pin复用功能,上下拉配置,驱动能力
FError FIOPadSetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc func, FIOPadPull pull, FIOPadDrive drive);
Note:
Input:
Return:
获取iopad pin复用功能,上下拉配置,驱动能力
FError FIOPadGetConfig(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadFunc *func, FIOPadPull *pull, FIOPadDrive *drive)
Note:
Input:
Return:
获取iopad pin当前延迟相关配置
FIOPadDelay FIOPadGetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type);
Note:
Input:
Return:
设置iopad pin延迟挡位
FError FIOPadSetDelay(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, FIOPadDelayType type, FIOPadDelay delay);
Note:
Input:
Return:
设置iopad pin延迟使能
FError FIOPadSetDelayEn(FIOPadCtrl *instance_p, const u32 pin_reg_off, FIOPadDelayDir dir, boolean enable);
Note:
Input:
Return:
FError FIOPadDeInitialize(FIOPadCtrl *instance_p)
Note:
Input:
Return: