> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# RTSS GPIO 驱动概述

RTSS GPIO 驱动提供用于配置 GPIO、读取输入/输出值以及向 GPIO 写入输出值的接口。GPIO 可配置为输入/输出或特殊功能 GPIO。GPIO 驱动还支持接收来自 GPIO 的中断。中断可以以电平触发、上升沿触发、下降沿触发或双边沿触发的方式产生。

特定的 GPIO 被分配给 RTSS，用于数据输入活动和接收中断请求。在所有 SoC 中，GPIO 结构保持一致，由以下参数组成：

* 方向
* 驱动模式
* 驱动强度
* 功能选择
* GPIO 客户端 API

## **方向**

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

## **驱动模式**

GPIO 可配置为具有内部上下拉电路（上拉、下拉或无上下拉）以及不同的驱动强度。驱动模式的设置取决于引脚与电路板的连接方式。

无论 FUNC SEL 字段如何设置，焊盘都会被设置为使用内部弱上拉、下拉、保持器（keeper）或无上下拉功能：

```text theme={null}
GPIO_NP = 0, /**<-- GPIO No Pull   >*/

GPIO_PD,     /**<-- GPIO Pull Down >*/

GPIO_KP,     /**<-- GPIO Keeper    >*/

GPIO_PU,     /**<-- GPIO Pull Up   >*/
```

## **驱动强度**

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

驱动强度可以是：

```text theme={null}
GPIO_2MA = 0,    /**<-- GPIO Drive 2 MA  >*/

GPIO_4MA,       /**<-- GPIO Drive 4 MA  >*/

GPIO_6MA,       /**<-- GPIO Drive 6 MA  >*/

GPIO_10MA,      /**<-- GPIO Drive 10 MA  >*/

GPIO_8MA,       /**<-- GPIO Drive 8 MA  >*/

GPIO_14MA,      /**<-- GPIO Drive 14 MA  >*/

GPIO_16MA,      /**<-- GPIO Drive 16 MA  >*/

GPIO_12MA,      /**<-- GPIO Drive 12 MA  >*/
```

## **功能选择**

用于选择路由到 GPIO 焊盘的模块。默认设置为通用功能（function 0）。

IQ-8275 中引脚复用选项的示例：RTSS \[48] 用于 CAN（func=0）或 EMAC（func=1）。

有关每个 GPIO 引脚分配和复用功能的更多信息，

* 请参阅 [QCS9075 + PMM8650AU Pin Assignment and GPIO Configuration Spreadsheet](https://docs.qualcomm.com/doc/80-73417-1A/80-73417-1A_REV_AC_QCS9075___PMM8650AU_Pin_Assignment_and_GPIO_Configuration_Spreadsheet.xlsm)。
* 请参阅 [QCS8275 + PMM8620AU Pin Assignment and GPIO Configuration Specification Spreadsheet](https://docs.qualcomm.com/doc/80-73475-1A/80-73475-1A_REV_AC_QCS8275___PMM8620AU_Pin_Assignment_and_GPIO_Configuration_Specification_Spreadsheet.xlsm)。

## **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);`
* 参数：
  > | \<in> | ngpio | GPIO 编号 |
  > | :- | :- | :- |
  > | \<in> | cfg | 指向 cfg 结构的指针 |
* 返回值：无

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

配置一组 GPIO 的上下拉、方向、驱动强度和功能。

* 原型：`void sail_gpio_config_group(int *ngpio, GPIOConfigType *cfg, uint8 nSize;`
* 参数：
  > | \<in> | ngpio | GPIO 编号 |
  > | :- | :- | :- |
  > | \<in> | cfg | 指向 cfg 结构的指针 |
  > | \<in> | cfg | 数组 ngpio 和 cfg 的大小 |
* 返回值：无

### **sail\_gpio\_ReadPin**

该读取函数读取 GPIO 引脚的已编程输出值。

* 原型：`GPIOValueType sail_gpio_ReadPin (int ngpio);`
* 参数：
  > | \<in> | ngpio | GPIO 编号 |
  > | :- | :- | :- |
* 返回值：
  > * 如果输入为 1，返回 GPIO\_HIGH
  > * 如果输入为 0，返回 GPIO\_LOW

### **sail\_gpio\_WritePin**

编程或写入 GPIO 引脚的输出值。

* 原型：`GPIOValueType sail_gpio_ReadPin (int ngpio);`
* 参数：
  > | \<in> | ngpio | GPIO 编号 |
  > | :- | :- | :- |
* 返回值：
  > * 如果输入为 1，返回 GPIO\_HIGH
  > * 如果输入为 0，返回 GPIO\_LOW

### **vSailGPIOWakeUpConfig**

`vSailGPIOWakeUpConfig` 是一个 GPIO 配置函数，专门用于设置 SAIL 电源控制器唤醒输入路径上的特定 GPIO 引脚。

* 原型：`static void vSailGPIOWakeUpConfig()`
* 参数：
  > | \<in> | ngpio | GPIO 编号 |
  > | :- | :- | :- |
* 返回值：无

有关支持唤醒的 GPIO 的更多信息，

* 请参阅 [QCS9075 + PMM8650AU Pin Assignment and GPIO Configuration Spreadsheet](https://docs.qualcomm.com/doc/80-73417-1A/80-73417-1A_REV_AC_QCS9075___PMM8650AU_Pin_Assignment_and_GPIO_Configuration_Spreadsheet.xlsm)。
* 请参阅 [QCS8275 + PMM8620AU Pin Assignment and GPIO Configuration Specification Spreadsheet](https://docs.qualcomm.com/doc/80-73475-1A/80-73475-1A_REV_AC_QCS8275___PMM8620AU_Pin_Assignment_and_GPIO_Configuration_Specification_Spreadsheet.xlsm)。

### **sail\_gpio\_ReadPinOutput**

用于读取 GPIO 输出值的接口。

* 原型：`GPIOValueType sail_gpio_ReadPinOutput(int ngpio);`
* 参数：
  > | \<in> | ngpio | GPIO 编号 |
  > | :- | :- | :- |
* 返回值：
  * 如果输出为 1，返回 GPIO\_HIGH
  * 如果输出为 0，返回 GPIO\_LOW

## **中断配置**

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

### **直连**

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

## **GPIO 中断配置 API**

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

### **uGPIOSummaryInt\_ConfigureInterrupt()**

允许客户端在指定的 GPIO 引脚上设置中断触发方式。触发方式为以下之一：

GPIO 汇总中断触发类型

| **中断触发类型** | **值** | **说明** |
| :-: | :-: | :-: |
| `UGPIOINT_TRIGGER_HIGH` | 0x0 | 仅当输入信号为高电平时触发 GPIO 中断。 |
| `UGPIOINT_TRIGGER_LOW` | 0x1 | 仅当输入信号为低电平时触发 GPIO 中断。 |
| `UGPIOINT_TRIGGER_RISING` | 0x2 | 仅当输入信号电平从低变高时触发 GPIO 中断。 |
| `UGPIOINT_TRIGGER_FALLING` | 0x3 | 仅当输入信号电平从高变低时触发 GPIO 中断。 |
| `UGPIOINT_TRIGGER_DUAL_EDGE` | 0x4 | 仅当输入信号电平从高变低或从低变高时触发 GPIO 中断。 |

* 原型：`static void uGPIOSummaryInt_ConfigureInterrupt(int nGPIO, int nTrigger, int nRawStatusEn, int nTargetProc);`
* 参数：
  > | \<in> | ngpio | GPIO 引脚。 |
  > | :- | :- | :- |
  > | \<in> | eTrigger | 注册客户端回调所对应的中断触发条件。 |
  > | \<in> | isr | 客户端 ISR 回调。 |
  > | \<in> | Param | 中断触发时提供给客户端回调的客户端指定参数。 |
* 返回值：无

### **uGPIOSummaryInt\_RegisterInterrupt()**

在 TLMM 上注册 GPIO 中断。

* 原型：`int uGPIOSummaryInt_RegisterInterrupt( uint32 nGPIO, uGPIOIntTriggerType eTrigger, uGPIOINTISR isr, uGPIOINTISRCtx param);`
* 参数：
  > | \<in> | ngpio | GPIO 引脚。 |
  > | :- | :- | :- |
  > | \<in> | eTrigger | 注册客户端回调所对应的中断触发条件。 |
  > | \<in> | isr | 客户端 ISR 回调。 |
  > | \<in> | Param | 中断触发时提供给客户端回调的客户端指定参数。 |
* 返回值：
  * UGPIOINT\_SUCCESS (0) - ISR 注册成功时返回此值。
  * UGPIOINT\_ERROR (-1) - uGPIOInt 驱动无法注册中断服务程序（ISR）时返回的错误。

### **uGPIOSummaryInt\_EnableInterrupt()**

在中断控制器上为特定 GPIO 启用中断。

* 原型：`int uGPIOSummaryInt_EnableInterrupt( uint32 nGPIO);`
* 参数：
  > | \<in> | ngpio | GPIO 引脚。 |
  > | :- | :- | :- |
* 返回值：
  * UGPIOINT\_SUCCESS (0) - ISR 注册成功时返回此值。
  * UGPIOINT\_ERROR (-1) - uGPIOInt 驱动无法注册中断服务程序（ISR）时返回的错误。

### **uGPIOSummaryInt\_DisableInterrupt()**

在中断控制器上为特定 GPIO 禁用中断。

* 原型：`int uGPIOSummaryInt_DisableInterrupt( uint32 nGPIO);`
* 参数：
  > | \<in> | ngpio | GPIO 引脚。 |
  > | :- | :- | :- |
* 返回值：
  * UGPIOINT\_SUCCESS (0) - ISR 注册成功时返回此值。
  * UGPIOINT\_ERROR (-1) - uGPIOInt 驱动无法注册中断服务程序（ISR）时返回的错误。

## **验证 GPIO 驱动**

有关验证 GPIO 驱动的信息，请参阅 [gpio](https://dragonwingdocs.qualcomm.com/System/FreeRTOS/RTSS-test-commands#gpio)。
