欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > gpio子系统-通过io来控制gpio

gpio子系统-通过io来控制gpio

2025/2/24 19:02:06 来源:https://blog.csdn.net/weixin_49529507/article/details/143365406  浏览:    关键词:gpio子系统-通过io来控制gpio

        先要通过io控制gpio,这种方法是直接控制寄存器的,先学习一些命令。


io命令

作用:在内核阶段读写寄存器
用法:
io -v -1|2 |4 -r|w [-| <len>] [-f <file>] <addr> [<value>]
        V                Verbose, asks for confirmation

         -1]214        Sets memory access size in bytes (default byte)
        -| <len>        Length in bytes of area to access(defaults to one access, or whole file length)
        -r | w           从内存读或写(默认读)(重点看这个)

        -f <file>        File to write on memory read, or to read on memary write
        <addr>        The memory address to access
        <val>            The value to write (implies -w)


例子:
ie 0x1000                        读0x1000位置的值
io 0x1000 0x12               将0x12写入位置0x1000
io -2 -18 0x1000             Reads 8 words from 0x1000                                                                      io -r -f dmp -l 100 200          从地址200读取100字节到文件
io -w -fimg 0x10000        将整个文件写入内存


        上面的就是io命令相关的命令,-r | w 重点关注这个   它的作用就是从内存读或写(默认读)(重点看这个)。我们以控制gpio的LED灯亮灭。下面,这是我的gpio引脚的位置原理图。

 用io命令控制gpio的灯亮灭,有三个步骤,第一个设置gpio引脚的复用、设置gpio的输入输出方向、最后输入高低电平。

        我们这种方法是直接控制寄存器,所以就要先找到寄存器的地址,地址一般都是基地址+偏移量,才能对它控制。打开我们的芯片手册,

         第一步:把引脚的复用设置成gpio功能。 只要看到IOMUX都是和寄存器复用有关系的。

        因为gpio有很多组gpio,我需要确定是那一组的gpio,从上什么原理图我们可以知道,我的是0的,PMU_GRF就是基地址的位置0xFDC20000,可以知道我们的gpio是第0组

        根据原理图我们已确认在0C的上,但是这里面有两组,分为高位和地位,怎么选,我们要看它的显示说明了

         

        这是低位的,看他的说明,16:31位是使能位,就是你要操作gpio,就先把gpio对应的位使能了,先使能了在能用,0:15就对应着c1, c2, c3, c4。

         这是高位的,看他的说明,16:31位是使能位,就是你要操作gpio,就先把gpio对应的位使能了,先使能了在能用,0:15就对应着c5, c6, c7, c8。

         

        因为有原理图可以知道,我的是gpio0_c7,所以选择高位的,对应的位是8:10,0就对应是gpio功能。前面说了,寄存器的位置是等于基地址+偏移量,所以这个寄存器地址是 0xFDC20000 + 0x0014 = 0xFDC20014。

        所以,现在就可以命令去读取一下这个寄存器的值,看看现在是什么功能描述 

        读取出来值可以通过计算机换算一下,我们只需要关注12:14,这里是设置我们的引脚位置,,可以看到默认就是gpio功能描述

        

         复用设置完了,接下来就是设置gpio的输入输出方向了。打开芯片手册,找到gpio的章节可以看到这两个位置有两个寄存器方向数据,还是老样子那个才是我们需要的,偏移地址是0x0008和0x00C,偏移量还需要确认偏移量,我们是使用gpio0的,所以知道gpio0的寄存器基地址

         在手册的第一章,有一张表,描述各个功能的基地址的

        在这里就可以找到GPIO0的基地址,0xFDD60000,  

 

        我们可以看到两个寄存器,都是只有底16位才是控制引脚的,高16位都是控制使能位的,

我们gpio一共有四组A,B,C,D,每组控制8个应引脚,所以两组加起来刚刚好是16个引脚,所以低位的是控制A和B组,高位控制是C和D组,我的是C7选高位的,高位的偏移量是0x000C,所以寄存器地址等于偏移量 + 偏移量  =  0xFDD60000 + 0x000C = FDD6000C。

         所以,现在就可以命令去读取一下这个寄存器的值,看看现在是是输出还是输入 

         

        用计算机换算 ,只需要关注23脚,因为我的是gpio0_c7,计算规则看以前的博客,我这里23脚是,但是我们这里只有0:16,怎么办,前面说了,高位管C,D组,意思也是从0开始

可以看到每一组只有8个脚,所以我的是c7,意思就是第七位,这里看到第七位是0,0是输入,所以不对,要改,我们还要改使能位。

        把对应的位值置1, 就变成806080,我们要把这个值写回去

 

        最后面是输出输入高电平,看到数据寄存器有两个,选择方法一样看说说明,所以我们操作高位的,高位的偏移量是0x0004,基地址是0xFDD60000 = 寄存器地址 = 0xFDD60004

         

        读取出来看看,再用计算机换算

         引脚的位置和之前的计算一样。

但是有点注意,我的是低电平触发亮灯,是什么电平触发根据情况而定 

 亮灯

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词