999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Xilinx Zynq的物距測量系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

2014-08-29 18:30:30楊曉安羅杰包文博
現(xiàn)代電子技術(shù) 2014年15期
關(guān)鍵詞:測量設(shè)備系統(tǒng)

楊曉安+羅杰+包文博

摘 要: 為了對(duì)障礙物距離精確測量,基于最新Zedboard FPGA(現(xiàn)場可編程邏輯陣列)開發(fā)板,采用軟硬件協(xié)同的設(shè)計(jì)方法,設(shè)計(jì)了障礙物距離測量系統(tǒng)的軟硬件。系統(tǒng)為智能小車平臺(tái)提供了完整的距離測量服務(wù),測距范圍能夠達(dá)到2 cm~4.5 m,精度可達(dá)0.2 cm。該設(shè)計(jì)包含從底層硬件電路設(shè)計(jì)、可編程邏輯IP(Intellectual Property)核設(shè)計(jì)、到Linux設(shè)備驅(qū)動(dòng)的設(shè)計(jì)全部流程,對(duì)于在Zynq?7000 FPGA上軟硬件從事開發(fā)的人員有一定的參考價(jià)值。

關(guān)鍵詞: Zynq?7000; Linux設(shè)備驅(qū)動(dòng); IP核; 軟硬件協(xié)同設(shè)計(jì)

中圖分類號(hào): TN710?34; TP311 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2014)15?0123?04

Design and implementation of an object distance measurement system

based on Xilinx Zynq

YANG Xiao?an1, LUO Jie2, BAO Wen?bo2

(1. Department of Information Engineering, Zhuhai Radio &TV University, Zhuhai 519000, China;

2. Department of Electronics and Information Engineering, Huazhong University of Science and Technology, Wuhan 430074, China)

Abstract: Based on development board known as the latest Zedboard FPGA (field programmable logic array), an obstacle distance measurement system was designed with the collaborative design method of hardware and software to provide a precise measurement of obstacle distance. A complete distance measurement service is provided by the distance measurement system for intelligent cars. The range of system′s rangefinding is 2~450 cm, and its precision can reach 0.2 cm. The whole design flow consists of underlying hardware circuit design, programmable logic IP (intellectual property) core design and Linux device driver design. It is useful to the hardware and software developers working with the Zynq?7000 FPGA.

Keywords: Zynq?7000; linux device driver; Intellectual property; hardware/software co?design

0 引 言

隨著集成電路的制造和應(yīng)用技術(shù)的快速發(fā)展,嵌入式系統(tǒng)的性能也不斷提升,已經(jīng)被廣泛應(yīng)用于工業(yè)控制、航空航天、軍事以及消費(fèi)電子等領(lǐng)域。在硅工藝的發(fā)展以及市場推動(dòng)下,Xilinx公司推出了基于7系列FPGA的新一代全可編程(All Programmable) Zynq?7000系列產(chǎn)品。該系列產(chǎn)品,集成了嵌入式領(lǐng)域集大成者——雙核ARM Cortex A9處理器和7系列28 nm工藝FPGA芯片。Zedboard正是這樣一款基于Zynq?7000產(chǎn)品的實(shí)驗(yàn)開發(fā)板卡,提供了軟件和硬件設(shè)計(jì)的更多可能。本文基于目前FPGA業(yè)界最先進(jìn)的Zedboard FPGA(現(xiàn)場可編程邏輯陣列)開發(fā)板,從底層硬件電路設(shè)計(jì)、可編程邏輯IP(Intellectual Property)核設(shè)計(jì)、到Linux設(shè)備驅(qū)動(dòng)的設(shè)計(jì),實(shí)現(xiàn)了障礙物距離測量的軟硬件系統(tǒng),并在智能小車平臺(tái)上,實(shí)現(xiàn)了距離測量服務(wù)。該方法對(duì)于在Zynq?7000 FPGA上軟硬件的開發(fā)具有指導(dǎo)作用。

1 系統(tǒng)設(shè)計(jì)

傳統(tǒng)上,F(xiàn)PGA中嵌入處理器內(nèi)核,都是以FPGA為主、處理器為輔,設(shè)計(jì)思路以可編程邏輯為主。然而新一代全可編程的Zynq?7000采取不同的思路,它是以處理器為主,F(xiàn)PGA為輔。FPGA變成了ARM處理器的一個(gè)協(xié)處理器[1]。圖1為Zynq?7000 SoC芯片的結(jié)構(gòu)圖。

簡單來說,Zynq由PS和PL兩部分組成:PS(Processing System,處理系統(tǒng))相當(dāng)于一片ARM芯片,而PL(Programmable Logic,可編程邏輯)相當(dāng)于一片F(xiàn)PGA芯片。

PS系統(tǒng)結(jié)構(gòu)為:雙核A9處理器,其是整個(gè)平臺(tái)的控制中心,處理速度高達(dá)1 GHz,可通過NEON擴(kuò)展及單精度浮點(diǎn)單元進(jìn)行增強(qiáng),擁有32 KB指令及數(shù)據(jù)L1緩存,統(tǒng)一的512 KB L2緩存和256 KB片上存儲(chǔ)器;存儲(chǔ)接口,用以管理片內(nèi)系統(tǒng)的存儲(chǔ)狀態(tài),包含DDR3,DDR2和LPDDR2動(dòng)態(tài)存儲(chǔ)控制器和兩個(gè)QSPI,NAND FLASH及NOR FLASH控制器;通用外設(shè),PS中的通用外設(shè)是ARM直接和外部設(shè)備通信的接口,含SPI,I2C,CAN,UART,GPIO,USB 2.0等;其他組成部分。

圖1 Zynq結(jié)構(gòu)圖

PL部分結(jié)構(gòu)為:低功耗可編程邏輯,包含28K~350K個(gè)邏輯單元,240K~2 180K可擴(kuò)展式Block RAM和80~900個(gè)DSP Slice;XADC,為PL內(nèi)置的12 b模/數(shù)轉(zhuǎn)換器;通用/定制外設(shè),PL中的外設(shè)是PL中的器件和外部通信的接口。在ARM接口不夠用時(shí),可以利用PL的外設(shè)接口。PS和PL之間的數(shù)據(jù)交互,則是通過AXI(Advanced eXtensible Interface)接口實(shí)現(xiàn)的。具體有:高性能AXI接口(High Performance AXI Slave Ports),共4個(gè);通用AXI接口,包括兩個(gè)主設(shè)備接口和兩個(gè)從設(shè)備接口,共4個(gè);加速一致性端口,是ARM多核架構(gòu)下定義的一種接口。

根據(jù)Zynq 結(jié)構(gòu)特點(diǎn),在應(yīng)用系統(tǒng)結(jié)構(gòu)設(shè)計(jì)時(shí)注意,使用由Zynq這樣一款功能強(qiáng)大的SoC芯片,與一般的ARM芯片不同,與常用的FPGA,更存在區(qū)別。它要求硬件和軟件之間進(jìn)行協(xié)同設(shè)計(jì),共同實(shí)現(xiàn)既定的性能指標(biāo)要求。在SoC設(shè)計(jì)中,IP(Intellectual Property,知識(shí)產(chǎn)權(quán))核重用技術(shù)是一個(gè)很重要的概念,它是軟硬件協(xié)同設(shè)計(jì)的關(guān)鍵,通過標(biāo)準(zhǔn)化IP核可以實(shí)現(xiàn)模塊復(fù)用,可以完成大規(guī)模的、復(fù)雜的SoC設(shè)計(jì)[3]。

本文以一個(gè)超聲波測距系統(tǒng)為例,介紹如何在Zynq SoC上,定制IP、設(shè)計(jì)Linux 設(shè)備驅(qū)動(dòng)等,并完整的闡述了從硬件到軟件的設(shè)計(jì)流程。設(shè)計(jì)的系統(tǒng)結(jié)構(gòu)如圖2所示。PS上,運(yùn)行Linux操作系統(tǒng),為Linaro Ubuntu發(fā)行版。根據(jù)文獻(xiàn)[2]的指導(dǎo)操作,使用Xilinx公司的開發(fā)軟件完成配置,使PS可以運(yùn)行操作系統(tǒng)。

PL部分按照系統(tǒng)控制的需求進(jìn)行定制。設(shè)計(jì)基于Xilinx AXI總線的超聲波處理外設(shè)IP核,與外部的超聲波發(fā)射和接收電路交互。在Linux操作系統(tǒng)下,這個(gè)IP核就成為了一個(gè)設(shè)備,這就需要編寫相應(yīng)的設(shè)備驅(qū)動(dòng)程序,實(shí)現(xiàn)超聲波測距功能的封裝。

圖2 系統(tǒng)結(jié)構(gòu)圖

2 主要模塊設(shè)計(jì)

2.1 超聲波測距模塊

該模塊基本工作原理是:通過超聲波發(fā)射探頭,發(fā)射頻率為40 kHz的超聲波信號(hào);當(dāng)超聲波信號(hào)遇到障礙物時(shí),會(huì)發(fā)生反射;當(dāng)超聲波接收探頭接收到40 kHz頻率附近的聲波信號(hào)時(shí),經(jīng)過信號(hào)調(diào)理電路;再通過系統(tǒng)計(jì)算接收與發(fā)射之間的時(shí)間差計(jì)算障礙物距離。

圖3 測距模塊

設(shè)計(jì)中共使用到了三個(gè)相同測距模塊,分別測量三個(gè)不同的方向上障礙物距離。測距模塊分為超聲波發(fā)射部分和接收部分,模塊的電路結(jié)構(gòu)如圖4所示。具體是采用HC?SR04超聲波測距模塊,進(jìn)行硬件設(shè)計(jì)[6]。該電路的對(duì)外接口為觸發(fā)(TRIG)控制端和回響(ECHO)信號(hào)接收端。通過I/O口TRIG觸發(fā)測距,提供了一個(gè)10 ms以上的高電平觸發(fā)信號(hào),該模塊將發(fā)出8 個(gè)40 kHz的方波用于探測,并自動(dòng)檢測是否有回波信號(hào)。一旦檢測到有回波信號(hào)則通過I/O口ECHO輸出一個(gè)高電平回響信號(hào),且回響信號(hào)的高電平時(shí)間[tH](單位:ms)即高電平持續(xù)的時(shí)間與所測的距離[S]成正比。其對(duì)應(yīng)關(guān)系為:

[S=tHv2]

式中:[S]為測試距離;[tH]為高電平時(shí)間(單位:s);[v]為聲速340 m/s。

發(fā)射部分:利用串口轉(zhuǎn)換芯片的升壓功能,采用MAX232將輸入JN1和JN2的3.3 V TTL電平轉(zhuǎn)換,得到5 V電平。它激勵(lì)超聲波發(fā)射探頭的信號(hào)壓差為10 V,發(fā)出40 kHz的超聲波。如圖4所示。

圖4 發(fā)射電路

接收部分:對(duì)回波信號(hào)進(jìn)行濾波、放大處理。接收電路圖如圖5所示。其中NET9 為控制接收電路工作的使能端口,NET10為接收電路工作且接收到了回波信號(hào)時(shí)的響應(yīng)信號(hào)。

圖5 接收電路圖

2.2 IP核設(shè)計(jì)

使用Xilinx的設(shè)計(jì)工具XPS(Xilinx Platform Studio)建立IP的流程,新建一個(gè)Ultrasonic(超聲波) IP核模塊。該IP核的模塊結(jié)構(gòu)如圖2所示中的超聲波處理外設(shè)部分,其中Triggercounter,Clockgen和Echocounter使用Verilog HDL實(shí)現(xiàn)。根據(jù)超聲波測距模塊的測距時(shí)序要求,設(shè)計(jì)觸發(fā)和回響信號(hào)的邏輯,由Triggercounter和Echocounter實(shí)現(xiàn)。最終將測量到的數(shù)據(jù)放到AXI4定義的寄存器中,使處理器能從AXI總線上讀取數(shù)據(jù)。本IP核有4個(gè)寄存器(reg0~reg3),與AXI4總線相連,用戶可以通過這4個(gè)寄存器控制發(fā)射超聲波,獲取測量的距離。其中,reg0的功能是使能一次測距以及三個(gè)方向上測量完畢標(biāo)志,圖6為reg0寄存器映射表;reg1~reg3為計(jì)數(shù)后計(jì)算得到的三個(gè)方向上超聲波測量到的距離數(shù)值。將設(shè)計(jì)的IP核添加到XPS工程中去,分配得到的地址空間為0x6E000000~ 0x6E00FFFF。

圖6 reg0寄存器映射表

2.3 Linux驅(qū)動(dòng)設(shè)計(jì)

Linux設(shè)備驅(qū)動(dòng)分為三類:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。在這里需要編寫的是一個(gè)字符設(shè)備[5]。另外,編寫的設(shè)備將通過模塊化的方式加載到操作系統(tǒng)中,而不是靜態(tài)編譯到內(nèi)核中。驅(qū)動(dòng)程序在交叉編譯環(huán)境下,進(jìn)行模塊化編譯。得到以.ko為擴(kuò)展名的驅(qū)動(dòng)文件,使用insmod和rmmod進(jìn)行加載或者卸載,同時(shí)也可以通過lsmod查看是否已被加載。

建立一個(gè)ultrasonic_driver.c文件,使用交叉編譯環(huán)境進(jìn)行編譯,得到對(duì)應(yīng)的可加載文件ultrasonic_driver.ko。在ultrasonic_driver.c中聲明設(shè)備名稱和模塊的物理地址,該物理地址對(duì)應(yīng)于XPS中建立的嵌入式系統(tǒng)的地址。具體如下:

#define DEVICE_NAME "ULTRASONIC_MOUDLE"

#define ULTRASONIC_MOUDLE_PHY_ADDR 0x6E000000

該設(shè)備驅(qū)動(dòng)的主要函數(shù)有:設(shè)備初始化ultrasonic_driver_module_init();三個(gè)方向上的距離測量函數(shù),sys_ultrasonic_front_get(), sys_ultrasonic_right_get()和sys_ultrasonic_left_get();設(shè)備注銷ultrasonic_driver_module_exit()。

(1) 設(shè)備初始化函數(shù),完成注冊(cè)信息,當(dāng)進(jìn)行insmod操作時(shí),操作系統(tǒng)會(huì)自動(dòng)調(diào)用初始化函數(shù),完成各項(xiàng)信息的注冊(cè)。而設(shè)備注銷操作,與它相反,不做贅述。該初始化函數(shù)中,需要完成如下工作[4]:內(nèi)核注冊(cè)設(shè)備驅(qū)動(dòng);創(chuàng)建ultrasonic_driver設(shè)備類;為ultrasonic_driver設(shè)備類創(chuàng)建一個(gè)ultrasonic_driver_device設(shè)備;為設(shè)備創(chuàng)建以下幾個(gè)文件:dev_attr_ultrasonic_trigger,dev_attr_ultrasonic_front,dev_attr_ultrasonic_right,dev_attr_ultrasonic_left,分別對(duì)應(yīng)三個(gè)方向上的距離數(shù)值;將模塊的物理基地址映射到虛擬地址上;同時(shí)將其他幾個(gè)寄存器地址計(jì)算得到虛擬地址;打印調(diào)試信息,表明完成初始化工作。

(2) 距離測量函數(shù),以前向(front)測距為例,另外兩個(gè)方向(right,left)上類似。Linux中,sysfs是一種基于ram的文件系統(tǒng),它提供了一種用于向用戶空間展現(xiàn)內(nèi)核空間里的對(duì)象、屬性和鏈接。sysfs與kobject層次緊密相連,它將kobject層次關(guān)系表現(xiàn)出來,使得用戶空間可以看見這些層次關(guān)系。可以通過CAT和ECHO接口命令來讀/寫sysfs。使用函數(shù)宏DEVICE_ATTR創(chuàng)建接口如下:

static DEVICE_ATTR(ultrasonic_front, S_IRUSR|S_IWUSR, NULL, sys_ultrasonic_front_get);

DEVICE_ATTR 宏聲明有4個(gè)參數(shù),分別是名稱、權(quán)限位、讀函數(shù)、寫函數(shù)。其中讀函數(shù)和寫函數(shù)是讀/寫功能函數(shù)的函數(shù)名。這樣對(duì)ultrasonic_front創(chuàng)建一個(gè)寫函數(shù)sys_ultrasonic _front _get,其流程圖如圖7所示。

圖7 sys_ultrasonic_front_get流程圖

進(jìn)入函數(shù),首先會(huì)打印一條調(diào)試信息;然后向reg0(ultrasonic_trigger_addr)上寫入使能,使開始發(fā)射超聲波;循環(huán)檢測reg0的bit1,查看數(shù)據(jù)是否有效;如果數(shù)據(jù)有效,則讀取出reg1(ultrasonic_front_addr)上的數(shù)據(jù)值,并打印出來。完成一次讀取操作。

完成以上設(shè)備驅(qū)動(dòng)設(shè)計(jì)后,使用配置好的交叉編譯環(huán)境,將該驅(qū)動(dòng)代碼編譯為ultrasonic_driver.ko文件。將該文件放入啟動(dòng)的SD卡中。

3 系統(tǒng)測試

對(duì)XPS構(gòu)建的系統(tǒng),建立U?Boot引導(dǎo),編譯配置內(nèi)核源碼,編譯設(shè)備樹,并制作根文件系統(tǒng),制作ramdisk鏡像文件,得到所有的文件zImage,devicetreee.dtb,ramdisk8M.img.gz,BOOT.BIN。放入Zedboard板的SD卡中,同時(shí)也將ultrasonic_ driver.ko文件放入SD卡,上電啟動(dòng),直至完成。

在連接到Zedboard串口的超級(jí)終端下,掛載SD,執(zhí)行如下步驟:

mount /dev/mmcblk0p1 /mnt //掛載SD卡

cd /mnt //進(jìn)入SD卡目錄

insmod./ ultrasonic_driver.ko //加載ultrasonic_ driver.ko模塊

dmesg //查看加載打印信息

lsmod //查看加載的模塊

cd /sys/class/ultrasonic_driver/ultrasonic_driver

//進(jìn)入創(chuàng)建的設(shè)備目錄,sysfs下

cat ultrasonic_front //讀取一次前向超聲波測量距離

cat ultrasonic_right //讀取一次右邊超聲波測量距離

cat ultrasonic_left //讀取一次左邊超聲波測量距離

系統(tǒng)測試后可以在終端里看到打印的加載信息“ultrasonic driver initial successfully! ”和讀取到的測量距離數(shù)值。調(diào)整超聲波探頭前方障礙物距離,還可以得到不同的距離值,最終,實(shí)現(xiàn)的距離測量能夠達(dá)到2 cm~4.5 m的范圍,精度可達(dá)0.2 cm。

4 結(jié) 語

本文基于FPGA業(yè)界最先進(jìn)的芯片Zynq以及開發(fā)平臺(tái)Zedboard,融合軟硬件設(shè)計(jì),從底層的各功能電路設(shè)計(jì),Verilog HDL代碼編寫,Verilog IP核設(shè)計(jì),到Linux設(shè)備驅(qū)動(dòng)設(shè)計(jì),完成了整個(gè)設(shè)計(jì)流程,在智能小車平臺(tái)上實(shí)現(xiàn)了在Linux系統(tǒng)中利用超聲波測距的功能,達(dá)到2 cm~4.5 m的測距范圍,精度達(dá)0.2 cm,為上層應(yīng)用提供了支撐服務(wù)。該系統(tǒng)設(shè)計(jì)對(duì)基于Zynq?7000 FPGA上的開發(fā)的多個(gè)方面(例如,對(duì)ARM+FPGA應(yīng)用設(shè)計(jì)的理解、軟硬件結(jié)合的設(shè)計(jì)方法;Xilinx下AXI4?lite總線的IP核設(shè)計(jì);Linux字符設(shè)備驅(qū)動(dòng)設(shè)計(jì))有指導(dǎo)性意義。

參考文獻(xiàn)

[1] Xilinx Inc. Zynq?7000 all programmable SoC technical reference manual, v1.6.1 [DB/OL]. [2013?04?17]. http://www.xilinx.com/support/documentation/user_guides/ug585?Zynq?7000?TRM.pdf.

[2] 陸佳華,江舟,馬岷.嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)實(shí)戰(zhàn)指南:基于Xilinx Zynq[M].北京:機(jī)械工業(yè)出版社,2013 .

[3] 李洪濤,顧陳,朱曉華.FPGA技術(shù)開發(fā)(高級(jí)篇)[M].北京:國防工業(yè)出版社,2013.

[4] 章立生,韓承德.SoC芯片設(shè)計(jì)方法及標(biāo)準(zhǔn)化[J].計(jì)算機(jī)研究與發(fā)展,2002,39(1):1?8.

[5] KROAH?HARTMAN C R. Linux設(shè)備驅(qū)動(dòng)程序[M].魏永明,耿岳,鐘書毅,譯.3版.北京:中國電力出版社,2005.

[6] 深圳市捷深科技有限公司.HC?SR04超聲波測距模塊說明書[DB/OL]. [2014?04?10].[http://wenku.baidu.com/view/ce9e5e487?][67f5acfa1c7cd8a.][html.]

建立一個(gè)ultrasonic_driver.c文件,使用交叉編譯環(huán)境進(jìn)行編譯,得到對(duì)應(yīng)的可加載文件ultrasonic_driver.ko。在ultrasonic_driver.c中聲明設(shè)備名稱和模塊的物理地址,該物理地址對(duì)應(yīng)于XPS中建立的嵌入式系統(tǒng)的地址。具體如下:

#define DEVICE_NAME "ULTRASONIC_MOUDLE"

#define ULTRASONIC_MOUDLE_PHY_ADDR 0x6E000000

該設(shè)備驅(qū)動(dòng)的主要函數(shù)有:設(shè)備初始化ultrasonic_driver_module_init();三個(gè)方向上的距離測量函數(shù),sys_ultrasonic_front_get(), sys_ultrasonic_right_get()和sys_ultrasonic_left_get();設(shè)備注銷ultrasonic_driver_module_exit()。

(1) 設(shè)備初始化函數(shù),完成注冊(cè)信息,當(dāng)進(jìn)行insmod操作時(shí),操作系統(tǒng)會(huì)自動(dòng)調(diào)用初始化函數(shù),完成各項(xiàng)信息的注冊(cè)。而設(shè)備注銷操作,與它相反,不做贅述。該初始化函數(shù)中,需要完成如下工作[4]:內(nèi)核注冊(cè)設(shè)備驅(qū)動(dòng);創(chuàng)建ultrasonic_driver設(shè)備類;為ultrasonic_driver設(shè)備類創(chuàng)建一個(gè)ultrasonic_driver_device設(shè)備;為設(shè)備創(chuàng)建以下幾個(gè)文件:dev_attr_ultrasonic_trigger,dev_attr_ultrasonic_front,dev_attr_ultrasonic_right,dev_attr_ultrasonic_left,分別對(duì)應(yīng)三個(gè)方向上的距離數(shù)值;將模塊的物理基地址映射到虛擬地址上;同時(shí)將其他幾個(gè)寄存器地址計(jì)算得到虛擬地址;打印調(diào)試信息,表明完成初始化工作。

(2) 距離測量函數(shù),以前向(front)測距為例,另外兩個(gè)方向(right,left)上類似。Linux中,sysfs是一種基于ram的文件系統(tǒng),它提供了一種用于向用戶空間展現(xiàn)內(nèi)核空間里的對(duì)象、屬性和鏈接。sysfs與kobject層次緊密相連,它將kobject層次關(guān)系表現(xiàn)出來,使得用戶空間可以看見這些層次關(guān)系。可以通過CAT和ECHO接口命令來讀/寫sysfs。使用函數(shù)宏DEVICE_ATTR創(chuàng)建接口如下:

static DEVICE_ATTR(ultrasonic_front, S_IRUSR|S_IWUSR, NULL, sys_ultrasonic_front_get);

DEVICE_ATTR 宏聲明有4個(gè)參數(shù),分別是名稱、權(quán)限位、讀函數(shù)、寫函數(shù)。其中讀函數(shù)和寫函數(shù)是讀/寫功能函數(shù)的函數(shù)名。這樣對(duì)ultrasonic_front創(chuàng)建一個(gè)寫函數(shù)sys_ultrasonic _front _get,其流程圖如圖7所示。

圖7 sys_ultrasonic_front_get流程圖

進(jìn)入函數(shù),首先會(huì)打印一條調(diào)試信息;然后向reg0(ultrasonic_trigger_addr)上寫入使能,使開始發(fā)射超聲波;循環(huán)檢測reg0的bit1,查看數(shù)據(jù)是否有效;如果數(shù)據(jù)有效,則讀取出reg1(ultrasonic_front_addr)上的數(shù)據(jù)值,并打印出來。完成一次讀取操作。

完成以上設(shè)備驅(qū)動(dòng)設(shè)計(jì)后,使用配置好的交叉編譯環(huán)境,將該驅(qū)動(dòng)代碼編譯為ultrasonic_driver.ko文件。將該文件放入啟動(dòng)的SD卡中。

3 系統(tǒng)測試

對(duì)XPS構(gòu)建的系統(tǒng),建立U?Boot引導(dǎo),編譯配置內(nèi)核源碼,編譯設(shè)備樹,并制作根文件系統(tǒng),制作ramdisk鏡像文件,得到所有的文件zImage,devicetreee.dtb,ramdisk8M.img.gz,BOOT.BIN。放入Zedboard板的SD卡中,同時(shí)也將ultrasonic_ driver.ko文件放入SD卡,上電啟動(dòng),直至完成。

在連接到Zedboard串口的超級(jí)終端下,掛載SD,執(zhí)行如下步驟:

mount /dev/mmcblk0p1 /mnt //掛載SD卡

cd /mnt //進(jìn)入SD卡目錄

insmod./ ultrasonic_driver.ko //加載ultrasonic_ driver.ko模塊

dmesg //查看加載打印信息

lsmod //查看加載的模塊

cd /sys/class/ultrasonic_driver/ultrasonic_driver

//進(jìn)入創(chuàng)建的設(shè)備目錄,sysfs下

cat ultrasonic_front //讀取一次前向超聲波測量距離

cat ultrasonic_right //讀取一次右邊超聲波測量距離

cat ultrasonic_left //讀取一次左邊超聲波測量距離

系統(tǒng)測試后可以在終端里看到打印的加載信息“ultrasonic driver initial successfully! ”和讀取到的測量距離數(shù)值。調(diào)整超聲波探頭前方障礙物距離,還可以得到不同的距離值,最終,實(shí)現(xiàn)的距離測量能夠達(dá)到2 cm~4.5 m的范圍,精度可達(dá)0.2 cm。

4 結(jié) 語

本文基于FPGA業(yè)界最先進(jìn)的芯片Zynq以及開發(fā)平臺(tái)Zedboard,融合軟硬件設(shè)計(jì),從底層的各功能電路設(shè)計(jì),Verilog HDL代碼編寫,Verilog IP核設(shè)計(jì),到Linux設(shè)備驅(qū)動(dòng)設(shè)計(jì),完成了整個(gè)設(shè)計(jì)流程,在智能小車平臺(tái)上實(shí)現(xiàn)了在Linux系統(tǒng)中利用超聲波測距的功能,達(dá)到2 cm~4.5 m的測距范圍,精度達(dá)0.2 cm,為上層應(yīng)用提供了支撐服務(wù)。該系統(tǒng)設(shè)計(jì)對(duì)基于Zynq?7000 FPGA上的開發(fā)的多個(gè)方面(例如,對(duì)ARM+FPGA應(yīng)用設(shè)計(jì)的理解、軟硬件結(jié)合的設(shè)計(jì)方法;Xilinx下AXI4?lite總線的IP核設(shè)計(jì);Linux字符設(shè)備驅(qū)動(dòng)設(shè)計(jì))有指導(dǎo)性意義。

參考文獻(xiàn)

[1] Xilinx Inc. Zynq?7000 all programmable SoC technical reference manual, v1.6.1 [DB/OL]. [2013?04?17]. http://www.xilinx.com/support/documentation/user_guides/ug585?Zynq?7000?TRM.pdf.

[2] 陸佳華,江舟,馬岷.嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)實(shí)戰(zhàn)指南:基于Xilinx Zynq[M].北京:機(jī)械工業(yè)出版社,2013 .

[3] 李洪濤,顧陳,朱曉華.FPGA技術(shù)開發(fā)(高級(jí)篇)[M].北京:國防工業(yè)出版社,2013.

[4] 章立生,韓承德.SoC芯片設(shè)計(jì)方法及標(biāo)準(zhǔn)化[J].計(jì)算機(jī)研究與發(fā)展,2002,39(1):1?8.

[5] KROAH?HARTMAN C R. Linux設(shè)備驅(qū)動(dòng)程序[M].魏永明,耿岳,鐘書毅,譯.3版.北京:中國電力出版社,2005.

[6] 深圳市捷深科技有限公司.HC?SR04超聲波測距模塊說明書[DB/OL]. [2014?04?10].[http://wenku.baidu.com/view/ce9e5e487?][67f5acfa1c7cd8a.][html.]

建立一個(gè)ultrasonic_driver.c文件,使用交叉編譯環(huán)境進(jìn)行編譯,得到對(duì)應(yīng)的可加載文件ultrasonic_driver.ko。在ultrasonic_driver.c中聲明設(shè)備名稱和模塊的物理地址,該物理地址對(duì)應(yīng)于XPS中建立的嵌入式系統(tǒng)的地址。具體如下:

#define DEVICE_NAME "ULTRASONIC_MOUDLE"

#define ULTRASONIC_MOUDLE_PHY_ADDR 0x6E000000

該設(shè)備驅(qū)動(dòng)的主要函數(shù)有:設(shè)備初始化ultrasonic_driver_module_init();三個(gè)方向上的距離測量函數(shù),sys_ultrasonic_front_get(), sys_ultrasonic_right_get()和sys_ultrasonic_left_get();設(shè)備注銷ultrasonic_driver_module_exit()。

(1) 設(shè)備初始化函數(shù),完成注冊(cè)信息,當(dāng)進(jìn)行insmod操作時(shí),操作系統(tǒng)會(huì)自動(dòng)調(diào)用初始化函數(shù),完成各項(xiàng)信息的注冊(cè)。而設(shè)備注銷操作,與它相反,不做贅述。該初始化函數(shù)中,需要完成如下工作[4]:內(nèi)核注冊(cè)設(shè)備驅(qū)動(dòng);創(chuàng)建ultrasonic_driver設(shè)備類;為ultrasonic_driver設(shè)備類創(chuàng)建一個(gè)ultrasonic_driver_device設(shè)備;為設(shè)備創(chuàng)建以下幾個(gè)文件:dev_attr_ultrasonic_trigger,dev_attr_ultrasonic_front,dev_attr_ultrasonic_right,dev_attr_ultrasonic_left,分別對(duì)應(yīng)三個(gè)方向上的距離數(shù)值;將模塊的物理基地址映射到虛擬地址上;同時(shí)將其他幾個(gè)寄存器地址計(jì)算得到虛擬地址;打印調(diào)試信息,表明完成初始化工作。

(2) 距離測量函數(shù),以前向(front)測距為例,另外兩個(gè)方向(right,left)上類似。Linux中,sysfs是一種基于ram的文件系統(tǒng),它提供了一種用于向用戶空間展現(xiàn)內(nèi)核空間里的對(duì)象、屬性和鏈接。sysfs與kobject層次緊密相連,它將kobject層次關(guān)系表現(xiàn)出來,使得用戶空間可以看見這些層次關(guān)系。可以通過CAT和ECHO接口命令來讀/寫sysfs。使用函數(shù)宏DEVICE_ATTR創(chuàng)建接口如下:

static DEVICE_ATTR(ultrasonic_front, S_IRUSR|S_IWUSR, NULL, sys_ultrasonic_front_get);

DEVICE_ATTR 宏聲明有4個(gè)參數(shù),分別是名稱、權(quán)限位、讀函數(shù)、寫函數(shù)。其中讀函數(shù)和寫函數(shù)是讀/寫功能函數(shù)的函數(shù)名。這樣對(duì)ultrasonic_front創(chuàng)建一個(gè)寫函數(shù)sys_ultrasonic _front _get,其流程圖如圖7所示。

圖7 sys_ultrasonic_front_get流程圖

進(jìn)入函數(shù),首先會(huì)打印一條調(diào)試信息;然后向reg0(ultrasonic_trigger_addr)上寫入使能,使開始發(fā)射超聲波;循環(huán)檢測reg0的bit1,查看數(shù)據(jù)是否有效;如果數(shù)據(jù)有效,則讀取出reg1(ultrasonic_front_addr)上的數(shù)據(jù)值,并打印出來。完成一次讀取操作。

完成以上設(shè)備驅(qū)動(dòng)設(shè)計(jì)后,使用配置好的交叉編譯環(huán)境,將該驅(qū)動(dòng)代碼編譯為ultrasonic_driver.ko文件。將該文件放入啟動(dòng)的SD卡中。

3 系統(tǒng)測試

對(duì)XPS構(gòu)建的系統(tǒng),建立U?Boot引導(dǎo),編譯配置內(nèi)核源碼,編譯設(shè)備樹,并制作根文件系統(tǒng),制作ramdisk鏡像文件,得到所有的文件zImage,devicetreee.dtb,ramdisk8M.img.gz,BOOT.BIN。放入Zedboard板的SD卡中,同時(shí)也將ultrasonic_ driver.ko文件放入SD卡,上電啟動(dòng),直至完成。

在連接到Zedboard串口的超級(jí)終端下,掛載SD,執(zhí)行如下步驟:

mount /dev/mmcblk0p1 /mnt //掛載SD卡

cd /mnt //進(jìn)入SD卡目錄

insmod./ ultrasonic_driver.ko //加載ultrasonic_ driver.ko模塊

dmesg //查看加載打印信息

lsmod //查看加載的模塊

cd /sys/class/ultrasonic_driver/ultrasonic_driver

//進(jìn)入創(chuàng)建的設(shè)備目錄,sysfs下

cat ultrasonic_front //讀取一次前向超聲波測量距離

cat ultrasonic_right //讀取一次右邊超聲波測量距離

cat ultrasonic_left //讀取一次左邊超聲波測量距離

系統(tǒng)測試后可以在終端里看到打印的加載信息“ultrasonic driver initial successfully! ”和讀取到的測量距離數(shù)值。調(diào)整超聲波探頭前方障礙物距離,還可以得到不同的距離值,最終,實(shí)現(xiàn)的距離測量能夠達(dá)到2 cm~4.5 m的范圍,精度可達(dá)0.2 cm。

4 結(jié) 語

本文基于FPGA業(yè)界最先進(jìn)的芯片Zynq以及開發(fā)平臺(tái)Zedboard,融合軟硬件設(shè)計(jì),從底層的各功能電路設(shè)計(jì),Verilog HDL代碼編寫,Verilog IP核設(shè)計(jì),到Linux設(shè)備驅(qū)動(dòng)設(shè)計(jì),完成了整個(gè)設(shè)計(jì)流程,在智能小車平臺(tái)上實(shí)現(xiàn)了在Linux系統(tǒng)中利用超聲波測距的功能,達(dá)到2 cm~4.5 m的測距范圍,精度達(dá)0.2 cm,為上層應(yīng)用提供了支撐服務(wù)。該系統(tǒng)設(shè)計(jì)對(duì)基于Zynq?7000 FPGA上的開發(fā)的多個(gè)方面(例如,對(duì)ARM+FPGA應(yīng)用設(shè)計(jì)的理解、軟硬件結(jié)合的設(shè)計(jì)方法;Xilinx下AXI4?lite總線的IP核設(shè)計(jì);Linux字符設(shè)備驅(qū)動(dòng)設(shè)計(jì))有指導(dǎo)性意義。

參考文獻(xiàn)

[1] Xilinx Inc. Zynq?7000 all programmable SoC technical reference manual, v1.6.1 [DB/OL]. [2013?04?17]. http://www.xilinx.com/support/documentation/user_guides/ug585?Zynq?7000?TRM.pdf.

[2] 陸佳華,江舟,馬岷.嵌入式系統(tǒng)軟硬件協(xié)同設(shè)計(jì)實(shí)戰(zhàn)指南:基于Xilinx Zynq[M].北京:機(jī)械工業(yè)出版社,2013 .

[3] 李洪濤,顧陳,朱曉華.FPGA技術(shù)開發(fā)(高級(jí)篇)[M].北京:國防工業(yè)出版社,2013.

[4] 章立生,韓承德.SoC芯片設(shè)計(jì)方法及標(biāo)準(zhǔn)化[J].計(jì)算機(jī)研究與發(fā)展,2002,39(1):1?8.

[5] KROAH?HARTMAN C R. Linux設(shè)備驅(qū)動(dòng)程序[M].魏永明,耿岳,鐘書毅,譯.3版.北京:中國電力出版社,2005.

[6] 深圳市捷深科技有限公司.HC?SR04超聲波測距模塊說明書[DB/OL]. [2014?04?10].[http://wenku.baidu.com/view/ce9e5e487?][67f5acfa1c7cd8a.][html.]

猜你喜歡
測量設(shè)備系統(tǒng)
諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機(jī)系統(tǒng)
ZC系列無人機(jī)遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
把握四個(gè)“三” 測量變簡單
滑動(dòng)摩擦力的測量和計(jì)算
基于MPU6050簡單控制設(shè)備
電子制作(2018年11期)2018-08-04 03:26:08
滑動(dòng)摩擦力的測量與計(jì)算
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
500kV輸變電設(shè)備運(yùn)行維護(hù)探討
主站蜘蛛池模板: 日韩精品久久久久久久电影蜜臀| 黄色a一级视频| 国内精品视频区在线2021| 欧美日韩国产在线播放| 亚洲一区二区精品无码久久久| 国产成人一区二区| 亚洲人成成无码网WWW| 久久亚洲国产视频| 人妻中文久热无码丝袜| 日本www在线视频| 欧美亚洲激情| 就去色综合| 欧美午夜理伦三级在线观看 | 国产第八页| 尤物国产在线| 国产视频一区二区在线观看| 美女毛片在线| 精品欧美视频| 欧美一级爱操视频| 在线精品欧美日韩| 欧洲av毛片| 72种姿势欧美久久久大黄蕉| 免费不卡视频| 日韩毛片免费| 欧美无专区| 中文字幕日韩丝袜一区| 亚洲乱码精品久久久久..| 成人免费网站久久久| 在线亚洲天堂| 超碰aⅴ人人做人人爽欧美 | 女人18毛片久久| 91精品啪在线观看国产60岁| 国产手机在线小视频免费观看| a免费毛片在线播放| 久久不卡精品| 99久久精品国产麻豆婷婷| 亚洲一区国色天香| 国产精品短篇二区| 亚洲国产理论片在线播放| 91精品国产无线乱码在线| 青青极品在线| 欧美性久久久久| 国产精品白浆无码流出在线看| 日韩精品高清自在线| 国产精品永久在线| 草草线在成年免费视频2| 免费毛片全部不收费的| 永久毛片在线播| 久久久精品久久久久三级| 91系列在线观看| 国产色婷婷| 天堂成人av| 亚洲最新地址| 午夜福利视频一区| 一级毛片基地| 国产高清在线观看| 中文无码伦av中文字幕| 国产波多野结衣中文在线播放| 亚洲国产精品久久久久秋霞影院| 欧美亚洲一二三区| 久久精品无码国产一区二区三区| 日韩精品无码不卡无码| 在线观看免费人成视频色快速| 久久男人资源站| 一级毛片在线播放| 在线免费a视频| 91无码网站| 日本三级黄在线观看| 亚洲无码精品在线播放| 精品久久人人爽人人玩人人妻| lhav亚洲精品| 免费国产一级 片内射老| 97在线免费| 精品丝袜美腿国产一区| 免费网站成人亚洲| 欧美成人第一页| 亚洲天堂免费在线视频| 青青草综合网| 一区二区欧美日韩高清免费| 天堂在线亚洲| 亚洲无码电影| 久久人与动人物A级毛片|