资源描述:
《Kevin学ZED之(5):顺藤摸瓜.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Kevin学ZED之(5):顺藤摸瓜 当你可以修改点亮LED灯那个实验led_test.sh,改变LED点灯的速度,以及顺序时,一定想知道究竟发生了什么,凭什么一个简单的脚本,就在Linux的用户层控制板子上的某一个硬件,比如说,灯。 对于习惯了在单片机环境下无操作系统裸奔C/汇编的兄弟来说,上面的问题似乎有些多余.直接对某个地址进行读写操作,这个地址经过译码,对应的管脚,连到板子上LED,不就可以控制LED了吗。 这就说来话长了.简言之,Linux为了给每个进程一个独立的地址空间,特意划分了用户空间和内核空间
2、。内核空间可以对物理地址操作,用户空间只是虚地址。 而内核与用户空间程序接口,采用特殊文件系统。也就是看上去像文件,其实连接到系统和设备的系统。比较老的有devfs文件系统位于设备驱动/dev,或者procfs位于/proc。当然,还有比较新的sysfs文件系统。 Led_test.sh,采用的就是sysfs文件系统。 这个文件系统的特点吧,主要是可以一层一层垒硬件的驱动,比如先总线驱动,再某个USB驱动,在USB挂载的设备的驱动。这比/dev一个设备驱动包括所有相关设备层次清晰很多。在linux内核2.6以后才有
3、的。 对sysfs先来点感性认识,在ZED任何一个终端窗口输入 sudoecho61>/sys/class/gpio/exportsudoechoout>/sys/class/gpio/gpio61/direcTIonsudoecho1>/sys/class/gpio/gpio61/valuesudoecho0>/sys/class/gpio/gpio61/value 你可以手工点亮或灭掉LD0那盏灯 输入命令的时候,到底发生了什么,信号是怎么传递的呢?先大致了解一下,具体细节在书的后续章节还会详细说明
4、第一步,设备驱动控制GPIO的寄存器.这就需要交给Linux设备驱动来完成了。相关的介绍请参考书本在13.2节找到. 第二步,那么GPIO的寄存器地址是多少,有如何控制呢?我们可以在Xilinxug585找到 第三步,GPIO是如何在PL那边,也就是FPGA连接到芯片的管脚上的呢? 需要参考这个设计的硬件部分 zedboard上的linaro-ubuntudemo所使用的硬件工程。 其中对于zedboard的system.ucf中我们可以找到如下约束.比如,LD0那盏灯,是PS侧的processing_syst
5、em7_0_GPIO 通过PL测,连到管脚T22上的。 ###############################On-boardLED’s###############################netprocessing_system7_0_GPIOLOC=T22
6、IOSTANDARD=LVCMOS33;#LD0netprocessing_system7_0_GPIOLOC=T21
7、IOSTANDARD=LVCMOS33;#LD1netprocessing_system7_0_GPIOLOC=U22
8、I
9、OSTANDARD=LVCMOS33;#LD2netprocessing_system7_0_GPIOLOC=U21
10、IOSTANDARD=LVCMOS33;#LD3netprocessing_system7_0_GPIOLOC=V22
11、IOSTANDARD=LVCMOS33;#LD4netprocessing_system7_0_GPIOLOC=W22
12、IOSTANDARD=LVCMOS33;#LD5netprocessing_system7_0_GPIOLOC=U19
13、IOSTANDARD=LVCMOS33;#L
14、D6netprocessing_system7_0_GPIOLOC=U14
15、IOSTANDARD=LVCMOS33;#LD 第四步,T22那个管脚是如何连到真正的灯上的,需要参考ZED板的文档: 2.7.3UserLEDsTheZedBoardhaseightuserLEDs,LD0–LD7.AlogichighfromtheZynq-7000APSoCI/OcausestheLEDtoturnon.LED’saresourcedfrom3.3Vbanksthrough390Ωresistors.SignalNa
16、meSubsecTIonZynqpinLD0PLT22LD1PLT21LD2PLU22LD3PLU21LD4PLV22LD5PLW22LD6PLU19LD7PLU14LD9PSD5(MIO7) 我们可以看到LD0-LD7都是PL部分的,也就是说这些都是EMIO,从PL的管脚连出。那么,EMIO是如何在设计中定义了processing_syst