GPIO (通用I/O)
简介
GPIO 提供具有 16 位 I/O 接口,在 ET6001 提供了 6 组 GPIO IP (GPIOA~GPIOF) ,理论可同时提供 84 根GPIO 信号输入或者输出使用。
每个 I/O 都有独立的输出值寄存器和输出方向控制 bit,通过 set 和 clr 操作进行配置,不会影响已用通道的配置。
内置 IOMUX 模块,主要用于实现 IO 功能的复用,GPIO IP IO 与其他 IP 输出的 I/O 信号经 IOMUX 模块复用配置后,被选输出信号再与芯片 Pin 连接。
功能概述
支持输入输出方向选择。 默认为输入模式,输出驱动电路不使能。每个 Port 可以独立设置输入输出方向;
支持 IO 功能复用选择
支持输入状态选择 (浮空,上拉,下拉)
支持驱动能力选择(超低、低、中、高)
支持外部去毛刺滤波时钟输入,每个 GPIO 管脚可以独立设置;
支持高、低电平毛刺滤波,可滤除毛刺宽度受外部输入的去毛刺滤波时钟周期决定;
支持输入信号中断产生模式选择,支持边沿触发和电平触发。
支持屏蔽访问功能,允许在单个传输中读取或写入单个位或多个位。这样可以避免基于软件的读取-修改-写入操作;
支持使用地址值的位屏蔽;
允许通过读寄存器方式来读取 I/O 端口电平的数字信号。
GPIO 输入输出
GPIO 每个引脚通过 OUTENSET/OUTENCLR(set-clr 寄存器对)切换输入/输出方向,默认复位为输入。 输入方向下,引脚电平经过上拉/下拉、施密特整形和可选去抖后,反映到 DATA 寄存器,用 GPIO_readPin 读取; 输出方向下,先用 GPIO_writePin 把值写入 DATAOUT 输出锁存,再经输出使能驱动到引脚。
配置流程如下:
初始化结构体 调用
GPIO_initPadConfigStruct()将结构体参数配置为默认值配置引脚 根据需求修改结构体参数, 调用
GPIO_setPadConfig()传入配置引脚及结构体参数配置复用功能模式 调用
GPIO_setPinConfig()传入引脚及模式选择输入/输出模式(GOIO功能时) 调用
GPIO_setPortDirectionMode()传入引脚及模式(GPIO_DIR_IN 和 GPIO_DIR_OUT)读取/写引脚电平(GOIO功能时)
调用
GPIO_readPin()传入引脚获取引脚电平调用
GPIO_writePin()传入引脚及输出电平
IOMUX配置参数说明
IOC_Init_TypeDef结构体参数说明:
ds:驱动能力选择
IOC_DS_LEVEL_0:默认驱动能力等级(
default)IOC_DS_LEVEL_1:中等驱动能力等级
IOC_DS_LEVEL_2:强驱动能力等级
IOC_DS_LEVEL_3:最强驱动能力等级
pull:上拉下拉选择
IOC_PULL_NONE:无上拉下拉
IOC_PULL_UP:上拉
IOC_PULL_DOWN:下拉(
default)scht:施密特触发使能
IOC_SCHT_DISABLE:不使能(
default)IOC_SCHT_ENABLE:使能
dir:输入输出方向选择
IOC_DIR_IN_OUT:输入和输出(
default)IOC_DIR_OUT:仅输出
GPIO端口名称说明
芯片可用的 GPIO口名称包含在 GPIO_PinNumber 枚举类型中。
管脚名称与GPIO端口不是顺序对应的,对应关系如下表:
GPIO端口 |
GPIO管脚 |
|---|---|
GPIOA_0 |
GPIO47 |
GPIOA_1 |
GPIO48 |
GPIOA_2 |
GPIO51 |
GPIOA_3 |
GPIO50 |
GPIOA_4 |
GPIO28 |
GPIOA_5 |
GPIO46 |
GPIOA_6 |
GPIO49 |
GPIOA_7 |
GPIO76 |
GPIOA_8 |
GPIO77 |
GPIOA_9 |
GPIO66 |
GPIOA_10 |
GPIO52 |
GPIOA_11 |
GPIO53 |
GPIOA_12 |
GPIO54 |
GPIOA_13 |
GPIO67 |
GPIOA_14 |
GPIO78 |
GPIOA_15 |
GPIO79 |
GPIOB_0 |
GPIO63 |
GPIOB_1 |
GPIO68 |
GPIOB_2 |
GPIO69 |
GPIOB_3 |
GPIO70 |
GPIOB_4 |
GPIO8 |
GPIOB_5 |
GPIO4 |
GPIOB_6 |
GPIO3 |
GPIOB_7 |
GPIO2 |
GPIOB_8 |
GPIO1 |
GPIOB_9 |
GPIO0 |
GPIOB_10 |
GPIO40 |
GPIOB_11 |
GPIO23 |
GPIOB_12 |
GPIO41 |
GPIOB_13 |
GPIO22 |
GPIOB_14 |
GPIO7 |
GPIOB_15 |
GPIO44 |
GPIOC_0 |
GPIO5 |
GPIOC_1 |
GPIO9 |
GPIOC_2 |
GPIO61 |
GPIOC_3 |
GPIO59 |
GPIOC_4 |
GPIO10 |
GPIOC_5 |
GPIO34 |
GPIOC_6 |
GPIO15 |
GPIOC_7 |
GPIO14 |
GPIOC_8 |
GPIO6 |
GPIOC_9 |
GPIO30 |
GPIOC_10 |
GPIO31 |
GPIOC_11 |
GPIO29 |
GPIOC_12 |
GPIO72 |
GPIOC_13 |
GPIO74 |
GPIOC_14 |
GPIO73 |
GPIOC_15 |
GPIO75 |
GPIOD_0 |
GPIO64 |
GPIOD_1 |
GPIO80 |
GPIOD_2 |
GPIO55 |
GPIOD_3 |
GPIO60 |
GPIOD_4 |
GPIO20 |
GPIOD_5 |
GPIO21 |
GPIOD_6 |
GPIO13 |
GPIOD_7 |
GPIO12 |
GPIOD_8 |
GPIO11 |
GPIOD_9 |
GPIO33 |
GPIOD_10 |
GPIO16 |
GPIOD_11 |
GPIO17 |
GPIOD_12 |
GPIO25 |
GPIOD_13 |
GPIO26 |
GPIOD_14 |
GPIO27 |
GPIOD_15 |
GPIO37 |
GPIOE_0 |
GPIO35 |
GPIOE_1 |
GPIO43 |
GPIOE_2 |
GPIO56 |
GPIOE_3 |
GPIO57 |
GPIOE_4 |
GPIO58 |
GPIOE_5 |
GPIO39 |
GPIOE_6 |
GPIO42 |
GPIOE_7 |
GPIO65 |
GPIOE_8 |
GPIO62 |
GPIOE_9 |
GPIO83 |
GPIOE_10 |
GPIO84 |
GPIOE_11 |
GPIO85 |
GPIOE_12 |
GPIO71 |
GPIOE_13 |
GPIO82 |
GPIOE_14 |
GPIO81 |
GPIOE_15 |
GPIO45 |
GPIOF_0 |
SWCLK |
GPIOF_1 |
SWDIO |
GPIOF_2 |
GPIO32 |
GPIOF_3 |
GPIO24 |
另外,在代码中,每个 GPIO口枚举值由两个部分组成:端口名称(高4bit)和引脚号(低4bit)。端口名称由字母 A-F 组成,表示 GPIOA 到 GPIOF 端口。引脚号是一个十六进制数字,表示该端口的引脚编号。
例如:
GPIO0 = 0x19 : GPIO0对应GPIOB 端口的PIN9 引脚
GPIO16 = 0x3a : GPIO16对应GPIOD 端口的PIN10 引脚
IOMUX Function Mode模式选择
每个 GPIO口的引脚都可以配置为不同的功能模式。功能模式由 GPIO_setPinConfig() 函数调用配置。
GPIO_setPinConfig(pin_number, mode);
该函数的参数 mode 表示引脚的功能模式, 具体的定义在 et6x_pinmap.h 文件中。
例如:
#define GPIO10_MODE_GPIO10 (0) //GPIOC_4
#define GPIO10_MODE_SRPWM5_A (1) //GPIOC_4
#define GPIO10_MODE_SRPWM2_A (4) //GPIOC_4
#define GPIO10_MODE_EQEP0_A (5) //GPIOC_4
#define GPIO10_MODE_UART1_TX (6) //GPIOC_4
#define GPIO10_MODE_SPIM0_MISO (7) //GPIOC_4
#define GPIO10_MODE_I2C0_SDA (9) //GPIOC_4
GPIO 中断
GPIO 中断用于在引脚电平发生变化(或维持某电平)时,通过中断的方式通知 CPU,避免软件轮询占用 CPU 资源。
功能概述
支持输入信号中断产生模式选择,支持**边沿触发** 和**电平触发** ;
支持中断极性选择: - 边沿触发下选择**上升沿 / 下降沿** ; - 电平触发下选择**高电平 / 低电平** ;
每个 GPIO 引脚可独立使能/失能中断;
提供组合中断和独立中断两种中断源;
中断标志位支持软件查询与软件清除。
备注
一个 GPIO IP 提供 16 个 I/O 通道,每路 I/O 通道单独输出 1bit 中断 GPIOE 直接发送 16bit 中断以及合并后的中断给 CPU 作为中断源,GPIOA~D、F 只发送合并后的中断给 CPU。
中断源与中断号
每一组 GPIO 端口有一个合并的中断请求,任一使能中断的引脚触发都会进入对应端口的组合中断处理函数。
GPIOE 端口的每个引脚(GPIOE_0 ~ GPIOE_15,对应枚举 GPIO66 ~ GPIO81)另有独立的中断号,可直接将单个引脚映射到独立的中断处理函数。
中断号 |
对应 GPIO 端口 |
覆盖引脚(端口内序号) |
|---|---|---|
|
GPIOA |
GPIOA_0 ~ GPIOA_15 |
|
GPIOB |
GPIOB_0 ~ GPIOB_15 |
|
GPIOC |
GPIOC_0 ~ GPIOC_15 |
|
GPIOD |
GPIOD_0 ~ GPIOD_15 |
|
GPIOE |
GPIOE_0 ~ GPIOE_15 |
|
GPIOF |
GPIOF_0 ~ GPIOF_3(仅 4 引脚) |
中断号 |
对应引脚 |
|---|---|
|
GPIOE 端口 PIN0 ~ PIN15(GPIO66 ~ GPIO81) |
API 说明
中断配置函数:
函数 |
功能 |
|---|---|
配置指定引脚的中断模式与极性 |
|
使能指定引脚中断 |
|
失能指定引脚中断 |
|
清除指定引脚中断标志 |
|
查询指定引脚中断标志状态 |
配置结构体与枚举:
typedef enum
{
GPIO_INT_TYPE_LEVEL = 0x00, /*!< 电平触发 */
GPIO_INT_TYPE_EDGE = 0x01 /*!< 边沿触发 */
} GPIO_INT_TYPE_TypeDef;
typedef enum
{
GPIO_INT_POL_HIGH_RISING = 0x00, /*!< 高电平触发 / 上升沿触发 */
GPIO_INT_POL_LOW_FALLING = 0x01 /*!< 低电平触发 / 下降沿触发 */
} GPIO_INT_POL_TypeDef;
typedef struct
{
GPIO_INT_TYPE_TypeDef mode; /*!< 中断模式:电平或边沿 */
GPIO_INT_POL_TypeDef polarity; /*!< 中断极性:高/低电平,上升/下降沿 */
} GPIO_INT_Config_TypeDef;
软件配置过程
以按键触发 GPIO 边沿中断为例,完整配置可归结为 5 步 。
步骤 1:初始化中断基础 :在
main()开头初始化中断向量表,处理函数经Interrupt_register()注册到该表后才能被触发;全局中断上电默认使能。步骤 2:配置引脚为输入 :中断检测的是引脚**输入** 电平,需完成 pad、IOMUX 复用、方向三步配置。
步骤 3:配置中断触发方式 :通过
GPIO_setInterruptType()配置模式(边沿/电平)与极性(上升/下降、高/低),以下为**下降沿触发** 。步骤 4:注册中断处理函数 :调用
Interrupt_register()绑定中断号与处理函数。KEY_PIN(GPIO2)属于 GPIOB 端口,绑定 GPIOB 组合中断 ;GPIOE 端口引脚可用逐引脚独立中断号。优先级可选,用NVIC_SetPriority设置(默认 16 级,数值越小优先级越高)。步骤 5:使能中断 :两级使能缺一不可:先
GPIO_enableInterrupt()使能引脚中断(写INTENSET对应位),再Interrupt_enable()使能 NVIC 层中断。
中断处理函数
处理函数内先 GPIO_getInterruptStatus() 判断来源,执行业务,最后 GPIO_clearInterruptStatus() 清标志。边沿触发必须软件清标志 ,否则该引脚不会再触发新中断;电平触发在电平恢复后标志自动清除。
GPIO MASK ACCESS功能
GPIO 输出口对每个引脚都有一路独立的输出锁存。要单独更新其中某一位,常规做法是”读-改-写(Read-Modify-Write)”:先把整个端口的输出寄存器读回来,在寄存器里修改目标位,再整体写回。这个流程,不是原子的 ——读与写之间存在时间窗口,一旦被中断打断,或与另一条执行流(ISR、其他任务)同时操作同一端口,就可能发生”后写覆盖先写”而丢失更新。 ET6x 通过”屏蔽访问”机制解决该问题。
支持屏蔽访问功能,允许在单个传输中读取或写入单个位或多个位,避免基于软件的读取-修改-写入操作;
支持使用地址值的位屏蔽。
即:硬件提供一组”地址即掩码”的寄存器,一次 store 指令即可原子地更新一个或多个位,无需软件先读原值。
功能概述
支持屏蔽访问,单个传输 内写入单个位或多个位,避免软件读-改-写;
使用**地址值的位** 作为使能掩码,数据提供新值,掩码与数据解耦;
端口 16 位拆分为 低字节 (GPIO_Pin0~7)与 高字节 (GPIO_Pin8~15)两套掩码寄存器,逐位对应;
一次写入可同时**置位与清零** ,混合更新多位,掩码为 0 的位原样保持;
单条 store 指令完成,硬件级原子,不受中断/多任务干扰。
备注
SET/CLR 寄存器对”写 1 生效、写 0 忽略”,只能统一置位或统一清零; 掩码寄存器把”门”(改哪些位)编码进地址,既能置位也能清零,还能一次混合改多个位。
掩码操作原理
地址即掩码
掩码区从端口基址 + 0x400 开始,元素步长 4 字节(
uint32_t)。硬件取地址的bits[9:2]作使能掩码:
地址 = 端口基址 + 0x400 + 4 × n
掩码 = (地址 >> 2) & 0xFF
= (0x400 >> 2) & 0xFF ⊕ (n & 0xFF)
= 0 ⊕ n
= n
0x400 的那个 1 位于 bit10,恰好在 bits[9:2] 窗口之外,因此基址对掩码 零贡献 ,掩码纯净地等于下标 n。而元素步长 4 字节使下标在存入地址时左移 2 位(×4),硬件取 bits[9:2] 时右移 2 位(>>2),两者相互抵消——下标原封不动还原成掩码。
以 GPIOA(基址 0x40210000)写 bit3 为例:
环节 |
数值 |
1 所在位 |
|---|---|---|
数组下标 n |
0x08 |
bit3 |
地址(0x400 + 4n) |
0x40210420(0x400 + 0x20) |
bit5(×4 左移) |
硬件取 bits[9:2](>>2) |
0x08 |
bit3(还原) |
掩码与数据解耦
下标(地址) = “开哪几个门”,声明本次要改动哪几位;
数据 = “门里的值改成什么”,为 1 置位、为 0 清零;
掩码为 0 的位,硬件按影子值 原样保持 ,不读不写。
因此置位与清零操作,地址完全相同 ,仅数据不同:
库函数
函数 |
功能 |
|---|---|
原子地写单个引脚电平 |
|
原子地翻转单个引脚电平 |
|
按掩码一次写入多个位,置位/清零独立指定 |
GPIO 输入滤波
GPIO 引脚作为输入时,机械触点、外部环境干扰等常会在信号上叠加短暂的毛刺与抖动。若不做处理,这些毛刺可能导致:
读到错误的电平值;
触发错误的边沿中断;
软件轮询时采到不稳定的状态。
IO 输入滤波由 两套相互独立的硬件 组成,分别作用于不同的输入路径:
GPIO 去抖(Debounce / Qualification) :位于 GPIO 模块内部,作用于 GPIO 数字输入路径 (数据寄存器读取、GPIO 中断)。每个管脚独立配置,为 C2000 等器件所没有的独立去抖硬件。
Input XBAR 输入滤波窗口(Filter Window) :位于 Input XBAR 模块,作用于 GPIO 信号 进入 XBAR、再通往各外设(PWM 跳闸、CLB、外部中断等)的路径。每 8 个 GPIO 端口共享一组 窗口配置,结构与 C2000 的采样窗口限定一致。
GPIO 去抖用于滤除输入引脚上的毛刺,使 GPIO 数据寄存器读取值和 GPIO 中断源电平稳定。 去抖采样由**专门的去抖时钟 GPIO_GFCLK** 驱动,而不是 CPU 系统时钟。可滤除的毛刺宽度由 去抖时钟周期决定。
每个 GPIO 端口(GPIOA~F)拥有独立的去抖时钟分频器,每个管脚可以独立使能去抖并选择滤波模式。
硬件结构
CRG->GPIO_GFCLK[port] (去抖时钟,prescaler+1 分频)
│
▼
外部引脚 ──► [IN_POLARITY: 输入反相(可选)] ──► [去抖核心] ──► GPIO 数据寄存器 / 中断
▲
BOTHEDGE_DB_MODE ──────────────┘ (决定单边/双边滤波)
涉及寄存器:
CRG->GPIO_GFCLK[6].GPIO_GFCLK_DIV:每个端口独立的去抖时钟分频器,11 bit, prescaler + 1 分频 ,取值 0~2047。GPIOx->DEBOUNCE_MODE:每管脚 1 bit,使能该管脚去抖。GPIOx->BOTHEDGE_DB_MODE:每管脚 1 bit,使能双边沿去抖。GPIOx->IN_POLARITY:每管脚 1 bit,单边沿去抖时的滤波极性 (”GPIO Input inverted mode”,硬件通过输入反相实现单极性滤波)。
去抖核心的工作逻辑
去抖核心在每个 GPIO_GFCLK 周期采样一次输入,只有电平**持续稳定超过一个滤波窗口** 才更新 输出。窗口内的采样次数由硬件固定,软件只能通过去抖时钟分频间接控制窗口宽度。
边沿的识别 :比较相邻两次采样值,前后两拍不同即视为一次”变化”事件。
滤波的启动 :一旦检测到输入变化,计数器清零并开始重新累积;只要中途再次变化,计数器 重新清零,因此撑不满窗口的毛刺不会反映到输出。
三种滤波模式:
BOTHEDGE_DB_MODE = 1:双边沿去抖 。上升沿与下降沿都要先确认稳定超过窗口才放行, 高低两种毛刺均被滤除,正常信号的两个边沿都被延迟一个窗口。BOTHEDGE_DB_MODE = 0+IN_POLARITY = 1(GPIO_DB_POL_HIGH):只滤高电平毛刺 。 上升沿去抖(延迟一个窗口),下降沿直通(无延迟)。适合平时为低、偶发正脉冲干扰、 且需要快速响应拉低的信号。BOTHEDGE_DB_MODE = 0+IN_POLARITY = 0(GPIO_DB_POL_LOW):只滤低电平毛刺 。 下降沿去抖(延迟一个窗口),上升沿直通(无延迟)。适合平时为高、偶发负脉冲干扰、 且需要快速响应拉高的信号。
软件配置流程
GPIO 去抖按以下流程配置:
调用
GPIO_setQualificationPeriod()配置去抖时钟分频:
/* GPIOA 端口去抖时钟分频为 prescaler+1,prescaler 最大 2047 */ GPIO_setQualificationPeriod(GPIOA, prescaler);
调用
GPIO_setQualificationConfig()选择滤波模式:
GPIO_DB_Init_TypeDef db_config; db_config.mode = GPIO_DB_EDGE_SINGLE; /* 或 GPIO_DB_EDGE_DOUBLE */ db_config.polarity = GPIO_DB_POL_HIGH; /* 或 GPIO_DB_POL_LOW */ GPIO_setQualificationConfig(GPIO48, &db_config);
调用
GPIO_enableQualification()/GPIO_disableQualification()使能 / 关闭去抖。
GPIO_enableQualification(GPIO48);备注
GPIO_DB_EDGE_DOUBLE模式下polarity字段不生效,双边沿同时滤波。
Input XBAR 输入滤波窗口(Filter Window)
功能概述
Input XBAR 的输入均来自 GPIO,GPIO 信号在进入 XBAR 后先经过**极性选择、信号同步、接口滤波** , 再进行信号输出选择。输入滤波窗口用于抗干扰,滤除进入 XBAR 的 GPIO 信号上的毛刺。
每 8 个 GPIO 端口共享一组窗口配置值 ,滤波使能按单个输入通道独立配置。
硬件结构
滤波时钟由 AHB 时钟分频得到:filter clk = AHB_CLK / 2 / filter_dly 。
filter_dly取值范围 0~1023(10 bit),为每个滤波窗口组的窗口宽度参数。窗口分组枚举
XBAR_INXB_FILTERWND_GRP_Def,每组对应 8 个 GPIO 引脚, 具体引脚对应关系见该枚举定义中的映射表。对应寄存器为
XBAR->INXB_FLTWID0/1/...,每个 32 bit 寄存器容纳 3 组(每组 10 bit) 窗口配置。
软件配置流程
调用
XBAR_INXB_setInputFilterWnd()设置某 GPIO 组的滤波窗口宽度:
/* GPIOA 组0(GPIO47 所在 8 引脚组)窗口宽度为 filter_dly, 滤波时钟 = AHB_CLK / 2 / filter_dly */ XBAR_INXB_setInputFilterWnd(INXB_FILTERWND_GPIOA_GRP0, filter_dly);注意
该参数对同组内所有输入通道同时生效。
调用
XBAR_INXB_initInputChannel()对输入通道配置滤波使能与极性:
XBAR_INXB_InCfg_TypeDef in_cfg; in_cfg.inFilterEn = ENABLE; /* 使能该输入通道滤波 */ in_cfg.inInvertEn = DISABLE; /* 输入极性,默认不取反 */ XBAR_INXB_initInputChannel(&in_cfg, &in_ch_mask);
后续按 Input XBAR 常规流程配置输出通道并使能(参考 xbar 章节)。
备注
inFilterEn为每个输入通道独立的滤波使能开关;若不使能,则该通道输入 不经过滤波窗口,直接同步后进入输出选择。
备注
毛刺宽度与窗口 :GPIO 去抖可滤除的毛刺宽度由去抖时钟(分频后)周期决定; Input XBAR 滤波窗口宽度由
filter_dly决定(滤波时钟 = AHB_CLK/2/filter_dly)。 配置时应使窗口宽度大于被滤毛刺宽度,并保证小于正常信号的最小脉冲宽度, 否则正常信号也会被滤除或延迟。边沿延迟 :被滤波的边沿都会引入约一个窗口的延迟;选择单极性滤波可以让 另一方向边沿直通(零延迟),用于需要快速响应的一侧。
复位行为 :去抖与滤波默认关闭,输入仅做同步。
应用示例
IO翻转示例:GPIO/GPIO_TogglePin。
API Reference
Header File
Functions
-
void GPIO_initPadConfigStruct(IOC_Init_TypeDef *cfg)
Fill param to IOC_Init_TypeDef struct to default value.
- 参数:
cfg – point to IOC_Init_TypeDef struct to initial
-
DRV_Status GPIO_setPadConfig(GPIO_PinNumber pin_number, IOC_Init_TypeDef *cfg)
IOC configure for PAD attribute.
- 参数:
pin_number – The number enumerated in the enumeration type
cfg – pin initial param such as mode, ds, dir, pull, scht .
- 返回:
DRV_Status
-
DRV_Status GPIO_setPinConfig(GPIO_PinNumber pin_number, uint8_t mode)
IOC configure for Pin AF Mode.
- 参数:
pin_number – The number enumerated in the enumeration type
mode – functional mode ,available mappings are supplied in
ex6x_pinmap.h
- 返回:
DRV_Status
-
DRV_Status GPIO_resetPort(GPIO_Type *GPIOx)
reset GPIO Module to default value
- 参数:
GPIOx – Select the GPIO port [GPIOA~GPIOF]
- 返回:
DRV_Status
-
DRV_Status GPIO_setPortDirectionMode(GPIO_PinNumber pin_number, GPIO_DIR_TypeDef dir)
Set GPIO Group direction to Output.
- 参数:
pin_number – The number enumerated in the enumeration type
dir – This parameter can be GPIO_DIR_IN_OUT or GPIO_DIR_OUT
- 返回:
DRV_Status
-
FlagStatus GPIO_readPin(GPIO_PinNumber pin_number)
Read Bit Value on a GPIO pin.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
FlagStatus
-
DRV_Status GPIO_writePin(GPIO_PinNumber pin_number, FlagStatus bitval)
Write Bit value to GPIO pin.
- 参数:
pin_number – GPIO pin number
bitval – SET or RESET value
- 返回:
DRV_Status
-
DRV_Status GPIO_togglePin(GPIO_PinNumber pin_number)
Toggle pin output state base on current pin state.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
DRV_Status
-
DRV_Status GPIO_togglePinAtomic(GPIO_PinNumber pin_number)
Toggle pin output state with atomic access operation.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
DRV_Status
-
uint16_t GPIO_getPortPins(GPIO_Type *GPIOx)
Read GPIO value on a Port.
- 参数:
GPIOx – Select the GPIO portSelect the GPIO port [GPIOA~GPIOF]
- 返回:
uint16_t
-
DRV_Status GPIO_setPortPins(GPIO_Type *GPIOx, uint16_t portval)
Write GPIO value to Port.
- 参数:
GPIOx – Select the GPIO portSelect the GPIO port [GPIOA~GPIOF]
portval – value write to GPIO port
- 返回:
DRV_Status
-
DRV_Status GPIO_setPortPinsMasked(GPIO_Type *GPIOx, uint16_t bits_set_mask, uint16_t bits_clr_mask)
Set GPIO port with Masked access operation.
- 参数:
GPIOx – Select the GPIO port [GPIOA~GPIOF]
bits_set_mask – Bits Mask to Set for example 0x8070 GPIOx_4/5/6/15 set to 1
bits_clr_mask – Bits Msk to Clear for example 0x1007 GPIOx_0/1/2/12 set to 0
- 返回:
DRV_Status
-
DRV_Status GPIO_writePinAtomic(GPIO_PinNumber pin_number, FlagStatus bitval)
write GPIO pin with atomic access operation
- 参数:
pin_number – GPIO pin number
bitval – SET or RESET value
- 返回:
DRV_Status
-
DRV_Status GPIO_setInterruptType(GPIO_PinNumber pin_number, GPIO_INT_Config_TypeDef *int_config)
configure GPIO Interrupt type and polarity
- 参数:
pin_number – The number enumerated in the enumeration type
int_config – param for interrupt type and polarity
- 返回:
DRV_Status
-
DRV_Status GPIO_enableInterrupt(GPIO_PinNumber pin_number)
Enable GPIO Interrupt.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
DRV_Status
-
DRV_Status GPIO_disableInterrupt(GPIO_PinNumber pin_number)
Disable GPIO Interrupt.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
DRV_Status
-
DRV_Status GPIO_clearInterruptStatus(GPIO_PinNumber pin_number)
Clear GPIO Interrupt Status.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
DRV_Status
-
ITStatus GPIO_getInterruptStatus(GPIO_PinNumber pin_number)
Get GPIO Pin Interrupt Status.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
ITStatus
-
DRV_Status GPIO_setQualificationConfig(GPIO_PinNumber pin_number, GPIO_DB_Init_TypeDef *db_config)
Configure GPIO Debounce Initial param.
- 参数:
pin_number – The number enumerated in the enumeration type
db_config –
- 返回:
DRV_Status
-
DRV_Status GPIO_enableQualification(GPIO_PinNumber pin_number)
Enable GPIO Debounce function.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
DRV_Status
-
DRV_Status GPIO_disableQualification(GPIO_PinNumber pin_number)
Disable GPIO Debounce function.
- 参数:
pin_number – The number enumerated in the enumeration type
- 返回:
DRV_Status
-
DRV_Status GPIO_setQualificationPeriod(GPIO_Type *GPIOx, uint16_t prescaler)
Configure GPIO gclk prescaler.
- 参数:
GPIOx – Select the GPIO port [GPIOA~GPIOF]
prescaler – (prescaler + 1) div for GPIO GFCLK, max 2047
- 返回:
DRV_Status
-
static void GPIO_setPinHigh(GPIO_PinNumber pin_number)
Sets the specified GPIO pin to high.
- 参数:
pin_number – The number enumerated in the enumeration type
-
static void GPIO_setPinLow(GPIO_PinNumber pin_number)
Clears the specified GPIO pin to low.
- 参数:
pin_number – The number enumerated in the enumeration type
Structures
-
struct IOC_Init_TypeDef
IOC init struct definition.
Public Members
-
IOC_DS_LEVEL_TypeDef ds
Pad drive strength level
-
IOC_PULL_MODE_TypeDef pull
Pad pull up/down ctrl
-
IOC_SCHT_MODE_TypeDef scht
Pad schmitt trigger enable
-
IOC_DIR_TypeDef dir
Pad input enable
-
IOC_DS_LEVEL_TypeDef ds
-
struct GPIO_INT_Config_TypeDef
GPIO interrupt configure.
Public Members
-
GPIO_INT_TYPE_TypeDef mode
Pin interrupt mode: level or edge
-
GPIO_INT_POL_TypeDef polarity
Pin interrupt polarity: high/low; rasing/falling
-
GPIO_INT_TYPE_TypeDef mode
-
struct GPIO_DB_Init_TypeDef
GPIO Debounce configure.
Public Members
-
GPIO_DB_MODE_TypeDef mode
GPIO debounce mode: single edge or double edge
-
GPIO_DB_POL_TypeDef polarity
GPIO debounce polarity: high or low
-
GPIO_DB_MODE_TypeDef mode
Macros
-
GPIO_BASE
GPIO DIR enumeration.
-
GPIO_PIN_00
GPIO Pin mask define.
GPIO pin 0
-
GPIO_PIN_01
GPIO pin 1
-
GPIO_PIN_02
GPIO pin 2
-
GPIO_PIN_03
GPIO pin 3
-
GPIO_PIN_04
GPIO pin 4
-
GPIO_PIN_05
GPIO pin 5
-
GPIO_PIN_06
GPIO pin 6
-
GPIO_PIN_07
GPIO pin 7
-
GPIO_PIN_08
GPIO pin 8
-
GPIO_PIN_09
GPIO pin 9
-
GPIO_PIN_10
GPIO pin 10
-
GPIO_PIN_11
GPIO pin 11
-
GPIO_PIN_12
GPIO pin 12
-
GPIO_PIN_13
GPIO pin 13
-
GPIO_PIN_14
GPIO pin 14
-
GPIO_PIN_15
GPIO pin 15
-
GPIO_PIN_ALL
GPIO pin all
Enumerations
-
enum GPIO_PinNumber
Pin Definition Enumeration Bits 4 ~ 7 represent the group, and bits 0 ~ 3 represent the number.
Values:
-
enumerator GPIO0
-
enumerator GPIO1
-
enumerator GPIO2
-
enumerator GPIO3
-
enumerator GPIO4
-
enumerator GPIO5
-
enumerator GPIO6
-
enumerator GPIO7
-
enumerator GPIO8
-
enumerator GPIO9
-
enumerator GPIO10
-
enumerator GPIO11
-
enumerator GPIO12
-
enumerator GPIO13
-
enumerator GPIO14
-
enumerator GPIO15
-
enumerator GPIO16
-
enumerator GPIO17
-
enumerator GPIO20
-
enumerator GPIO21
-
enumerator GPIO22
-
enumerator GPIO23
-
enumerator GPIO24
-
enumerator GPIO25
-
enumerator GPIO26
-
enumerator GPIO27
-
enumerator GPIO28
-
enumerator GPIO29
-
enumerator GPIO30
-
enumerator GPIO31
-
enumerator GPIO32
-
enumerator GPIO33
-
enumerator GPIO34
-
enumerator GPIO35
-
enumerator GPIO37
-
enumerator GPIO39
-
enumerator GPIO40
-
enumerator GPIO41
-
enumerator GPIO42
-
enumerator GPIO43
-
enumerator GPIO44
-
enumerator GPIO45
-
enumerator GPIO46
-
enumerator GPIO47
-
enumerator GPIO48
-
enumerator GPIO49
-
enumerator GPIO50
-
enumerator GPIO51
-
enumerator GPIO52
-
enumerator GPIO53
-
enumerator GPIO54
-
enumerator GPIO55
-
enumerator GPIO56
-
enumerator GPIO57
-
enumerator GPIO58
-
enumerator GPIO59
-
enumerator GPIO60
-
enumerator GPIO61
-
enumerator GPIO62
-
enumerator GPIO63
-
enumerator GPIO64
-
enumerator GPIO65
-
enumerator GPIO66
-
enumerator GPIO67
-
enumerator GPIO68
-
enumerator GPIO69
-
enumerator GPIO70
-
enumerator GPIO71
-
enumerator GPIO72
-
enumerator GPIO73
-
enumerator GPIO74
-
enumerator GPIO75
-
enumerator GPIO76
-
enumerator GPIO77
-
enumerator GPIO78
-
enumerator GPIO79
-
enumerator GPIO80
-
enumerator GPIO81
-
enumerator GPIO82
-
enumerator GPIO83
-
enumerator GPIO84
-
enumerator GPIO85
-
enumerator GPIO0
-
enum GPIO_DIR_TypeDef
Values:
-
enumerator GPIO_DIR_IN
GPIO Dir Input Only
-
enumerator GPIO_DIR_OUT
GPIO Dir Output Only
-
enumerator GPIO_DIR_IN
-
enum GPIO_INT_TYPE_TypeDef
GPIO Interrupt type enumeration.
Values:
-
enumerator GPIO_INT_TYPE_LEVEL
GPIO Interrupt type level
-
enumerator GPIO_INT_TYPE_EDGE
GPIO Interrupt type edge
-
enumerator GPIO_INT_TYPE_LEVEL
-
enum GPIO_INT_POL_TypeDef
GPIO Interrupt polarity enumeration.
Values:
-
enumerator GPIO_INT_POL_HIGH_RISING
GPIO Interrupt polarity high level or rising edge
-
enumerator GPIO_INT_POL_LOW_FALLING
GPIO Interrupt polarity low level or falling edge
-
enumerator GPIO_INT_POL_HIGH_RISING
-
enum GPIO_DB_MODE_TypeDef
GPIO Debounce mode enumeration.
Values:
-
enumerator GPIO_DB_EDGE_SINGLE
GPIO debounce single edge filter
-
enumerator GPIO_DB_EDGE_DOUBLE
GPIO debounce double edge filter
-
enumerator GPIO_DB_EDGE_SINGLE
-
enum GPIO_DB_POL_TypeDef
GPIO Debounce single edge polarity enumeration.
Values:
-
enumerator GPIO_DB_POL_HIGH
GPIO debounce high level glitch filter
-
enumerator GPIO_DB_POL_LOW
GPIO debounce low level glitch filter
-
enumerator GPIO_DB_POL_HIGH
-
enum IOC_DS_LEVEL_TypeDef
IO Drive Strength enumeration.
Values:
-
enumerator IOC_DS_LEVEL_0
IO drive strength level very low
-
enumerator IOC_DS_LEVEL_1
IO drive strength level low
-
enumerator IOC_DS_LEVEL_2
IO drive strength level medium
-
enumerator IOC_DS_LEVEL_3
IO drive strength level High
-
enumerator IOC_DS_LEVEL_0
-
enum IOC_PULL_MODE_TypeDef
IO pull-up pull-down configure enumeration.
Values:
-
enumerator IOC_PULL_NONE
IO pull none
-
enumerator IOC_PULL_DOWN
IO pull down
-
enumerator IOC_PULL_UP
IO pull up
-
enumerator IOC_PULL_NONE