首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

MicroZed测评11-在Linux中控制GPIO

MicroZed测评11-在Linux中控制GPIO

上次我们已经把一个开源的Linux烧写到了MicroZed的QSPI Flash。这样在配置启动模式为QSPI并上电之后,我们就可以在Linux中与ZYNQ的GPIO进行交互了。在MicroZed上面,有一个LED(板子上的D3,在JTAG插座的边上)连接到PS的MIO管脚,如图1所示;LED和用户按钮在板子上的位置如图2所示。。



图1 D3的连接


图2 LED D3和用户按钮SW1

       根据图1,只要我们控制PS的MIO47,即ZC7010芯片的B14管脚,为低电平,D3就能被点亮了。GPIO的驱动存放在/sys文件夹下(如果不知道的话可以用find / -name “”命令查找)。、连接USB-UART电缆到MicroZed,然后打开串口调试助手,再按一下MicroZed上的复位按钮,等待Linux启动完毕,就可以在串口调试助手里与Linux进行互动了。
       输入ls /sys/class/gpio/命令,可以查看如何通过sysfs把GPIO的驱动导出。返回值为:export     gpiochip0  unexport
       为了控制MIO47,我们可以查看gpio47是不是已经被导出到sysfs文件系统。输入命令echo 47 >/sys/class/gpio/export和ls /sys/class/gpio,可以看到一个叫GPIO47的节点已经建立了,然后查看它的属性,输入ls /sys/class/gpio/gpio47,可以看到的属性有active_low, direction等。把它配置为输出管脚,输入:
echo out > /sys/class/gpio/gpio47/direction
然后更改它的属性,即给管脚状态赋值,输入:
echo 1 > /sys/class/gpio/gpio47/value
回车之后,D3就被点亮了。这时你的MicroZed上面应该有3中颜色的LED在发光了:一个是刚点亮的红色的D3;一个是标识配置完成状态的蓝色的D2,和表示供电正常的绿色的D5。
试验了完了和LED的交互,我们还可以在Linux里面对用户按钮SW1进行控制。从MicroZed的原理图上得知,SW1连接到PS的MIO51,也就是ZC7010的B9管脚。采用和前面类似的命令配置gpio51节点,只不过这次要配置为输入管脚。这时可以使用cat /sys/class/gpio/gpio51/value来捕捉管脚上的电平状态;当SW1没有被按下时,管脚状态为0;SW1被按下时,管脚状态为1。
这时可以把SW1和D3关联起来,这样控制SW1就能控制D3的状态了,首先关闭D3,输入echo 0> /sys/class/gpio/gpio47/value并回车。然后把二者的状态进行关联:
cat /sys/class/gpio/gpio51/value > /sys/class/gpio/gpio47/value
这样只要按着SW1输入上面的代码,D3就会点亮,否则D3不亮。
最省事的办法还是用一个死循环,即创建一个任务,一直查询SW1的状态并控制D3的点亮。这样只要按下SW1,D3就点亮了;只要松开,D3就灭了。按Ctrl+C就能中断死循环的运行了。使用的所有命令和结果如图3所示。



图3 所有命令

记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表