RT1060 的普通 GPIO 和 快速 GPIO 的对比
i.MXRT1060 提供了紧耦合的通用 GPIO,可以进行高频率的操作。
RT1060 提供了两组 GPIO 寄存器来控制端口输出。GPIO 1 到 GPIO 3 是通用 GPIO,而GPIO 6 到 GPIO 8 是紧耦合 GPIO,但是它们共享同一个端口,这意味着 GPIO 引脚可以用 GPIO 1/2/3 或 GPIO 6/7/8 进行选择。寄存器 IOMUXC_GPR_GPR26、IOMUXC_GPR_GPR27 和 IOMUXC_GPR_GPR28 也用于 GPIO 的选择。
要用 GPIO 1/2/3 或 GPIO 6/7/8 选择 GPIO 引脚,你可以使用 MCUXpresso Config 工具。例如,如果你选择 G10 引脚,你既可以选择 GPIOI_IO11 作为普通 GPIO,也可以选择 GPIO 6_IO11 作为快速 GPIO。
我基于 SDKV2.5 做了一个例子,比较普通 GPIO 和快速 GPIO 的速度。为此,我使用了引脚 G10 (GPIOI_IO11 和 GPIO 6_IO11)。
注意:正如下图所示,GPIO 1、2、3、4 和 5 的时钟来自 IPG_CLK_ROOT,而 GPIO 6、7、8 和 9 来自 AHB_CLK_ROOT。这意味着对于 GPIO 6,7,8 和 9,你不需要激活任何时钟。SDK 的当前版本(v2.5)没有考虑到这一点,因此如果你想使用这些 GPIO 中的任何一个,你需要在 GPIO_PinInit 函数中添加以下 if 语句。这个错误已经被报告,并且将在 SDK 的新版本中被修复。
首先,我使用了普通的 GPIO 引脚(GPIOI_IO 11)。我将通过直接写入 GPIO_DR 寄存器来翻转引脚电平。请注意,你可以通过评估板上的 J22 的 PIN 3 测量此引脚,从而观测该引脚的性能。结果如下:
对于普通的 GPIO 引脚,直接写入 GPIO_DR 寄存器的周期达到 160 ns。现在,如果我们切换到快速 GPIO 并使用相同的指令,我们将得到以下结果。
正如你看到的,在使用快速 GPIO 引脚时,信号的周期几乎是使用普通 GPIO 时的三分之一。现在,RT1060 的 A1 版芯片有一个新的 GPIO 翻转功能。如果我们用新的寄存器 DR_TOGGLE来翻转引脚而不是用寄存器 GPIO_DR,我们将获得更好的性能,无论是普通 GPIO 还是快速GPIO。以下是带有 DR_TOGGLE 寄存器的普通 GPIO 的结果。
如你所见,当使用带 DR_TOGGLE 寄存器的普通 GPIO 引脚时,我们的周期大约为 53 ns,而当写入 GPIO_DR 寄存器时,我们得到的是 160 ns。当使用寄存器 DR_TOGGLE 和快速 GPIO时,我们将获得最佳的引脚性能,结果如下。
感谢 Jorge Antonio Alcala Vazquez 对这篇文档提供的宝贵帮助。希望这能给你带来帮助!最诚挚的问候,Victor。
|