新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM系統(tǒng)中DMA方式在數(shù)據(jù)采集中的應用

ARM系統(tǒng)中DMA方式在數(shù)據(jù)采集中的應用

作者: 時間:2010-04-08 來源:網(wǎng)絡 收藏

這里主要介紹采集,F(xiàn)PGA內部的CCD驅動邏輯暫不介紹。FPGA與的接口邏輯電路如圖3所示。

FPGA內部采用異步FIFO解決CCD輸出頻率和S3C2410采集頻率不匹配的問題,寫時鐘由CCD輸出位同步信號提供,讀時鐘由S3C2410的時鐘輸出引腳CLKOUT0提供。CLKOUT0根據(jù)內部寄存器的設置可以輸出不同的時鐘頻率。FIFO輸出經(jīng)過以nGCS4為選通信號的BUFFER后接到的數(shù)據(jù)總線上。nGCS4是S3C2410存儲空間中BNAK4的片選信號,當S3C2410對地址范圍
0x20000000~0x28000000的存儲空間進行讀寫操作時,BANK4為低電平,其余時間均為高電平.用它作為BUFFER的選通信號能有效地避免數(shù)據(jù)總線的污染。
FIFO的寫請求信號由S3C2410與FIFO的滿狀態(tài)共同控制。當ARM發(fā)出START信號并且FIFO未滿時,寫請求信號為高電平。FIFO在寫時鐘的控制下寫入數(shù)據(jù)。當START信號撤銷或者FIFO滿時,寫請求信號變?yōu)榈碗娖?,停止寫操作?br /> FIFO的讀操作與ARM的操作配合進行。采用單服務命令模式的操作,每次傳輸一個字節(jié)數(shù)據(jù)位。當DREQ0信號變?yōu)榈碗娖綍rDMA操作開始,每次傳輸一個字節(jié)后產生一個DACK0應答信號,而且只要DREQ0為低電平DMA操作就繼續(xù)進行,直到DMA控制寄存器中的計數(shù)器為0.產生DMA中斷。根據(jù)上述時序特點,將FIFO的空信號作為DMA的請求信號DREQ0.當CCD輸出的數(shù)據(jù)寫入FIFO中時,空信號跳變?yōu)榈碗娖絾覦MA操作,同時以DACK0信號作為FIFO的讀請求。每一次DMA傳輸完成后應答信號使FIFO的讀指針移動一位,以實現(xiàn)數(shù)據(jù)的快速準確采集。

本文引用地址:http://www.butianyuan.cn/article/151953.htm

4 Linux下的驅動程序設計
采用ARM+嵌入式Linux的構架,Linux版本為2.4.18,采集必須和高效靈活的接口驅動程序相結合才能在操作系統(tǒng)下正常工作。
4.1 驅動程序的基本概念
設備驅動程序是操作系統(tǒng)內核和硬件之間的接口,它屬于內核一部分,主要功能如下:
(1)對設備初始化或釋放;
(2)把數(shù)據(jù)從內核傳送至硬件。從硬件讀取數(shù)據(jù):
(3)讀取程序傳送給設備的數(shù)據(jù),回送程序請求的數(shù)據(jù):
(4)監(jiān)測和處理設備出現(xiàn)的異常。
設備驅動程序為程序屏蔽了硬件的細節(jié),在應用程序中,硬件設備只是一個設備文件,可以像操作普通文件一樣對硬件設備進行操作。

4.2 修改代碼
嵌入式Linux在arch/arm/mach-s3c2410目錄下的dma.c文件中定義了一些與DMA操作相關的通用函數(shù),主要有:申請DMA通道函數(shù)s3c2410_re,quest_dma()、申請DMA中斷函數(shù)request_irq()、加入DMA隊列函數(shù)s3c2410_dma_queue_buffer()、進行DMA操作函數(shù)process_dma()以及中斷處理程序dma_irq_handler()等。在進行特定接口操作時,必須對其進行適當?shù)男薷?。根?jù)接口設置修改如下內容:
增加外部DMA操作的寄存器設置:
#define XDREQ0_CTL(DEMAND_MODE | SYNC_HCLK | INT_MODE |TSZ_UNIT
| SINGLE_SERVICE | HWSRC(CH0_nXDREQ0) | DMA_SRC_HW | CLR_ATRELOAD | DSZ(DSZ_BYTE)| TX_CNT(0));
//設置DMA為單服務命令模式,8位數(shù)據(jù)總線、允許中斷且通過DREQ0硬件觸發(fā)DMA操作



評論


相關推薦

技術專區(qū)

關閉