OpenHarmony-4.GPIO驱动(1)

  • GPIO

1.功能简介

  GPIO(General-purpose input/output)即通用型输入输出。GPIO又俗称为I/O口,I指的是输入(in),O指的是输出(out)。可以通过软件来控制其输入和输出,即I/O控制。通常,GPIO控制器通过分组的方式管理所有GPIO管脚,每组GPIO有一个或多个寄存器与之关联,通过读写寄存器完成对GPIO管脚的操作。

  • GPIO输入

    输入是检测各个引脚上的电平状态,高电平或者低电平状态。常见的输入模式有:模拟输入、浮空输入、上拉输入、下拉输入。

  • GPIO输出

    输出是当需要控制引脚电平的高低时需要用到输出功能。常见的输出模式有:开漏输出、推挽输出、复用开漏输出、复用推挽输出。

  GPIO接口定义了操作GPIO管脚的标准方法集合,包括:

  • 设置、获取管脚方向:方向可以是输入或者输出(暂不支持高阻态)。

  • 读、写管脚电平值:电平值可以是低电平或高电平。

  • 设置、取消管脚中断服务函数:设置一个管脚的中断响应函数,以及中断触发方式。取消一个管脚的中断服务函数。

  • 使能、禁止管脚中断:禁止或使能管脚中断。

1.1.运作机制

  在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型配置器),若采用独立服务模式,则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。GPIO模块接口适配模式采用统一服务模式:
在这里插入图片描述
  在统一模式下,所有的控制器都被核心层统一管理,并由核心层统一发布一个服务供接口层,因此这种模式下驱动无需再为每个控制器发布服务。

  GPIO模块各分层作用:

  • 接口层提供操作GPIO管脚的标准方法。

  • 核心层主要提供GPIO管脚资源匹配,GPIO管脚控制器的添加、移除以及管理的能力,通过钩子函数与适配层交互,供芯片厂家快速接入HDF框架。

  • 适配层主要是将钩子函数的功能实例化,实现具体的功能。

1.2.接口层

  GPIO模块提供的主要接口:

  • drivers/hdf_core/framework/include/platform/gpio_if.h

在这里插入图片描述

  以gpio_stm32f4xx为例,分析接口层函数调用流程:

GpioRead
	-> GpioCntlrRead
		-> cntlr->ops->read 调用哪里?
			-> LL_GPIO_ReadInputPin

  函数GpioRead分析:

drivers_hdf_core/framework/support/platform/src/gpio/gpio_if.c
int32_t GpioRead(uint16_t gpio, uint16_t *val)
{
   
   
    int32_t ret;
    struct GpioCntlr *cntlr = GpioCntlrGetByGpio(gpio);
    ret = GpioCntlrRead(cntlr, GpioCntlrGetLocal(cntlr, gpio), val);
    GpioCntlrPut(cntlr);
    return ret;
}

drivers_hdf_core/framework/support/platform/src/gpio/gpio_core.c:
int32_t GpioCntlrRead(struct GpioCntlr *cntlr, uint16_t local, uint16_t *val)
{
   
   
    ...
    return cntlr->ops->read(cntlr, local, val);  //调用注册的gpio_stm32f4xx控制器ops接口对应的read函数,即g_GpioCntlrMethod->GpioDevRead
}

  gpio_stm32f4xx驱动:

  • drivers_hdf_core/adapter/platform/gpio/gpio_stm32f4xx.c
struct HdfDriverEntry g_GpioDriverEntry = {
   
   
    .moduleVersion = 1,
    .moduleName = "ST_GPIO_MODULE_HDF",
    .Init = GpioDriverInit,
    .Release = GpioDriverRelease,
};
HDF_INIT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值