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

基于GPMC的多路數(shù)據(jù)采集設(shè)計(jì)與實(shí)現(xiàn)

2019-01-05 01:21:00焦楓媛耿生群
關(guān)鍵詞:結(jié)構(gòu)設(shè)備設(shè)計(jì)

吳 波, 焦楓媛, 劉 瑜, 耿生群

(1. 中北大學(xué) 環(huán)境與安全工程學(xué)院, 山西 太原 030051; 2. 中北大學(xué) 信息與通信學(xué)院, 山西 太原 030051;3. 北京航空航天大學(xué) 信息與通信學(xué)院, 北京 100000)

0 引 言

Spartan-6 XC6SLX25是由Xilinx推出的采用45 nm工藝的低成本FPGA. 片上搭載邏輯單元24 051個(gè), 標(biāo)準(zhǔn)I/O Bank 4個(gè), 可滿(mǎn)足一般情況下的數(shù)據(jù)接口擴(kuò)展需求[1]. TMS320DM8168是目前TI推出的DaVinci系列中最先進(jìn)的數(shù)字媒體處理器. 它包含采用ARM v7架構(gòu)并帶有NEON向量/浮點(diǎn)協(xié)處理器的最高主頻率可達(dá)1.2 GHz的Cortex A8 RISC處理器、 TI C674x VLIW架構(gòu)最高頻率可達(dá)1 GHz的浮點(diǎn)DSP內(nèi)核以及針對(duì)高清視頻采集與處理的圖像協(xié)處理器. 該片上SOC在與FPGA通信時(shí)可采用通用存儲(chǔ)控制器(General-Purpose Memory Controller, GPMC)[2-5]. GPMC總線(xiàn)是由德州儀器公司(TI)開(kāi)發(fā)專(zhuān)門(mén)用于訪(fǎng)問(wèn)外部存儲(chǔ)設(shè)備的總線(xiàn)接口[6].

本研究將基于Spartan-6 XC6SLX25與DM8168通過(guò)GPMC實(shí)現(xiàn)多路數(shù)據(jù)的采集.

1 數(shù)據(jù)采集結(jié)構(gòu)設(shè)計(jì)

圖 1 數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)Fig.1 Thedesign of acquisition system

多路數(shù)據(jù)的采集系統(tǒng)設(shè)計(jì)如圖 1 所示.

在一般的生產(chǎn)活動(dòng)與安全監(jiān)管中不僅需要針對(duì)視頻數(shù)據(jù)的記錄, 多數(shù)情況下需要對(duì)多路串口、 CAN總線(xiàn)數(shù)據(jù)進(jìn)行實(shí)時(shí)記錄. 本設(shè)計(jì)方案采用FPGA對(duì)多路串口、 CAN總線(xiàn)數(shù)據(jù)進(jìn)行采集, 并對(duì)數(shù)據(jù)采用幀頭、 幀ID、 幀長(zhǎng)度的格式進(jìn)行重新組幀、 打包后送入GPMC接口. DM8168通過(guò)GPMC驅(qū)動(dòng)對(duì)FPGA傳輸來(lái)的整包數(shù)據(jù)進(jìn)行讀取、 解幀并分別存入磁盤(pán).

2 FPGA數(shù)據(jù)采集

本研究采用FPGA對(duì)多路CAN總線(xiàn)數(shù)據(jù)、 多路串口數(shù)據(jù)進(jìn)行采集. 采集方式如圖 2 所示.

圖 2 FPGA數(shù)據(jù)采集方式Fig.2 Data acquisition method by FPGA

按圖 2 所示, 多路數(shù)據(jù)經(jīng)過(guò)FPGA采集后先通過(guò)一個(gè)小的FIFO_RX對(duì)自身進(jìn)行數(shù)據(jù)打包, 在小包數(shù)據(jù)上疊加時(shí)標(biāo)、 幀頭、 幀ID以及幀長(zhǎng)度等信息后, 送入一個(gè)較大的FIFO. 在較大的FIFO中把同一時(shí)間內(nèi)的數(shù)據(jù)一次組幀添加幀頭、 幀長(zhǎng)之后通過(guò)數(shù)據(jù)線(xiàn)向GPMC接口送入數(shù)據(jù)并通過(guò)中斷通知DM8168系統(tǒng)內(nèi)核.

3 GMPC接口設(shè)計(jì)

FPGA采集的數(shù)據(jù)與DM8168之間通過(guò)FPGA模擬DM8168的GPMC總線(xiàn)的讀寫(xiě)時(shí)序來(lái)完成Cortex A8與FPGA的高速信號(hào)傳輸. 這種接口設(shè)計(jì)不僅能完成高速數(shù)據(jù)的傳輸, 同時(shí)也降低了設(shè)計(jì)過(guò)程中的復(fù)雜技術(shù), 提高了數(shù)據(jù)傳輸?shù)姆€(wěn)定性與可靠性, 是一種實(shí)現(xiàn)ARM 和 FPGA通信的有效方法[7].

在面向DM8168的Cortex A8的GPMC驅(qū)動(dòng)實(shí)現(xiàn)中, 可采用基于Linux 2.6.xx內(nèi)核普遍使用的字符設(shè)備類(lèi)似的驅(qū)動(dòng)管理與注冊(cè)機(jī)制, 字符設(shè)備指的是每次都以字符的形式進(jìn)行數(shù)據(jù)的發(fā)送和接收[8]. 在多路數(shù)據(jù)采集的設(shè)計(jì)中對(duì)外部設(shè)備的信號(hào)采集數(shù)據(jù)帶寬較低, 故本設(shè)計(jì)采用基于字符設(shè)備的GPMC驅(qū)動(dòng)數(shù)據(jù)傳輸模式. 驅(qū)動(dòng)運(yùn)行分為3部分: GPMC基于硬件層對(duì)內(nèi)核的注冊(cè); GPMC基于應(yīng)用層面向內(nèi)核的注冊(cè); GPMC驅(qū)動(dòng)加載.

GPMC驅(qū)動(dòng)運(yùn)行結(jié)構(gòu)如圖 3 所示.

圖 3 GPMC驅(qū)動(dòng)運(yùn)行結(jié)構(gòu)Fig.3 The structure of GPMC driver running

在驅(qū)動(dòng)運(yùn)行中驅(qū)動(dòng)程序必須在嵌入式系統(tǒng)的內(nèi)核中進(jìn)行注冊(cè)與加載才能完成應(yīng)用層與外部設(shè)備的通信. GPMC驅(qū)動(dòng)通過(guò)基于硬件層面向內(nèi)核的注冊(cè), 將FPGA采集到的數(shù)據(jù)以字符的形式通過(guò)內(nèi)核進(jìn)行讀取, 然后存放在系統(tǒng)內(nèi)核中, 等到一定時(shí)間之后再通過(guò)驅(qū)動(dòng)由內(nèi)核向應(yīng)用層發(fā)送信號(hào), 通知應(yīng)用層讀取上一步中存放在內(nèi)核空間中的數(shù)據(jù).

由于驅(qū)動(dòng)需要與內(nèi)核之間進(jìn)行交互, 在驅(qū)動(dòng)制作與加載時(shí)需要將內(nèi)核中g(shù)pmc.c的部分內(nèi)核代碼以去掉static(靜態(tài)函數(shù))的方式進(jìn)行修改并重新編譯.

4 GPMC驅(qū)動(dòng)設(shè)計(jì)

4.1 驅(qū)動(dòng)硬件結(jié)構(gòu)

DM8168與各種各樣的字符設(shè)備或者存儲(chǔ)設(shè)備之間以L(fǎng)3慢速互聯(lián)的方式通過(guò)GPMC接口接入, 其原理框架[9]如圖 4 所示.

GPMC本身具有十分靈活的編程模式, 可以實(shí)現(xiàn)對(duì)多種外部設(shè)備實(shí)現(xiàn)多方案配置.

GPMC內(nèi)部具有高性能可配置的寄存器組. 通過(guò)對(duì)在單路GPMC總線(xiàn)使用情況下或者在多路片選GPMC總線(xiàn)使用情況下的GPMC寄存器配置可以令GPMC自身基于不同的外部設(shè)備對(duì)自身時(shí)序進(jìn)行自適應(yīng)配置[10].

圖 4 GPMC驅(qū)動(dòng)硬件框架Fig.4 The hardware framework of GPMC driver

用戶(hù)在使用DM8168芯片的GPMC接口與外部芯片或設(shè)備進(jìn)行通信時(shí)不需要考慮GPMC總線(xiàn)與外部設(shè)備的協(xié)調(diào)問(wèn)題, 這種特性使得DM8168通過(guò)GPMC總線(xiàn)能與更大范圍的外部存儲(chǔ)芯片及外部設(shè)備進(jìn)行通信, 如FPGA, SRAM, NANDFLASH及Ethernet PHY等芯片.

4.2 GPMC寄存器配置

本研究在GPMC接口所采用的是L3低速接口, 其采用One 8-bit/16-bit/32-bit interconnect access (read/write)的方式配置. 在數(shù)據(jù)讀取時(shí)序上采用Asynchronous Single Read Access模式的時(shí)序配置.

驅(qū)動(dòng)整體的初始化與配置過(guò)程如圖 5 所示.

GPMC初始化部分與參數(shù)設(shè)置部分在GPMC驅(qū)動(dòng)加載中根據(jù)實(shí)際情況完成, 在驅(qū)動(dòng)中設(shè)置 GPMC 寄存器參數(shù)前應(yīng)該將片選使能關(guān)閉[8].

4.3 GPMC驅(qū)動(dòng)設(shè)計(jì)

4.3.1 GPMC底層部分的驅(qū)動(dòng)設(shè)計(jì)

DM8168硬件層面向內(nèi)核部分的GPMC驅(qū)動(dòng)注冊(cè)分為設(shè)備注冊(cè)與驅(qū)動(dòng)注冊(cè)兩步. GPMC設(shè)備注冊(cè)的定義與初始化由Linux內(nèi)核中的/devices.c文件通過(guò)利用/linux/ioport.h中的resource結(jié)構(gòu)體定義一個(gè)包含有GPMC所有需資源的結(jié)構(gòu)體實(shí)現(xiàn).

Static structresource ti8168_gpmc_resources=

{

{

.start = TI_GPMC_REG_BASE,

.end = TI_GPMC_REG_BASE + SZ_16M-1,

.name = “gpmc_dev_reg”,

.flags = IORESOURCE_MEM

},

};

通過(guò)以上操作完成資源配置后通過(guò)linux/platform_device.h中的platform_device結(jié)構(gòu)體定義面向驅(qū)動(dòng)設(shè)備的結(jié)構(gòu)體.

圖 5 驅(qū)動(dòng)的初始化與配置Fig.5 The initialization and configuration of driver

linuxplatform_device.h中的platform_device結(jié)構(gòu)體為:

Static structplatform_device ti8168_gpmc_device =

{

{

.name = “gpmc_test”,

.id = 3,

.num_resources = ARRAY_SIZE( ti8168_gpmc_resources ),

.resource = ti8168_gpmc_resources;

}

};

通過(guò)以上操作完成驅(qū)動(dòng)生成后, 通過(guò)linux/platform_device.h中的platform_driver完成結(jié)構(gòu)體定義, 執(zhí)行platform_device_register來(lái)完成驅(qū)動(dòng)注冊(cè)與設(shè)備綁定.

structplatform_driver ti8168_gpmc_driver =

{

.driver =

{

.name = “gpmc_test”,

.owner = THIS_MODULE,

},

.probe = ti8168_gpmc_probe,

.remove = ti8168_gpmc_remove,

};

4.3.2 GPMC應(yīng)用層部分的驅(qū)動(dòng)設(shè)計(jì)

DM8168應(yīng)用層面向內(nèi)核的驅(qū)動(dòng)主要是基于硬件層部分的驅(qū)動(dòng)定義面向應(yīng)用層的讀寫(xiě)功能函數(shù).

通過(guò)定義中斷結(jié)構(gòu)體, 利用FPGA以中斷的形式觸發(fā)驅(qū)動(dòng)讀取面向硬件層部分驅(qū)動(dòng)的數(shù)據(jù)實(shí)現(xiàn)與硬件層之間的交互.

structirq_info

{

intirqinit; ∥ 中斷初始化標(biāo)志

intirqnum; ∥ 中斷號(hào)

intirqtype; ∥ 中斷觸發(fā)方式

intirqenable; ∥ 中斷使能標(biāo)志

unsigned intirqcnt; ∥ 中斷計(jì)數(shù)

};

通過(guò)定義設(shè)備信息結(jié)構(gòu)體存儲(chǔ)上一步中利用中斷響應(yīng)讀取到的硬件層數(shù)據(jù)信息以及應(yīng)用層使用的設(shè)備信息.

structgpmcdev_info

{

u32 gpmccsbr; ∥ GPMC片選虛擬地址

structirq_infoirqinfo; ∥ DSP2ARM中斷信息

unsignedint flagrecv1;

unsignedint flagrecv2;

unsigned short* pbuffer_recv1;

unsignedint buffer_len1;

unsigned short* pbuffer_recv2;

unsignedint buffer_len2;

}gpmcdevinfo;

通過(guò)使用file_operations結(jié)構(gòu)體中提供的函數(shù)指針, 基于前述的功能實(shí)現(xiàn)應(yīng)用層面向硬件設(shè)備的各種操作.

staticstructfile_operationsgpmcdev_ops =

{

.open = gpmcdev_open, ∥ GPMC獲得設(shè)備句柄

.write = gpmcdev_write, ∥ GPMC數(shù)據(jù)讀取

.fasync = gpmcdev_fasync, ∥ GPMC異步通信

圖 6 驅(qū)動(dòng)初始化過(guò)程Fig.6 Drive initialization

.release = gpmcdev_release, ∥ GPMC設(shè)備釋放

.unlocked_ioctl = gpmcdev_ioctl, ∥ GPMC設(shè)備io控制

};

4.4 GPMC驅(qū)動(dòng)初始化

GPMC驅(qū)動(dòng)的初始化與加載通過(guò)shell指令insmod實(shí)現(xiàn)[10], 其實(shí)現(xiàn)過(guò)程如圖 6 所示.

整個(gè)過(guò)程為insmod命令加載模塊初始化函數(shù), 在其執(zhí)行完之后, 加載探測(cè)函數(shù)并向內(nèi)核注冊(cè)驅(qū)動(dòng)生成設(shè)備節(jié)點(diǎn).

4.5 GPMC異步通信實(shí)現(xiàn)

驅(qū)動(dòng)與應(yīng)用層之間的通信以fasync(異步通信)的方式實(shí)現(xiàn). 通過(guò)對(duì)/Linux/fs.h中結(jié)構(gòu)體fasync_struct的定義來(lái)實(shí)現(xiàn)異步通信.

structfasync_struct {

spinlock_t fa_lock;

int magic;

int fa_fd;

structfasync_struct *fa_next;

struct file *fa_file;

structrcu_head fa_rcu;

} * async = NULL;

……

int ret = fasync_helper(fd, filp, mode, &async);

驅(qū)動(dòng)待應(yīng)用層準(zhǔn)備就緒后, 每隔1 s對(duì)向應(yīng)用層發(fā)送一個(gè)系統(tǒng)信號(hào), 應(yīng)用層響應(yīng)到系統(tǒng)信號(hào)后使用系統(tǒng)IO向特定地址讀取數(shù)據(jù)包. 這樣每1 s讀取一包數(shù)據(jù)可以提高系統(tǒng)的讀寫(xiě)效率, 降低線(xiàn)程CPU占用.

5 應(yīng)用層數(shù)據(jù)讀取與存儲(chǔ)

在GPMC驅(qū)動(dòng)設(shè)計(jì)完成之后, 需要針對(duì)驅(qū)動(dòng)中提供的file_operations結(jié)構(gòu)體中包含的函數(shù)進(jìn)行相應(yīng)的操作. 利用file_operations結(jié)構(gòu)體內(nèi)核, 能夠方便地調(diào)用驅(qū)動(dòng)程序內(nèi)部的函數(shù), 并且可以方便地利用驅(qū)動(dòng)程序內(nèi)部使用的文件結(jié)構(gòu)來(lái)識(shí)別設(shè)備[11].

GPMC設(shè)備操作部分代碼如下:

blocked = block_sigio();

sigemptyset(&sigact.sa_mask);

sigact.sa_flags=0;

sigact.sa_handler=sigio_handler;

unblock_sigio(blocked);

fd=open(DEVFILE, O_RDWR);

fcntl(fd, F_SETOWN, getpid());

oflag=fcntl(fd, F_GETFL);

fcntl(fd, F_SETFL, oflag|FASYNC);

通過(guò)上述代碼可實(shí)現(xiàn)應(yīng)用層對(duì)GPMC驅(qū)動(dòng)發(fā)出的系統(tǒng)中斷信號(hào)的實(shí)時(shí)響應(yīng), 每一次中斷信號(hào)的響應(yīng)都會(huì)執(zhí)行voidsigio_handler(intsigno)函數(shù). 在該函數(shù)中通過(guò)調(diào)用intioctl(intfd, int request, void * p)函數(shù)即可將fd文件符指向GPMC設(shè)備中, 利用GPMC設(shè)備的request模式, 將內(nèi)存中數(shù)據(jù)的首指針賦值給*p, 傳入數(shù)據(jù)指針, 從而實(shí)現(xiàn)基于GPMC的多路數(shù)據(jù)采集過(guò)程.

6 測(cè) 試

通過(guò)GPMC方式通信的實(shí)現(xiàn)結(jié)果如圖 7 所示.

圖 7 FPGA時(shí)序圖Fig.7 FPGA sequence

測(cè)試持續(xù)時(shí)間如圖 8 所示. 數(shù)據(jù)分析結(jié)果如圖 9 所示.

圖 8 測(cè)試持續(xù)時(shí)間Fig.8 Test duration

圖 9 數(shù)據(jù)分析結(jié)果Fig.9 Data analysis

由此可以看出: 經(jīng)4 h最大數(shù)據(jù)帶寬連續(xù)數(shù)據(jù)采集測(cè)試, 本研究中所用采集方法在程序中運(yùn)行穩(wěn)定, 無(wú)誤碼.

7 結(jié) 論

本研究闡述了針對(duì)DM8168的基于FPGA數(shù)據(jù)采集與GPMC接口數(shù)據(jù)傳輸?shù)亩嗦窋?shù)據(jù)采集開(kāi)發(fā)過(guò)程. 根據(jù)GPMC的硬件特點(diǎn), 參考Linux字符設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā)了通用流程, 設(shè)計(jì)出了一套安全穩(wěn)定切實(shí)可行的GPMC驅(qū)動(dòng), 并利用該驅(qū)動(dòng)在FPGA數(shù)據(jù)采集與DM8168之間進(jìn)行通信. 目前, 該驅(qū)動(dòng)已經(jīng)成功移植在DM8168搭建的嵌入式開(kāi)發(fā)平臺(tái), 并通過(guò)FPGA完成了多路數(shù)據(jù)的采集.

猜你喜歡
結(jié)構(gòu)設(shè)備設(shè)計(jì)
諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
《形而上學(xué)》△卷的結(jié)構(gòu)和位置
論結(jié)構(gòu)
瞞天過(guò)海——仿生設(shè)計(jì)萌到家
基于MPU6050簡(jiǎn)單控制設(shè)備
電子制作(2018年11期)2018-08-04 03:26:08
設(shè)計(jì)秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計(jì)叫而專(zhuān)
Coco薇(2017年5期)2017-06-05 08:53:16
論《日出》的結(jié)構(gòu)
500kV輸變電設(shè)備運(yùn)行維護(hù)探討
創(chuàng)新治理結(jié)構(gòu)促進(jìn)中小企業(yè)持續(xù)成長(zhǎng)
主站蜘蛛池模板: 国产极品美女在线| 日韩123欧美字幕| 亚洲美女高潮久久久久久久| 99re这里只有国产中文精品国产精品 | 亚洲国产第一区二区香蕉| 国产在线第二页| 色婷婷亚洲十月十月色天| 九月婷婷亚洲综合在线| 99这里只有精品在线| 色综合天天娱乐综合网| 免费人成在线观看视频色| 国产精品爆乳99久久| 精品国产美女福到在线不卡f| 久久99精品久久久大学生| 免费jjzz在在线播放国产| 毛片国产精品完整版| 9cao视频精品| 欧美翘臀一区二区三区| av无码一区二区三区在线| 精品福利国产| 国产国产人免费视频成18 | 国产流白浆视频| 黄色一及毛片| P尤物久久99国产综合精品| 精品久久久久无码| 色悠久久久| 亚洲第一成年网| 97青草最新免费精品视频| 婷婷久久综合九色综合88| 免费在线色| 国产精品成人AⅤ在线一二三四| 亚洲成A人V欧美综合天堂| 欧洲高清无码在线| 国产精品人莉莉成在线播放| 亚洲精品自拍区在线观看| 中文字幕免费视频| 国产靠逼视频| 国产日韩欧美精品区性色| 精品国产成人高清在线| 午夜啪啪福利| 亚洲第一在线播放| 国产办公室秘书无码精品| 成色7777精品在线| 精品成人免费自拍视频| 亚洲三级a| 福利片91| 性网站在线观看| 54pao国产成人免费视频| www.91中文字幕| 精品国产www| 免费无码又爽又黄又刺激网站| 人人澡人人爽欧美一区| 天堂成人在线视频| 五月丁香伊人啪啪手机免费观看| 欧美在线网| 91精品日韩人妻无码久久| 88国产经典欧美一区二区三区| 91精品国产91久无码网站| 国产综合精品一区二区| 欧美日韩导航| 永久成人无码激情视频免费| 欧美三级不卡在线观看视频| 国内精品免费| 国产在线观看一区二区三区| 国产第八页| 久久精品娱乐亚洲领先| 亚洲国产在一区二区三区| 亚洲欧美人成人让影院| 国产亚洲精| 五月综合色婷婷| 欧美中出一区二区| 亚洲中文久久精品无玛| 国产一级毛片高清完整视频版| 无码专区国产精品一区| 女高中生自慰污污网站| 人妻丰满熟妇αv无码| 精品成人一区二区三区电影 | 国产丝袜无码精品| 色亚洲成人| 91麻豆国产视频| 久久特级毛片| 国产亚洲欧美日韩在线一区|