Petalinux使用技巧—如何在Kernel中使用PS GPIO

作者:Terry Ni,AMD工程师;来源:AMD开发者社区

一、引言

通常在设计中,用户常常会使用GPIO来完成一些外设的控制,或者用来作为一些调试端口或者调试信号。那么,在Kernel中简单快速使用这些GPIO就会大大加快我们的开发周期。

二、方法

对于不通的器件,我们先要明确的就是其MIO和EMIO的数量。例如:ZynqMP器件有一个GPIO控制器,有78个MIO以及96 个EMIO。Versal器件有两个GPIO控制器,一个是PMC GPIO,有52个MIO和64个EMIO;另一个是LPD GPIO,有26个MIO和32个EMIO。

了解清楚了MIO以及EMIO数量之后,我们就可以在kernel中对GPIO进行操作了。

在ZynqMP器件上,我们需要先找到哪个GPIO节点对应GPIO控制器。你可以通过查看其标签的方式将其找到,如下图所示。

从上图中我们可以发现,对应GPIO控制器的节点是gpiochip334,也就是说从334这个编号开始之后的174(78+96)个IO对应的就是GPIO上所有的MIO和EMIO通道了。

那么接下来,就可以根据你具体要控制的MIO或者EMIO来创建GPIO节点。例如你需要控制EMIO对应的bit2通道。你可以通过如下方法计算得到其对应的GPIO编号。

334+78+2=414

计算出编号之后,通过如下命令方式创建出控制节点。

成功执行之后,就会在系统中创建出gpio414这个控制节点,接下来你需要指定其输入输出方向。

最后,你就可以控制其高低电平了。

对于Versal器件来说,使用方法基本相同,先是需要找到pmc gpio和versal gpio(lpd gpio)对应的节点。

然后基于找到的节点,计算出你需要控制的GPIO节点编号,例如pmc mio的bit16通道,计算得到其对应的GPIO编号。

338+16=354

接着,通过如下命令方式创建出控制节点。

然后指定gpio354这个节点的输入输出方向。

最后,控制其电平值。

三、总结:

通过以上的方法,你可以方便的在你的设计中利用GPIO的特性,快速实现或者验证设计中的一些功能,加快整个开发过程。

最新文章

最新文章