a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > 基于ARM+FPGA的高速數據采集智能控制器設計

基于ARM+FPGA的高速數據采集智能控制器設計

作者: 時間:2014-07-11 來源:網絡 收藏

由上圖可知主要是配置靜態存儲控制器SMC_SETUP、SMC_PULSE、SMC_CYCLE、SMC_MODE四個參數。配置是通過函數static inline void at91_sys write(unsigned intreg_effset,unsigned long value)實現,詳細配置如下:

本文引用地址:http://www.j9360.com/article/249568.htm

at91_sys_write(AT91_SMC_SETUP(5),AT91_SMC_NWESETUP(0x02)|AT91_SMC_NCS_WRSETUP_(0x00)|AT91_SMC_NRDSETUP_(0x00)|AT91_SMC

_NCS_RDSETUP_(0X00));

at91_sys_write(AT91_SMC_PULSE(5),AT91_SMC_NWEPULSE_(0x06)|AT91_SMC_NCS_WRPULSE(0x0A)|AT91_SMC_NRDPULSE(0x0A)|AT91_SMC_ NCS_RDPULSE_(0x0A));

at91_sys_write(AT91_SMC_CYCLE(5),AT91_SMC_NWECYCLE_(0X0A)|AT91_SMC_NRDCYCLE_(0X0A));

at91_sys_write(AT91_SMC_MODE(5),AT91_SMC_READMODE|AT91_SMC_WRITEMODE|AT91_SMC_EXNWMODE_DISABLE|AT91_SMC_DBW_16|AT91_ SMC_TDF_(1));

申請I/O內存:

request_mem_region((unsigned long)sram_buf_1,SRAM_BUFSIZE,“fpga_arm”);

request_mem_region((unsigned long)sram_buf_2,SRAM_BUFSIZE,“fpga_arm”);

寄存器地址映射:

sram_buf_1=(unsigned char*)ioremap(0x60000000,SRAM_BUFSIZE);

sram_buf_2=(unsigned char*)ioremap(0x60004000,SRAM_BUFSIZE);

以上為字符設備驅動程序初始化最為關鍵的配置。剩下的是在file operation結構下編寫驅動函數,結構中的每個成員除了owner必須指向驅動中的函數。其中最為重要的內核態函數是staticssize_t fpga_arm_read(struct file*filp,char_user*buf,size_tsize,loff_ t*ppos),它對應應用層的函數read。驅動程序從讀取數據使用readw函數,完成從內存映射的I/O空間讀取16位數據。copy_to_user(buf, (void*)(read_mem),size)復制數據從內核空間到用戶空間。FPGA字符設備驅動程序基本實現了控制和管理FPGA讀取狀態信息和兩路ADC采集的數據。

3.2 協處理器FPGA控制程序

協處理器FPGA控制程序分為三個部分:控制ADC模塊、控制讀寫SRAM模塊和FPGA與總線通信模塊。其中FPGA與總線通信模塊位于頂層模塊,控制ADC模塊、控制讀寫SRAM模塊的是底層模塊。頂層模塊主要是例化底層模塊,然后進行數字信號綜合處理。

控制ADC模塊,控制并行ADC比較簡單,正常工作需要時鐘驅動ADC CLK,在編寫ADC采樣程序時最為關鍵的是注意在ADC CLK上升沿讀取采集的數據才是穩定可靠的。FPGA會對兩路ADC采集的數據進行多點求平均的預處理,主要是濾除50Hz的工頻干擾,然后寫入SRAM存儲。

控制讀寫SRAM模塊,FPGA寫SRAM與讀SRAM操作是非常相似的,SRAM型號是CY7C1021DV33,工作時片選信號CE要拉低。讀操作時注意OE信號先拉低再拉高,在其上升沿,讀取數據。寫操作時注意WE信號先拉低再拉高,在其上升沿,寫入數據。FPGA讀SRAM時需要關注sram_cs(片選)、sram_oe(讀控制)、sram_addr(地址線)和sram1_data(16bit數據線),將sram_cs、sram_oe同時拉低,同時給地址線sram_addr賦值,一個時鐘后數據端口sram_data的數據就有效了。

FPGA與通信模塊較為復雜,首先,是ARM向FPGA發控制命令。ARM寫FPGA內部寄存器時比較重要的信號有:NCS4(片選)、at9260_wr(寫信號)、at9260_addr(地址線)、at9260_data(數據線),當NCS4=0&&at9260_wr=0時,意味著ARM9260正在寫FPGA寄存器,具體寫哪個寄存器由地址信號at9260_addr決定,這樣可以將at9260_data寫入到相應地址處對應的寄存器。

其次,ARM讀FPGA內部狀態寄存器,與ARM寫FPGA寄存器是非常類似的,當NCS4=0 &&at9260_rd=0時,意味著ARM9260正在讀FPGA寄存器,這時我們將寄存器的值賦給at9260_data即可,at9260_data是雙向IO,在不讀時需要置為高阻態。

最后,ARM獲取兩片SRAM存儲的預處理后的數據,ARM的控制信號是NCS5、at9260_rd、at9260_addr、A14,FPGA將這些信號轉換為FPGA讀SRAM的信號,然后將FPGA讀到的數據傳給ARM,這里FPGA起到數據中轉的作用。

3.3 主處理器ARM應用程序

主處理器ARM的應用程序是整個軟件系統的控制核心。應用程序由兩個線程構成:main主線程和data_recv線程。main主線程主要是創建線程,向FPGA發送控制命令;data_recv線程接收FPGA狀態信息和FPGA預處理后ADC采集的數據。應用程序是通過文件描述符fd_fpga來控制和管理協處理器FPGA設備。因為在主處理器ARM移植了操作系統Linux,內核版本為Kernel 2.6.30,所以應用程序的開發是在Linux操作系統Ubuntul2.04 LTS版本下,使用開發軟件是Eclipse C/C++。設置Eclipse使用交叉編譯器arm-none-linux-gnueabi-gcc和Release配置生成二進制可執行文件。然后可以通過Tftp服務下載到目標板上。

4 結束語

本文論述了基于ARM+FPGA體系架構的高速實時數據采集智能控制器的設計與實現。其結合ARM和FPGA兩者的優勢,具有更好的運算處理性能,豐富的外圍標準接口。系統采樣率達10MSPS,滿足高速實時性的要求。具有很高的應用價值。

linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

fpga相關文章:fpga是什么


linux相關文章:linux教程


鎖相環相關文章:鎖相環原理

上一頁 1 2 下一頁

關鍵詞: ARM FPGA 數據采集

評論


相關推薦

技術專區

關閉