LGPIO

介绍

Nuclei LGPIO(逻辑通用输入输出)描述了逻辑通用输入输出控制器(LGPIO)的操作。LGPIO控制器是映射在内部存储器映射中的外设。通用输入输出(GPIO)端口的每个端口位都可以通过软件在多种模式下进行单独配置(方向、上拉使能、驱动值等),以及在这些信号的各种控制源之间进行选择(硬件I/O功能)。

主要特性

LGPIO的主要特性如下:

  • 输出状态:推挽或开漏+上拉/下拉。

  • 输出数据来自输出数据寄存器(GPIOx_OVAL)或外设(复用功能输出)。

  • 输入状态:浮空、上拉/下拉。

  • 输入数据到输入数据寄存器(GPIOx_IVAL)或外设(复用功能输入)。

  • 对每个LGPIO的位操作敏捷:

    • 位设置(GPIOx_BIT_SET寄存器),

    • 位复位(GPIOx_BIT_RESET寄存器),

    • 位翻转(GPIOx_BIT_TOGGLE寄存器)。

  • 锁定机制(GPIOx_MASK)提供冻结I/O端口输出值的功能。

  • 高度灵活的引脚复用允许将I/O引脚用作LGPIO或多个外设功能之一。

  • 支持噪声滤波器功能,噪声长度可通过软件配置。

功能描述

根据数据表中列出的每个I/O端口的具体硬件特性,通用输入输出(GPIO)端口的每个端口位都可以通过软件在多种模式下进行单独配置:

  • 输入浮空。

  • 输入上拉。

  • 输入下拉。

  • 开漏输出,具有上拉或下拉能力。

  • 推挽输出,具有上拉或下拉能力。

  • 复用功能推挽,具有上拉或下拉能力。

  • 复用功能开漏,具有上拉或下拉能力。

每个I/O端口位都可以自由编程,但是I/O端口寄存器必须作为32位字进行访问。

中断

每个LGPIO位可以生成一个中断位。中断可以由上升沿或下降沿驱动,或由电平值驱动,每个都可以单独使能。

输入在被中断逻辑采样之前进行同步,因此输入脉冲宽度必须足够长才能被同步逻辑检测到。

要使能中断,请将RISE_IE和/或FALL_IE和/或HIGH_IE和/或LOW_IE中的相应位设置为1。 如果RISE_IP或FALL_IP或HIGH_IP或LOW_IP中的相应位被设置,则会产生中断引脚。

所有端口都具有外部中断能力。要使用外部中断线,端口必须配置为输入模式。

注:此结构对每个引脚重复。

I/O端口控制寄存器

  • GPIOx_IE:用于使能I/O输入模式。

  • GPIOx_MODE0,GPIOx_MODE1:用于选择输出类型(推挽或开漏)。

  • GPIOx_PULL_MODE0,GPIOx_PULL_MODE1:用于选择上拉/下拉,无论I/O方向如何。

I/O端口数据寄存器

  • GPIOx_IVAL:存储通过I/O输入的输入数据,只读寄存器。

  • GPIOx_OVAL:存储要输出的数据,可读/写访问。

I/O数据位操作处理

  • GPIOx_SET/GPIOx_RESET:允许应用程序在输出数据寄存器中设置和复位每个单独的位。

  • GPIOx_TOGGLE:允许应用程序在输出数据寄存器中翻转每个单独的位。

  • GPIOx_MASK:允许应用程序在输出数据寄存器中屏蔽每个单独的位。

I/O复用功能输入/输出

提供这些寄存器来为每个I/O选择可用的复用功能输入/输出之一。使用这些寄存器,用户可以根据应用程序的需要将复用功能连接到其他引脚。

这意味着使用GPIOx_AFIO_SEL0、GPIOx_AFIO_SEL1和GPIOx_AFIO_SEL2复用功能寄存器,在每个LGPIO上复用多个可能的外设功能。因此,应用程序可以为每个I/O选择任何一个可能的功能。AF选择信号对复用功能输入和复用功能输出是通用的,为给定I/O的复用功能输入/输出选择单个通道。

驱动强度

当配置为输出时,每个引脚都有一个软件可控的驱动强度: {GPIOx_DS3,GPIOx_DS2,GPIOx_DS1,GPIOx_DS0}。

输出反转

当配置为输出(软件或IOF控制)时,软件可写的输出异或寄存器(GPIOx_OUT_XOR)与输出组合以反转它。

噪声滤波器

在LGPIO中,用户可以根据需要配置噪声滤波器。每个PAD可以独立打开/关闭滤波器功能(通过GPIO_GRP*_DIGITAL_FILTER_EN寄存器)。

噪声长度可以通过GPIO_DIGITAL_NOISE_FILTER_LENGTH寄存器设置,单位是LGPIO的时钟。

小于GPIO_DIGITAL_NOISE_FILTER_LENGTH的信号长度将被视为噪声, 等于或大于GPIO_DIGITAL_NOISE_FILTER_LENGTH的信号长度将被视为正常功能信号。

数字功能的延迟是GPIO_DIGITAL_NOISE_FILTER_LENGTH+1。

中断

表 7.1 显示了LGPIO中断请求。

表 7.1: LGPIO中断请求

中断事件

事件标志

使能控制位

LGPIO PAD的上升沿

RISE_IP

RISE_IE

LGPIO PAD的下降沿

FALL_IP

FALL_IE

LGPIO PAD的高电平

HIGH_IP

HIGH_IE

LGPIO PAD的低电平

LOW_IP

LOW_IE

注:

  1. 每个LGPIO位可以从PAD采样四种类型的外部中断事件:上升沿、下降沿、高电平或低电平。

  2. 但LGPIO只向CPU生成高电平中断类型。

寄存器

LGPIO寄存器

注:

  1. 表 8.1 和 8.2 中的”i”是GPIO_NUM除以32。 例如:如果GPIO_NUM配置为35,则i=floor(35/32)=1。

  2. 表 8.1 和 8.2 中所有寄存器的最大宽度是32位,这是GPIO_NUM为32且地址4字节对齐的配置示例。 如果GPIO_NUM小于32,寄存器的宽度取决于实际的GPIO_NUM配置。 如果GPIO_NUM大于32,每个寄存器的实际地址应加上特定偏移:”i” * 0x100。

寄存器及其在LGPIO中的相应偏移如表 8.1 所示。

表 8.1: LGPIO中寄存器的偏移地址

偏移

寄存器名称

功能描述

0x0

GPIO_GRP0_IVAL

来自LGPIO的输入数据。

0x8

GPIO_GRP0_MODE0

LGPIO的工作模式。

0xC

GPIO_GRP0_MODE1

LGPIO的工作模式。

0x10

GPIO_GRP0_OVAL

到LGPIO的输出数据。

0x14

GPIO_GRP0_RISE_IE

每个LGPIO的上升中断使能。

0x18

GPIO_GRP0_RISE_IP

每个LGPIO的上升中断挂起。

0x1C

GPIO_GRP0_FALL_IE

每个LGPIO的下降中断使能。

0x20

GPIO_GRP0_FALL_IP

每个LGPIO的下降中断挂起。

0x24

GPIO_GRP0_HIGH_IE

每个LGPIO的高电平中断使能。

0x28

GPIO_GRP0_HIGH_IP

每个LGPIO的高电平中断挂起。

0x2C

GPIO_GRP0_LOW_IE

每个LGPIO的低电平中断使能。

0x30

GPIO_GRP0_LOW_IP

每个LGPIO的低电平中断挂起。

0x44

GPIO_GRP0_OUT_MASK

每个LGPIO的输出数据掩码。

0x48

GPIO_GRP0_BIT_SET

每个LGPIO的单独位设置。

0x4C

GPIO_GRP0_BIT_RESET

每个LGPIO的单独位复位。

0x50

GPIO_GRP0_BIT_TOGGLE

每个LGPIO的单独位翻转。

0x54

GPIO_GRP0_PULL_MODE0

每个LGPIO的上拉/下拉模式。

0x58

GPIO_GRP0_PULL_MODE1

每个LGPIO的上拉/下拉模式。

0x74

GPIO_GRP0_SW_KEEP

使能软件总线保持。

0x84

GPIO_GRP0_EVENT_RISE_EN

使能上升事件。

0x88

GPIO_GRP0_EVENT_FALL_EN

使能下降事件。

0x8C

GPIO_GRP0_DIGITAL_NOISE_FILTER_EN

使能pad_ival同步的数字滤波电路。

0x90

GPIO_GRP0_IRQ_STATUS

所有LGPIO的中断状态。

0x94

GPIO_VERSION

IP版本。

0x98

GPIO_GRP0_EVENT_HIGH

使能高电平事件

0x9C

GPIO_GRP0_EVENT_LOW

使能低电平事件

0xA0

GPIO_DIGITAL_NOISE_LENGTH

LGPIO将滤除的噪声长度

GPIO_GRP0_IVAL

地址偏移:0x0。

表 8.2: GPIO_GRP0_IVAL格式

字段

位

访问

复位值

描述

GPIO_GRP0_IVAL

31:0

RO

0x0

从 PAD 到内核的接收数据

GPIO_GRP0_MODE0

地址偏移:0x8。

表 8.3: GPIO_GRP0_MODE0格式

字段

位

访问

复位值

描述

GPIO_GRP0_MODE0

31:0

RW

0x0

  • 为每个特定 PAD 选择发送器类型。此寄存器应与 GPIO_GRP0_MODE1 配合使用

  • 例如:

  • 对于 PAD0,设置如下:

  • {GPIO_GRP0_MODE1[0], GPIO_GRP0_MODE0[0]}:

  • 2’b00:高阻

  • 2’b01:推挽

  • 2’b10:开漏

  • 2’b11:保留

GPIO_GRP0_MODE1

地址偏移:0xC。

表 8.4: GPIO_GRP0_MODE1格式

字段

位

访问

复位值

描述

GPIO_GRP0_MODE1

31:0

RW

0x0

  • 为每个特定 PAD 选择发送器类型。此寄存器应与 GPIO_GRP0_MODE0 配合使用

  • 例如:

  • 对于 PAD0,设置如下:

  • {GPIO_GRP0_MODE1[0], GPIO_GRP0_MODE0[0]}:

  • 2’b00:高阻

  • 2’b01:推挽

  • 2’b10:开漏

  • 2’b11:保留

GPIO_GRP0_OVAL

地址偏移:0x10。

表 8.5: GPIO_GRP0_OVAL格式

字段

位

访问

复位值

描述

GPIO_GRP0_OVAL

31:0

RW

0x0

从内核到 PAD 的发送数据

GPIO_GRP0_RISE_IE

地址偏移:0x14。

表 8.6: GPIO_GRP0_RISE_IE格式

字段

位

访问

复位值

描述

GPIO_GRP0_RISE_IE

31:0

RW

0x0

  • 上升中断使能

  • 1’b0:禁用上升中断

  • 1’b1:使能上升中断

GPIO_GRP0_RISE_IP

地址偏移:0x18。

表 8.7: GPIO_GRP0_RISE_IP格式

字段

位

访问

复位值

描述

GPIO_GRP0_RISE_IP

31:0

RW

0x0

上升中断挂起

GPIO_GRP0_FALL_IE

地址偏移:0x1C。

表 8.8: GPIO_GRP0_FALL_IE格式

字段

位

访问

复位值

描述

GPIO_GRP0_FALL_IE

31:0

RW

0x0

  • 下降中断使能

  • 1’b0:禁用下降中断

  • 1’b1:使能下降中断

GPIO_GRP0_FALL_IP

地址偏移:0x20。

表 8.9: GPIO_GRP0_FALL_IP格式

字段

位

访问

复位值

描述

GPIO_GRP0_FALL_IP

31:0

RW

0x0

下降中断挂起

GPIO_GRP0_HIGH_IE

地址偏移:0x24。

表 8.10: GPIO_GRP0_HIGH_IE格式

字段

位

访问

复位值

描述

GPIO_GRP0_HIGH_IE

31:0

RW

0x0

  • 高电平中断使能

  • 1’b0:禁用高电平中断

  • 1’b1:使能高电平中断

GPIO_GRP0_HIGH_IP

地址偏移:0x28。

表 8.11: GPIO_GRP0_HIGH_IP格式

字段

位

访问

复位值

描述

GPIO_GRP0_HIGH_IP

31:0

RW

0x0

高电平中断挂起

GPIO_GRP0_LOW_IE

地址偏移:0x2C。

表 8.12: GPIO_GRP0_LOW_IE格式

字段

位

访问

复位值

描述

GPIO_GRP0_LOW_IE

31:0

RW

0x0

  • 低电平中断使能

  • 1’b0:禁用低电平中断

  • 1’b1:使能低电平中断

GPIO_GRP0_LOW_IP

地址偏移:0x30。

表 8.13: GPIO_GRP0_LOW_IP格式

字段

位

访问

复位值

描述

GPIO_GRP0_LOW_IP

31:0

RW

0x0

低电平中断挂起

GPIO_GRP0_OUT_MASK

地址偏移:0x44。

表 8.14: GPIO_GRP0_OUT_MASK格式

字段

位

访问

复位值

描述

GPIO_GRP0_OUT_MASK

31:0

RW

0xFFFF_FFFF

  • 每个 PAD 的输出数据掩码

  • 1’b0:当软件设置 LGPIO_GPRx_OVAL 时,PAD 的电平将保持旧值

  • 1’b1:当软件设置 LGPIO_GPRx_OVAL 时,PAD 的电平将同时改变

GPIO_GRP0_BIT_SET

地址偏移:0x48。

表 8.15: GPIO_GRP0_BIT_SET格式

字段

位

访问

复位值

描述

GPIO_GRP0_BIT_SET

31:0

WO

0x0

  • 为每个 PAD 设置输出值

  • 1’b0:无效果

  • 1’b1:为每个 PAD 设置输出值

GPIO_GRP0_BIT_RESET

地址偏移:0x4C。

表 8.16: GPIO_GRP0_BIT_RESET格式

字段

位

访问

复位值

描述

GPIO_GRP0_BIT_RESET

31:0

WO

0x0

  • 为每个 PAD 复位输出值

  • 1’b0:无效果

  • 1’b1:为每个 PAD 复位输出值

GPIO_GRP0_BIT_TOGGLE

地址偏移:0x50。

表 8.17: GPIO_GRP0_BIT_TOGGLE格式

字段

位

访问

复位值

描述

GPIO_GRP0_BIT_TOGGLE

31:0

WO

0x0

  • 为每个 PAD 翻转输出值

  • 1’b0:无效果

  • 1’b1:为每个 PAD 翻转输出值

GPIO_GRP0_PULL_MODE0

地址偏移:0x54。

表 8.18: GPIO_GRP0_PULL_MODE0格式

字段

位

访问

复位值

描述

GPIO_GRP0_PULL_MODE0

31:0

RW

0x0

  • 为每个特定 PAD 选择输出类型。此寄存器应与 GPIO_GRP0_PULL_MODE1 配合使用

  • 例如:

  • 对于 PAD0,设置如下:

  • {GPIO_GRP0_PULL_MODE1[0], GPIO_GRP0_PULL_MODE0[0]}:

  • 2’b00:PULL_UP = 0, PULL_DOWN = 0

  • 2’b01:PULL_UP = 1, PULL_DOWN = 0

  • 2’b10:保留

  • 2’b11:PULL_UP = 0, PULL_DOWN = 1

GPIO_GRP0_PULL_MODE1

地址偏移:0x58。

表 8.19: GPIO_GRP0_PULL_MODE1格式

字段

位

访问

复位值

描述

GPIO_GRP0_PULL_MODE1

31:0

RW

0x0

  • 为每个特定 PAD 选择输出类型。此寄存器应与 GPIO_GRP0_PULL_MODE0 配合使用

  • 例如:

  • 对于 PAD0,设置如下:

  • {GPIO_GRP0_PULL_MODE1[0], GPIO_GRP0_PULL_MODE0[0]}:

  • 2’b00:PULL_UP = 0, PULL_DOWN = 0

  • 2’b01:PULL_UP = 1, PULL_DOWN = 0

  • 2’b10:保留

  • 2’b11:PULL_UP = 0, PULL_DOWN = 1

GPIO_GRP0_SW_KEEP

地址偏移:0x74。

表 8.20: GPIO_GRP0_SW_KEEP格式

字段

位

访问

复位值

描述

GPIO_GRP0_SW_KEEP

31:0

RW

0x0

使能 PAD 的软件总线保持

GPIO_GRP0_EVENT_RISE_EN

地址偏移:0x84。

表 8.21: GPIO_GRP0_EVENT_RISE_EN格式

字段

位

访问

复位值

描述

GPIO_GRP0_EVENT_RISE_EN

31:0

RW

0x0

如果 PAD 有上升沿且工作在发送器模式时,使能上升事件

GPIO_GRP0_EVENT_FALL_EN

地址偏移:0x88。

表 8.22: GPIO_GRP0_EVENT_FALL_EN格式

字段

位

访问

复位值

描述

GPIO_GRP0_EVENT_FALL_EN

31:0

RW

0x0

如果 PAD 有下降沿且工作在发送器模式时,使能下降事件

GPIO_GRP0_DIGITAL_FILTER_EN

地址偏移:0x8C。

表 8.23: GPIO_GRP0_DIGITAL_NOISE_FILTER_EN格式

字段

位

访问

复位值

描述

GPIO_GRP0_DIGITAL_NOISE_FILTER_EN

31:0

RW

0x0

  • 使能 pad_ival 同步的数字滤波电路

  • 1’b1:为接收数据(来自 PAD)使能数字噪声滤波器功能

  • 1’b0:禁用数字噪声滤波器功能

GPIO_GRP0_IRQ_STATUS

地址偏移:0x90。

表 8.24: GPIO_GRP0_IRQ_STATUS格式

字段

位

访问

复位值

描述

GPIO_GRP0_IRQ_STATUS

31:0

RO

0x0

  • 此字段代表所有 PAD 的中断状态

  • 例如:如果 GPIO_NUM 为 32,此寄存器的每一位是 PAD0~PAD31 的中断状态

  • 当 [n] 为”1”:PADn 的中断活跃;当 [n] 为”0”:PADn 的中断不活跃

GPIO_VERSION

地址偏移:0x94。

表 8.25: GPIO_VERSION格式

字段

位

访问

复位值

描述

VERSION_NUM

31:0

RO

0x0001_0300

LGPIO 的 IP 版本

GPIO_GRP0_EVENT_HIGH

地址偏移:0x98。

表 8.26: GPIO_GRP0_EVENT_HIGH格式

字段

位

访问

复位值

描述

HIGH_EN

31:0

RW

0x0

如果 PAD 有高电平且工作在发送器模式时,使能高电平事件

GPIO_GRP0_EVENT_LOW

地址偏移:0x9C。

表 8.27: GPIO_GRP0_EVENT_LOW格式

字段

位

访问

复位值

描述

LOW_EN

31:0

RW

0x0

如果 PAD 有低电平且工作在发送器模式时,使能低电平事件

GPIO_DIGITAL_NOISE_FILTER_LENGTH

地址偏移:0xA0。

表 8.28: GPIO_DIGITAL_NOISE_LENGTH格式

字段

位

访问

复位值

描述

VALUE

24:0

RW

0x0

  • 数字噪声的长度

  • 这些位用于配置 PAD 输入上的数字噪声长度

  • 数字滤波器滤除长度高达 digital_noise_filter_num[24:0] * t_lgpioclk 的尖峰