GPIO(General-purpose input/output),即通用型输入输出,其引脚可以供使用者通过程序控制其输入、输出,常用于产生时钟,作为片选信号和模拟低速通信协议等场景
FT2000/4和D2000提供两个 GPIO 模块,每个 GPIO 模块有 16 位接口,每 8 位一组,分别是A组和B组,GPIO可以控制外部IO的输入输出方向,作为输出时,内部寄存器的数据输出到片外,作为输入时,片外的数据被锁存在内部寄存器
E2000和Phytium PI提供六个 GPIO 模块,每个模块有 16 个接口,0 ~ 2 号 GPIO 模块中每个引脚独立处理中断,3 ~ 5 号 GPIO 模块中各引脚的中断合并上报
FGPIO 驱动支持配置 GPIO 引脚的输入输出方向,输出高低电平,或者获取输入电平,配置引脚的中断触发模式,配置引脚的中断响应回调函数等
FGPIO 驱动程序主要完成GPIO相关的功能配置,包括
驱动相关的源文件如下,
drivers/pin/fgpio
soc
└── fgpio_table.c
.
├── Kconfig
├── fgpio.c
├── fgpio.h
├── fgpio_hw.h
├── fgpio_selftest.c
├── fgpio_intr.c
└── fgpio_sinit.c
FGPIO 驱动支持 FT2000/4, D2000和E2000,在 D2000 和 E2000 上完成测试
参考以下步骤完成 FGPIO 硬件配置,
typedef struct
{
u32 id; /* GPIO标号,0 ~ FGPIO_NUM */
u32 ctrl; /* GPIO所属的控制器,0 ~ FGPIO_CTRL_NUM */
u32 port; /* GPIO所属的Port, Port A, B */
u32 pin; /* GPIO的引脚号,0 ~ FGPIO_PIN_NUM */
uintptr base_addr; /* GPIO控制器基地址 */
u32 irq_num; /* GPIO中断号,如果不支持中断,置位为 0 */
u32 irq_priority; /* 中断优先级 */
u32 cap; /* GPIO引脚能力集 */
} FGpioConfig; /* GPIO引脚配置 */
typedef struct
{
FGpioConfig config;
u32 is_ready;
FGpioInterruptCallback irq_cb; /* 中断回调函数 */
void *irq_cb_params; /* 中断回调函数的入参 */
} FGpio; /* GPIO引脚实例 */
FGPIO_SUCCESS : success
FGPIO_ERR_INVALID_PARA : invalid input parameters
FGPIO_ERR_INVALID_STATE : invalid state
const FGpioConfig *FGpioLookupConfig(u32 gpio_id)
Note:
Input:
Return:
FError FGpioCfgInitialize(FGpio *const pin, const FGpioConfig *const config)
Note:
Input:
Return:
void FGpioDeInitialize(FGpio *const pin);
Note:
Input:
Return:
void FGpioSetDirection(FGpio *const pin, FGpioDirection dir)
Note:
Input:
Return:
FGpioDirection FGpioGetDirection(FGpio *const pin)
Note:
Input:
Return:
FError FGpioSetOutputValue(FGpio *const pin, const FGpioVal output)
Note:
Input:
Return:
FGpioVal FGpioGetInputValue(FGpio *const pin)
Note:
Input:
Return:
void FGpioGetInterruptMask(FGpio *const pin, u32 *mask, u32 *enabled)
Note:
Input:
Return:
void FGpioSetInterruptMask(FGpio *const pin, boolean enable)
Note:
Input:
Return:
void FGpioGetInterruptType(FGpio *const pin, FGpioIrqType *type)
Note:
Input:
Return:
void FGpioSetInterruptType(FGpio *const pin, const FGpioIrqType type)
Note:
Input:
Return:
void FGpioInterruptHandler(s32 vector, void *param)
Note:
Input:
Return:
void FGpioRegisterInterruptCB(FGpio *const pin, FGpioInterruptCallback cb,
void *cb_param)
Input:
Return:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。