跟着小狂玩RicoBoard之三种方法玩转GPIO第一篇
销声匿迹一个星期了,小狂又回来啦,哈哈,最近有点迷茫了,说实话不知道怎么玩耍好了,试用贴的目的是为了完成试用的项目,但是小狂又想玩点特别的,就目前来看这两个方面要玩耍的东西很是不一样啊,要想完成项目就要写驱动,写应用,但是玩点刺激的比如把debain移植到RicoBoard上,搭建点服务器啥的爽一爽。哎,一直在纠结怎么玩耍能对得起这块板子,另外看了大部分的试用贴,感觉大家都很上心,写的帖子质量都很高,在某些方面可能共性的东西更多,写出来的东西大同小异,也不是小狂想要的,到现在也没有一个具体的答案。现在就随心吧,把自己整的东西搞出来,多加点理解,尽全力做出来不一样的东西,圆满完成这一次试用,哈哈。接下来的三篇帖子小狂会带着大家使用3种不同的方式,来玩转RicoBoard的GPIO,其实说是3种不止三种,这里不再讲在用户空间的物理地址映射,对这一块感兴趣的可以参考小狂以前Nanopi关于mmap的应用。
GPIO是任何一款嵌入式芯片的基础,GPIO对一个数电工程师来说,就像软件的helloword,GPIO的入门篇我们就从米尔的官方历程说起,让大家有个直观的印象。
我们先按照官方的历程做一遍,做之前我们需要了解我们的硬件,我选择一个没有被设计的口GPIO1_23,这个口在哪呢,看图
在板子的这个地方
首先我们要计算IO的编号,GPIO1_23=1*32+23=55,这个在接下来的两篇中也会用到,记住这种算法。打开串口控制台,第一步先导出GPIO55 ,其实就是向相应的文件中写内容。
打开串口控制台,第一步先导出GPIO55 ,其实就是向相应的文件中写内容。
查看一下GPIO的端口号
设置GPIO方向为输出
由此我们就可以看到Linux中基本上都是基于文件操作的实质啦,到目前为止我们都是基于文件的操作方式来控制我们的物理层。当然中间要穿插很多层的,哈哈。
然后让其拉高
有示波器的朋友就能看到IO已经变高,这里我就不上图了,这种操作可能并不直观,不过没有关系,我们来操作一下我们板子上的LED灯。
在我们的板子上总共有4个灯,分别接在了GPIO1_24-GPIO1_27上,其中LED0是系统的心跳灯,我们不去控制它,我们可以选择LED1、LED2、LED3的任何一个来做控制。我们以LED1为例, 好了,现在我们就可以让我们的灯亮啦,从原理图中可以看到,IO口为逻辑低的时候灯亮,现在我们让它亮起来。米尔专门为LED灯做了设备接口,我们可以没有必要那么复杂的去控制LED灯,只需要这样就行,哈哈。看图
可以看到我们的第二个LED已经亮了。当我们往文件中写0时,led灯会熄灭。
下面我们就把led_play历程简单分析一下执行查看一下效果。
打开历程我们会发现例程里总共有3个文件,第一个是编译好的文件,我们不去管它,第二个是调用的文件,第三个是makefile文件,用来生成可执行文件的。如果有了解的童鞋可以跳过这一段,
Makefile文件很简单,我把每一行都给了注释贴上文件
Led_paly.c文件实现的功能的方式跟我们一开始操作的方式差不多,这里就不做累述了,实现的功能,刚开始的时候会让除了心跳的其他三个灯全亮,延时200ms后灯灭,然后一直监控是否有按键事件的产生,入后按下超过三秒,就打断循环,执行流水灯程序。
我们把文件拷贝到虚拟机上,然后编译。
生成可执行文件,传到下位机,执行,看效果。
具体的效果我就不上图了,图片也说明不了问题,有兴趣的可以跑一下看看。好了,这一篇到这结束,然后下一篇我们将深入内核去写个简单的驱动,来演示相应的LED控制,谢谢,撒花,鼓掌,哈哈。
撒花
鼓掌
感觉小编是个实在boy
谢谢支持
谢谢支持,
必须是在啊,哈哈,做事要踏实,嘻嘻,哈哈
小编 ,为什么我执行echo 56 > /sys/class/gpio/export
给我报个-sh: echo: write error: Device or resource busy?