Skip to main content
RTSS GPIO 驱动提供用于配置 GPIO、读取输入/输出值以及向 GPIO 写入输出值的接口。GPIO 可配置为输入/输出或特殊功能 GPIO。GPIO 驱动还支持接收来自 GPIO 的中断。中断可以以电平触发、上升沿触发、下降沿触发或双边沿触发的方式产生。 特定的 GPIO 被分配给 RTSS,用于数据输入活动和接收中断请求。在所有 SoC 中,GPIO 结构保持一致,由以下参数组成:
  • 方向
  • 驱动模式
  • 驱动强度
  • 功能选择
  • GPIO 客户端 API

方向

设置 GPIO 的方向。配置为输入的 GPIO 为只读,而配置为输出的 GPIO 可读可写。

驱动模式

GPIO 可配置为具有内部上下拉电路(上拉、下拉或无上下拉)以及不同的驱动强度。驱动模式的设置取决于引脚与电路板的连接方式。 无论 FUNC SEL 字段如何设置,焊盘都会被设置为使用内部弱上拉、下拉、保持器(keeper)或无上下拉功能:

驱动强度

驱动强度控制 GPIO 焊盘的输出电压和阻抗。配置取决于硬件设计要求。值越高,引脚的最大频率、能耗和 EMI 产生量也越高。此外,它还取决于外部上拉或下拉的强度以及线路特性。 驱动强度可以是:

功能选择

用于选择路由到 GPIO 焊盘的模块。默认设置为通用功能(function 0)。 IQ-8275 中引脚复用选项的示例:RTSS [48] 用于 CAN(func=0)或 EMAC(func=1)。 有关每个 GPIO 引脚分配和复用功能的更多信息,

GPIO 客户端 API

sail_gpio_config_pin (int ngpio, GPIOConfigType cfg)

sail_gpio_config_pin() 函数允许客户端为 GPIO 事务调用配置 GPIO。 客户端必须注册 GPIO 结构,例如方向、驱动模式、驱动强度和功能选择。
  • 原型:void sail_gpio_config_pin(int ngpio, GPIOConfigType *cfg);
  • 参数:
  • 返回值:无

sail_gpio_config_group(int *ngpio, GPIOConfigType *cfg, uint8 nSize)

配置一组 GPIO 的上下拉、方向、驱动强度和功能。
  • 原型:void sail_gpio_config_group(int *ngpio, GPIOConfigType *cfg, uint8 nSize;
  • 参数:
  • 返回值:无

sail_gpio_ReadPin

该读取函数读取 GPIO 引脚的已编程输出值。
  • 原型:GPIOValueType sail_gpio_ReadPin (int ngpio);
  • 参数:
  • 返回值:
    • 如果输入为 1,返回 GPIO_HIGH
    • 如果输入为 0,返回 GPIO_LOW

sail_gpio_WritePin

编程或写入 GPIO 引脚的输出值。
  • 原型:GPIOValueType sail_gpio_ReadPin (int ngpio);
  • 参数:
  • 返回值:
    • 如果输入为 1,返回 GPIO_HIGH
    • 如果输入为 0,返回 GPIO_LOW

vSailGPIOWakeUpConfig

vSailGPIOWakeUpConfig 是一个 GPIO 配置函数,专门用于设置 SAIL 电源控制器唤醒输入路径上的特定 GPIO 引脚。
  • 原型:static void vSailGPIOWakeUpConfig()
  • 参数:
  • 返回值:无
有关支持唤醒的 GPIO 的更多信息,

sail_gpio_ReadPinOutput

用于读取 GPIO 输出值的接口。
  • 原型:GPIOValueType sail_gpio_ReadPinOutput(int ngpio);
  • 参数:
  • 返回值:
    • 如果输出为 1,返回 GPIO_HIGH
    • 如果输出为 0,返回 GPIO_LOW

中断配置

GPIO 驱动提供用于配置、启用和触发中断以及读取和清除中断状态的接口。在接收任何 GPIO 中断之前,需要在通用中断控制器(GIC)和顶层模式复用器(TLMM)硬件上对其进行配置和启用。GIC 上的中断在 TLMM 驱动初始化期间启用,因为它并非特定于某个 GPIO。

直连

直连旨在为以较高频率运行的处理器提供低延迟中断。

GPIO 中断配置 API

必要时,客户端调用 uGPIOSummaryInt_EnableInterrupt 在 TLMM 上启用中断。中断首先进行配置,然后使用 uGPIOSummaryInt_RegisterInterrupt 函数进行注册。

uGPIOSummaryInt_ConfigureInterrupt()

允许客户端在指定的 GPIO 引脚上设置中断触发方式。触发方式为以下之一: GPIO 汇总中断触发类型
  • 原型:static void uGPIOSummaryInt_ConfigureInterrupt(int nGPIO, int nTrigger, int nRawStatusEn, int nTargetProc);
  • 参数:
  • 返回值:无

uGPIOSummaryInt_RegisterInterrupt()

在 TLMM 上注册 GPIO 中断。
  • 原型:int uGPIOSummaryInt_RegisterInterrupt( uint32 nGPIO, uGPIOIntTriggerType eTrigger, uGPIOINTISR isr, uGPIOINTISRCtx param);
  • 参数:
  • 返回值:
    • UGPIOINT_SUCCESS (0) - ISR 注册成功时返回此值。
    • UGPIOINT_ERROR (-1) - uGPIOInt 驱动无法注册中断服务程序(ISR)时返回的错误。

uGPIOSummaryInt_EnableInterrupt()

在中断控制器上为特定 GPIO 启用中断。
  • 原型:int uGPIOSummaryInt_EnableInterrupt( uint32 nGPIO);
  • 参数:
  • 返回值:
    • UGPIOINT_SUCCESS (0) - ISR 注册成功时返回此值。
    • UGPIOINT_ERROR (-1) - uGPIOInt 驱动无法注册中断服务程序(ISR)时返回的错误。

uGPIOSummaryInt_DisableInterrupt()

在中断控制器上为特定 GPIO 禁用中断。
  • 原型:int uGPIOSummaryInt_DisableInterrupt( uint32 nGPIO);
  • 参数:
  • 返回值:
    • UGPIOINT_SUCCESS (0) - ISR 注册成功时返回此值。
    • UGPIOINT_ERROR (-1) - uGPIOInt 驱动无法注册中断服务程序(ISR)时返回的错误。

验证 GPIO 驱动

有关验证 GPIO 驱动的信息,请参阅 gpio。