【AWorks试用体验】嵌入式初级玩家养成计划--GPIO点亮AP板上的LED

2019-07-15 17:43发布

IMG_9638.JPG    小伙伴们,大家好。进过几天的研究,今天给大家说说怎么通过Aworks上面的GPIO口来点亮AP板上的led,当然本次是通过宿主机上的命令进行点亮,非程序。
    点亮LED是每个做单片机工程师都非常熟悉的操作,每个工程师都有那么一次-----第一次使用某个MCU点亮LED的兴奋。今天mx283a也不例外。
    好了,话不多说,直奔主题。
    今天所涉及的linux知识如下:

mount -t nfs 192.168.1.91:/nfsroot /mnt -onolock     开发板挂载192.168.1.91宿主系统的目录

cp filename path   复制文件到path

su root  获取root权限

poweroff 关机

reboot 重启

ssh name@ip 登录远程设备

exit退出终端/断开远程设备

echo value > status   /修改寄存器值 比如更改led状态

mv new.c nwe0.c   修改文件名

rm -rf floder 删除文件夹floder

insmod xxx.ok  安装驱动

rmmod  xxx.ok  卸载驱动

涉及的嵌入式知识有:
编译内核,驱动编译,驱动安装,挂载。。。。

   首先是需要进行内核编译,原因是编译了内核才能编译驱动,因为驱动编译需要指定内核路径。
   我下载的光盘自带的gpio_driver.ok不能正常insmod,估计是内核版本不一致,于是就需要重新编译。

    编译内核:
首先将光盘下的linux-2.6.35.3.tar.bk2复制到宿主linux下面,可以通过远程挂载的方式放进去,我是安装在虚拟机里面的,所以直接将win下的所有分区都挂载了进去。将该文件复制到linux文件根目录下,即Home下面。 002.jpg


打开终端,输入tar -jxvf  linux-2.6.35.3.tar.bk2解压文件,解压完后会在home下出现linux-2.6.35.3文件夹,
001.jpg
使用cd进入到linux-2.6.35.3下面,使用./config-kernel命令选择板子的型号。
003.jpg
这里义无反顾的选择4,然后回车,然后再命令提示符下面键入make命令开始编译内核,需要将近10~20分钟时间编译完成。编译完成后将光盘下的gpio_driver文件夹复制到宿主linux下的Home目录下, 004.jpg



使用cd命令进入该文件夹,使用vi Makefile修改Makefile文件,指定linux内核代码目录: 006.jpg
007.jpg

我放在了Home根目录下面,所以路径指定如上,zbr是本linux的计算机名。修改完成使用:wq命令保存退出。
008.jpg

然后在该目录下使用make命令,编译驱动文件,编译完成会生成新的.ok文件。编译时间仅需要5~6秒。然后将gpio_driver文件夹复制到之前设置的nfs文件夹下,用来挂载到开发板上,因为驱动是给开发板安装的。复制完成后,给开发板通上电,连上网线,在linux终端下输入ssh root@192.168.1.40登录开发板,192.168.1.40是我的板子的IP地址,肯定和你们的不一样。登录上板子后,使用mount命令来挂载宿主机上的nfs文件。 009.jpg


没有报错说明挂载成功。上面的ip是宿主机的ipnfsroot是所要挂载的目录,mnt是开发板的挂载目录。
使用cd命令进入/mnt/gpio_driver目录下,然后使用insmod安装驱动。
$insmod gpio_driver.ok
回车没有报错说明安装成功。
是否真的安装成功这样做,使用ls指令查看:
010.jpg
若看到这个界面说明安装成功。
然后就可以使用echo指令来控制io口的电压了。
使用echo控制1.17端口的电压为0
012.jpg
然后使用万用表测试得到:
IMG_9639.JPG
再将其设置为1
011.jpg

使用万用表测试的:




测试结果为3.26V,去掉误差实际就是3.3V。有了这个结果我们就可以控制led了。
013.jpg

能够看出,只要将所对应的GPIO设置为低电平就能够点亮lED了,那么问题来了,到底谁才是“所对应的GPIO“呢?首先看下图:
014.jpg

所以的LEDKEY都被引到了J8A这个端子上面,也就是说开发板并没有给LED分配io口。
既然如此我们就得自己给其分配端口了,看下图:
IMG_9640.JPG


黄 {MOD}区域就是led等的区域了,红 {MOD}的为led的插针接口,蓝 {MOD}为给led分配的GPIO口。
对应关系为:
LED1--------gpio-P3.26LED2--------gpio-P3.22LED3--------gpio-P3.20LED4--------gpio-P2.7
下来就是用套件里面的短接片将其连接起来:
IMG_20150813_203340.jpg

连接起来的样子。为什么有个灯亮了?因为我之前设置过这个端口。
015.jpg
使用echo4led都点亮。
IMG_20150813_203712.jpg
瞬间惊叫有没有?
然后为毛第二个不亮?根据我多年的点亮led经验看,不是这个口坏掉了,就是led闪了,或者就是其他问题了,这个是我给我自己留下的问题。
   基本情况就是这样了。呸,这句当我没说。以上就是点亮led的全过程,篇幅不长,我却研究了好个晚上,其中各种抓狂啊!到现在为止我的内心都几乎是崩溃的。。。。。。。
好了,不多说了,今天的成果就分享到这里,祝论坛越办越红火,大家晚安。----愿世界充满幸福!------To BeContinue



IMG_20150813_203523.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。