OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5260|回复: 0

[XILINX] 【正点原子FPGA连载】第七章 Linux基础外设的使用--摘自【正点原子】领航者ZYNQ之Linux开发指南_V1.3

[复制链接]

1107

主题

1118

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4615
金钱
4615
注册时间
2019-5-8
在线时间
1218 小时
发表于 2020-11-23 15:43:04 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2020-11-23 15:45 编辑

1)实验平台:正点原子领航者ZYNQ开发板
2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761
3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-301505-1-1.html
4)对正点原子FPGA感兴趣的同学可以加群讨论:712557122
5)关注正点原子公众号,获取最新资料更新
1.jpg
1120.png

第七章Linux基础外设的使用

通过对Petalinux和XSDK的学习我们了解了如何使用Petalinux定制Linux和如何使用XSDK开发Linux应用。本章我们学习如何通过Linux系统控制领航者开发板上的基础外设,如LED、EEPROM等。这些外设都可以在终端通过Shell来控制,非常方便。


1.1 GPIOLED的使用
GPIO驱动程序通过sysfs文件系统提供了用户空间对GPIO的访问,因而通过终端控制LED极其方便。我们启动领航者开发板,进入第六章定制的Linux系统后在串口终端中输入如下命令进入到sysfs文件系统的leds接口处:
cd/sys/class/leds
ls
通过ls命令可以看到我们在设备树中配置的led,如下图所示:
image002.jpg

19.1.1 查看led
这6个LED对应领航者开发板上的6个LED灯,具体与领航者开发板上LED的对应关系与17.2.7节的设备树文件的led配置有关。我们先来看下led下的内容,以ps_led1为例,输入“ls ps_led1”,执行结果如下图所示:
image004.jpg

19.1.2 led下的内容
可以看到有有brightness和trigger。Brightness可以控制led灯的亮灭,trigger可以选择触发方式。我们向ps_led1的brightness写入0,即输入“echo 0 > ps_led1/brightness”命令,如下图所示:
image006.png

19.1.3 输入“echo 0 >ps_led1/brightness”命令
可以看到领航者核心板上的标号led2的led灯灭,现在输入“echo 1 >ps_led1/brightness”命令,如下图所示:

19.1.4 输入“echo 1 >ps_led1/brightness”命令
可以看到领航者核心板上的标号led2的led灯亮,这就是通过brightness来控制led灯的亮灭,其他led灯也可以以此种方式控制。
现在我们来看下如何通过trigger来控制led。首先输入“catps_led1/trigger”命令看下有多少种触发方式,如下图所示:
image007.png

19.1.5 查看触发方式
可以看到触发方式非常多,我们先来设置触发方式为“none”,看下有什么效果,命令为“echo none >ps_led1/trigger”,如下图所示:
image009.png

19.1.6 触发方式为“none”
没看到领航者核心板上的标号led2的led灯有反应。不过也是,触发方式为”none”,肯定没反应。现在试一下timer触发,输入命令“echo timer > ps_led1/trigger”,如下图所示:

19.1.7 timer触发
可以看到领航者核心板上的标号led2的led灯以定时器的方式每秒闪烁一次,这跟我们在设备树中配置的结果一样。现在来看下heartbeat方式的效果,输入命令“echo heartbeat >ps_led1/trigger”,如下图所示:

19.1.8 heartbeat方式
此时可以看到领航者核心板上的标号led2的led灯像心跳一样的闪烁。其它触发方式,这里就不给大家一一列举了,有兴趣的读者可以自行探索,需要提醒的是并不是所有的触发方式都能有反应,必须满足触发条件才行。
1.2 IICEEPROMRTC的使用
领航者开发板上有两个IIC外设,一个是EEPROM,另一个是RTC。首先我们来看下如何读写EEPROM。
在/sys/class/i2c-dev目录下有两个IIC接口,如下图所示:
image011.png

19.2.1 IIC接口
对应我们在配置Vivado工程时启用的两个PS端的IIC。其中IIC0接到HDMI的DDC接口,IIC1接到开发板上的EEPROM和RTC。我们进入到/sys/class/i2c-dev/device/目录下,查看该目录下的内容,如下图所示:
image012.png

19.2.2 两个不同的器件地址
可以看到有50和51两个不同的器件地址,对应我们在17.2.7节配置设备树的EEPROM和RTC的地址,如下图所示:
image014.jpg

19.2.3 设备树中的配置
我们进入到1-0050/目录下,可以看到eeprom设备,如下图所示:
image016.png

19.2.4 eeprom设备
可以向其中写入内容,我们向其中写入“hello linux”,然后读取出来,输入命令如下:
echo hellolinux > eeprom
head-1 eeprom
执行结果如下图所示:

19.2.5 读写eeprom
至此我们eeprom设备的读写就完成了。下面我们来看另一个IIC设备--RTC。
我们进入到1-0051/目录下,看下其目录内容,输入命令如下:
cd../1-0051/
ls
执行结果如下图所示:
image018.jpg

19.2.6 RTC
可以看到有一个rtc文件夹,那么操作rtc是不是像eeprom那样呢?
当然不是,对于rtc,linux有一个专用的命令:hwclock。
在Linux中有硬件时钟与系统时钟两种时钟。硬件时钟是指电路板上的时钟设备,也就是通常可在BIOS 画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。
使用date和hwclock命令可分别查看和设定系统时钟和硬件时钟。
在串口终端中输入下面的指令查看系统时间:
date
串口终端如下图所示:
image020.jpg

19.2.7 date
上图中箭头所指示的位置就是当前的系统时间。
在串口终端中输入下面的指令查看硬件(RTC)时钟:
hwclock
串口终端如下图所示:
image022.jpg

19.2.8 hwclock
上图中箭头所指示的位置就是当前 RTC 时钟芯片中的时间。
在串口终端中输入下面的指令将系统时间设置为当前日期和时间(2019/11/11,15:15:00),然后使用 date 指令查看所设置的系统时间:
date-s "2019-11-11 15:15:00"
date
执行结果如下图所示:
image024.jpg

19.2.9 系统时间设置
在串口终端中输入下面的命令将系统时间写入RTC时钟芯片中,然后使用hwclock命令查看硬件时钟。
hwclock-w // 将系统时钟同步至硬件时钟
hwclock   // 查看硬件时钟
执行结果如下图所示:
image026.jpg

19.2.10 写入RTC时钟




正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-3 16:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表