新聞中心

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

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

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

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

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

        本文引用地址:http://www.104case.com/article/151953.htm

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

        4.2 修改代碼
        嵌入式Linux在arch/arm/mach-s3c2410目錄下的dma.c文件中定義了一些與DMA操作相關(guān)的通用函數(shù),主要有:申請DMA通道函數(shù)s3c2410_re,quest_dma()、申請DMA中斷函數(shù)request_irq()、加入DMA隊(duì)列函數(shù)s3c2410_dma_queue_buffer()、進(jìn)行DMA操作函數(shù)process_dma()以及中斷處理程序dma_irq_handler()等。在進(jìn)行特定接口操作時(shí),必須對其進(jìn)行適當(dāng)?shù)男薷摹8鶕?jù)接口設(shè)置修改如下內(nèi)容:
        增加外部DMA操作的寄存器設(shè)置:
        #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));
        //設(shè)置DMA為單服務(wù)命令模式,8位數(shù)據(jù)總線、允許中斷且通過DREQ0硬件觸發(fā)DMA操作



        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 水城县| 阳信县| 兴和县| 大宁县| 曲麻莱县| 自贡市| 汶上县| 上虞市| 宜宾县| 巴彦淖尔市| 普兰店市| 竹山县| 县级市| 平遥县| 梅河口市| 永春县| 进贤县| 丽水市| 乌兰察布市| 贵州省| 郴州市| 黄浦区| 本溪市| 海晏县| 绍兴县| 保定市| 六枝特区| 广德县| 房山区| 金昌市| 福建省| 阿克苏市| 枣阳市| 巨鹿县| 南陵县| 察雅县| 铁岭县| 无棣县| 安陆市| 麻江县| 商南县|