AXI GPIO(AXI General-Purpose Input/Output)设计提供了一个通用的输入/输出接口,该接口连接到一个AXI4-Lite接口。AXI GPIO可以被配置为单通道或双通道设备,每个通道的位宽可以独立配置。
端口(即GPIO引脚)可以通过启用或禁用三态缓冲器来动态配置为输入或输出。这些通道还可以配置为当它们的任何一个输入发生转变时生成中断。
1 功能
AXI GPIO IP核的顶层框图(如下图所示)通常包含几个关键模块,这些模块协同工作以实现其通用输入/输出功能。
以下是根据通常的AXI GPIO设计对顶层框图的简要描述:
AXI4-Lite接口
AXI4-Lite是AXI协议的一个子集,特别适用于需要简单、轻量级通信的场景。在这个设计中,AXI4-Lite接口模块作为一个从设备(slave)实现,提供32位的数据通道,允许主设备(如处理器或控制器)通过AXI4-Lite协议访问GPIO通道寄存器。这些寄存器用于控制GPIO通道的配置、输入/输出状态等。
中断控制
负责从GPIO通道获取中断状态,并在满足条件时向主机生成中断信号。当中断使能选项在Vivado集成设计环境(IDE)中设置时,中断控制模块将被启用。这样,当GPIO通道的输入发生变化时,中断控制模块可以检测到这种变化,并生成一个中断信号通知主机。主机可以响应这个中断信号,执行相应的中断处理程序。
GPIO 核
GPIO核包含用于读写AXI GPIO通道寄存器的寄存器和多路复用器。这些寄存器用于存储GPIO通道的配置信息、输入/输出状态等。多路复用器用于在读取或写入操作时选择正确的寄存器。此外,GPIO核还包括必要的逻辑来识别当通道输入发生变化时的中断事件。
上图中的三态缓冲器(3-state buffers)并不是GPIO核的一部分。这些三态缓冲器是在使用Vivado设计套件生成输出产品时自动添加到顶层设计包装文件中的。它们用于控制GPIO引脚的输入/输出状态,并提供与外部电路的接口。
2 配置
(1)打开一个工程或生成一个新的工程;
(2)如下图所示,找到AXI GPIO IP核;
(3) 双击IP,或从工具栏或右键菜单中选择“Customize IP”命令,打开该IP核的配置页。
GPIO
All Inputs
- 功能:将所有GPIO通道位设置为输入模式。当选中此选项时,所有相关的GPIO引脚都将被配置为接收外部信号,而不是发送信号。
- 默认状态:此选项是未选中的(unchecked),意味着GPIO通道位不会默认被配置为输入模式。
All Outputs
- 功能:将所有GPIO通道位设置为输出模式。当选中此选项时,所有相关的GPIO引脚都将被配置为发送信号到外部设备,而不是接收信号。
- 默认状态:此选项是未选中的(unchecked),意味着GPIO通道位不会默认被配置为输出模式。
GPIO Width
- 功能:定义了GPIO通道的位宽,决定了GPIO IP核可以管理的GPIO引脚数量。例如,如果GPIO Width设置为8,那么GPIO IP核就可以控制8个GPIO引脚。
- 默认状态:其值可以从1到32,默认值是32。
Default Output Value
- 功能:设置此通道所有启用位的默认值。当GPIO引脚被配置为输出模式时,这个值决定了它们在上电或复位后的初始状态。例如,如果Default Output Value设置为0xFF(8位模式),那么所有GPIO引脚在上电后都将输出高电平。
- 默认状态:此参数设置为0x0(即所有位都是0)。
Default Tri State Value
- 功能:配置了GPIO通道每个位的输入或输出模式。这里的“Tri State”可能指的是GPIO引脚的初始状态或默认模式,其中“0”代表输出模式,“1”代表输入模式。但具体实现可能因不同的IP核而异。
- 默认状态:这个字段的值为0xFFFFFFFF,将所有GPIO位配置为输入模式。
Enable Dual Channel
- 功能:启用第二个GPIO通道(GPIO2),当此参数被启用时,GPIO2选项被激活,并配置Channel-2 (GPIO2)寄存器。允许使用同一个AXI GPIO IP核来控制两个独立的GPIO通道。这在需要管理大量GPIO引脚时特别有用。
- 默认状态:此参数是未选中的,将AXI GPIO配置为单通道模式。
GPIO2
仅在“Enable Dual Channel”被选中时激活。此参数组中的所有字段都与GPIO选项组相似。
当启用双通道模式时,可以为第二个GPIO通道(GPIO2)配置与第一个通道相同的参数,如GPIO Width、Default Output Value等。
Enable Interrupt
启用了GPIO模块中的中断控制逻辑和中断寄存器。默认情况下,此选项是未选中的,即中断未被启用。
当希望GPIO引脚能够产生中断信号以通知处理器或控制器外部事件时,需要启用此选项。一旦启用,可以配置GPIO引脚在特定条件下产生中断,例如输入电平变化或超时等。
3 编程序列
当启用中断时的输入端口
(1)配置端口为输入
将GPIOx_TRI寄存器中对应的位写入1,以将端口配置为输入模式。
(2)启用通道中断
通过设置IP中断使能寄存器中对应的位来启用该通道的中断,同时,也需要通过设置全局中断寄存器(通常是某个处理器或微控制器的寄存器)的第31位为1来启用全局中断。
(3)接收并处理中断
① 当接收到中断时,读取GPIOx_DATA寄存器中对应的位,以获取输入值。
②清除IP中断状态寄存器中对应的中断状态位,通过将对应位写入1来实现。这通常是中断服务程序(ISR)的一部分。
当未启用中断时的输入端口
(1)配置端口为输入
将GPIOx_TRI寄存器中对应的位写入1,以将端口配置为输入模式。
(2)读取输入值
直接读取GPIOx_DATA寄存器中对应的位,以获取输入值。
输出端口
(1)配置端口为输出
将GPIOx_TRI寄存器中对应的位写入0,以将端口配置为输出模式。
(2)写入输出值
将要输出的值写入GPIOx_DATA寄存器中对应的位。这会将该值输出到对应的GPIO引脚上。
注意事项
- 确保在尝试访问GPIOx_TRI或GPIOx_DATA寄存器之前,AXI GPIO IP核已经正确配置并初始化。
- 当配置GPIO端口时,请确保不要同时将其配置为输入和输出,这可能会导致未定义的行为。
- 当启用中断时,请确保系统(例如处理器或微控制器)可以正确地处理这些中断,并有一个有效的中断服务程序来清除中断状态位并处理中断事件。