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中断请求。
中断事件 |
事件标志 |
使能控制位 |
|---|---|---|
LGPIO PAD的上升沿 |
RISE_IP |
RISE_IE |
LGPIO PAD的下降沿 |
FALL_IP |
FALL_IE |
LGPIO PAD的高电平 |
HIGH_IP |
HIGH_IE |
LGPIO PAD的低电平 |
LOW_IP |
LOW_IE |
注:
每个LGPIO位可以从PAD采样四种类型的外部中断事件:上升沿、下降沿、高电平或低电平。
但LGPIO只向CPU生成高电平中断类型。
寄存器
LGPIO寄存器
注:
表 8.1 和 8.2 中的”i”是GPIO_NUM除以32。 例如:如果GPIO_NUM配置为35,则i=floor(35/32)=1。
表 8.1 和 8.2 中所有寄存器的最大宽度是32位,这是GPIO_NUM为32且地址4字节对齐的配置示例。 如果GPIO_NUM小于32,寄存器的宽度取决于实际的GPIO_NUM配置。 如果GPIO_NUM大于32,每个寄存器的实际地址应加上特定偏移:”i” * 0x100。
寄存器及其在LGPIO中的相应偏移如表 8.1 所示。
偏移 |
寄存器名称 |
功能描述 |
|---|---|---|
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。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_IVAL |
31:0 |
RO |
0x0 |
从 PAD 到内核的接收数据 |
GPIO_GRP0_MODE0
地址偏移:0x8。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_MODE0 |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_MODE1
地址偏移:0xC。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_MODE1 |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_OVAL
地址偏移:0x10。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_OVAL |
31:0 |
RW |
0x0 |
从内核到 PAD 的发送数据 |
GPIO_GRP0_RISE_IE
地址偏移:0x14。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_RISE_IE |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_RISE_IP
地址偏移:0x18。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_RISE_IP |
31:0 |
RW |
0x0 |
上升中断挂起 |
GPIO_GRP0_FALL_IE
地址偏移:0x1C。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_FALL_IE |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_FALL_IP
地址偏移:0x20。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_FALL_IP |
31:0 |
RW |
0x0 |
下降中断挂起 |
GPIO_GRP0_HIGH_IE
地址偏移:0x24。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_HIGH_IE |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_HIGH_IP
地址偏移:0x28。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_HIGH_IP |
31:0 |
RW |
0x0 |
高电平中断挂起 |
GPIO_GRP0_LOW_IE
地址偏移:0x2C。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_LOW_IE |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_LOW_IP
地址偏移:0x30。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_LOW_IP |
31:0 |
RW |
0x0 |
低电平中断挂起 |
GPIO_GRP0_OUT_MASK
地址偏移:0x44。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_OUT_MASK |
31:0 |
RW |
0xFFFF_FFFF |
|
GPIO_GRP0_BIT_SET
地址偏移:0x48。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_BIT_SET |
31:0 |
WO |
0x0 |
|
GPIO_GRP0_BIT_RESET
地址偏移:0x4C。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_BIT_RESET |
31:0 |
WO |
0x0 |
|
GPIO_GRP0_BIT_TOGGLE
地址偏移:0x50。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_BIT_TOGGLE |
31:0 |
WO |
0x0 |
|
GPIO_GRP0_PULL_MODE0
地址偏移:0x54。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_PULL_MODE0 |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_PULL_MODE1
地址偏移:0x58。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_PULL_MODE1 |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_SW_KEEP
地址偏移:0x74。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_SW_KEEP |
31:0 |
RW |
0x0 |
使能 PAD 的软件总线保持 |
GPIO_GRP0_EVENT_RISE_EN
地址偏移:0x84。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_EVENT_RISE_EN |
31:0 |
RW |
0x0 |
如果 PAD 有上升沿且工作在发送器模式时,使能上升事件 |
GPIO_GRP0_EVENT_FALL_EN
地址偏移:0x88。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_EVENT_FALL_EN |
31:0 |
RW |
0x0 |
如果 PAD 有下降沿且工作在发送器模式时,使能下降事件 |
GPIO_GRP0_DIGITAL_FILTER_EN
地址偏移:0x8C。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_DIGITAL_NOISE_FILTER_EN |
31:0 |
RW |
0x0 |
|
GPIO_GRP0_IRQ_STATUS
地址偏移:0x90。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
GPIO_GRP0_IRQ_STATUS |
31:0 |
RO |
0x0 |
|
GPIO_VERSION
地址偏移:0x94。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
VERSION_NUM |
31:0 |
RO |
0x0001_0300 |
LGPIO 的 IP 版本 |
GPIO_GRP0_EVENT_HIGH
地址偏移:0x98。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
HIGH_EN |
31:0 |
RW |
0x0 |
如果 PAD 有高电平且工作在发送器模式时,使能高电平事件 |
GPIO_GRP0_EVENT_LOW
地址偏移:0x9C。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
LOW_EN |
31:0 |
RW |
0x0 |
如果 PAD 有低电平且工作在发送器模式时,使能低电平事件 |
GPIO_DIGITAL_NOISE_FILTER_LENGTH
地址偏移:0xA0。
字段 |
位 |
访问 |
复位值 |
描述 |
|---|---|---|---|---|
VALUE |
24:0 |
RW |
0x0 |
|