在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 如何用C語言對DMA控制器編程?

            如何用C語言對DMA控制器編程?

            作者: 時間:2018-09-13 來源:網(wǎng)絡(luò) 收藏

            摘要:詳細(xì)地分析了PC/AT機系統(tǒng)的DMA(直接存儲器存取)結(jié)構(gòu)及其傳輸方式,并給出了編程實例。

            本文引用地址:http://www.biyoush.com/article/201809/389062.htm

            DMA是英文DiretMemorAccess的縮寫,即直接存儲器存取,DMA傳輸是PC機與外設(shè)

            高速數(shù)據(jù)交換的重要方法,其一個典型應(yīng)用是應(yīng)用于聲卡的錄放音過程中,錄音時,CPU首先設(shè)置好聲卡和DMA的傳輸參數(shù)。當(dāng)啟動DMA數(shù)據(jù)傳輸(即開始錄音)后,即由DMADMAC)按管PC總線進(jìn)行數(shù)據(jù)傳輸,每次傳輸結(jié)束后,DMA便歸還總線控制權(quán),并申請CPU中斷,告之?dāng)?shù)據(jù)傳輸完畢,然后由中斷服務(wù)程序?qū)MA數(shù)據(jù)緩沖區(qū)中數(shù)據(jù)取走并準(zhǔn)備下次數(shù)據(jù)傳輸(即錄音),由于在傳輸過程中無需CPU干沙,因此在錄音期間CPU可以執(zhí)行其它程序,這樣既極大地提高了數(shù)據(jù)傳輸速度又提高了CPU的執(zhí)行效率,正是由于DMA的這些優(yōu)點,所以目前在工業(yè)控制領(lǐng)域的數(shù)據(jù)采集過程中都大量地采用了DMA數(shù)據(jù)傳輸方法。但是,由于DMA編程的資料較少,因此DMA編程一直是硬件編程方面的一個難點,本文將以為例詳細(xì)介紹DMA編程方法。

            1、PC/AT的DMA系統(tǒng)特點

            PC/AT使用兩片8237A-5芯片組成級連結(jié)構(gòu),每片8237A-5芯片內(nèi)部有4個獨立的通道,分別以通道O-通道7表示。但由于通道4被用作第0片和第1片的級連,因此PC/AT系統(tǒng)-一共能提供7個通道的DMA數(shù)據(jù)傳輸,在這7個通道中,除通道2作為軟盤DMA傳輸服務(wù),通道0留給SDIC通信透配器外,其余通道0,1,3,5.6和7均留作擴充使用,在這7個DMA通道中,通道0~3按8位數(shù)據(jù)最大傳輸64KB設(shè)計;面通道5-7按16位數(shù)據(jù)最大傳輸64K字(128KB)設(shè)計,它們都支持尋址16MB空間的能力。

            2、DMA通道地址產(chǎn)生方式

            8237A-5只能管理16位地址(AI5-A0),但為了尋址PC/AT機的24位地址空間尋址,在DMA系統(tǒng)中將PCAT機的16M空間分為多個物理頁面,從面保證了在DMA周期內(nèi)只需16位地址尋址,因此DMA系統(tǒng)中為每個通道設(shè)置了一個DMA頁面寄存器,用以存放此物理頁面號。

            對于8位傳輸通道0~3,由于芯片的地址使用字節(jié)邊界,即A15-A0為16位長的字節(jié)地址,因此每頁64KB,而對于16位傳輸通道5-7,由于芯片的地址使用字邊界,即A16-AI(A0固定為0)為16位長的字地址,因此每頁可達(dá)128KB,計算地址偏移和計數(shù)個數(shù)時尤其應(yīng)該性意兩者區(qū)別,對于DOS管理下的1M常規(guī)內(nèi)存,頁面分布圖1所示:

            從DMA通道地址產(chǎn)生方式,我們可以看出DMA控制器僅能在-個物理頁面內(nèi)傳輸數(shù)據(jù),因此當(dāng)數(shù)據(jù)跨頁面存放時,我們必須分多次對其進(jìn)行數(shù)據(jù)傳輸,從面保證每次傳輸時數(shù)據(jù)都在同一頁面內(nèi)。


            3、DMAI/O地址

            DMA控制器(DMAC)共有16個端口地址和4個頁面寄存器地址,共分為兩大類:控制DMA狀態(tài)及設(shè)置數(shù)據(jù)地址。

            在設(shè)置DMA傳輸數(shù)據(jù)時,要用到3個端口,分別是:頁面寄存器,地址(偏移)寄存器和數(shù)據(jù)計數(shù)器,表1給出了每個通道及其相應(yīng)1/O口地址。


            在控制DMAC的狀態(tài)時,要用到另外3個端口,分別是:方式寄存器,屏蔽寄存器和清除寄存器。

            (1)方式寄存器(地址為0Bh或D6h,分別為8位通道和16位通道地址)

            此方式寄存器用于設(shè)置DMA的數(shù)據(jù)傳輸方式,其控制字格式如圖2所示。


            例如:我們經(jīng)常用到的兩個方式字為(假定選DMA通道1):

            45h:DMA寫(即內(nèi)存一1/0卡)

            49h:DMA讀(即1/0卡一內(nèi)存)

            (2)屏戴寄存器(地址為0Ah或D4h,分e為8位通道和16位通道地址)

            此屏蔽寄存器用于使某個DMA通道屏蔽或開放DMA請求,其控制字格式如圖3所示。


            (3)清除寄存器(地址為0Qh或D8h,分別為8位通道和16位通道地址)

            當(dāng)輸出0到此端口時,將停止由屏蔽寄存器(地址為0Ah或D4h)所選定的DMA通道所有正在進(jìn)行的過程。DMA編程

            4、DMA編程

            通常,對某個DMA通道編程的步驟如下:

            (1)保存原有中斷向量,設(shè)置新中斷向量,編寫中斷服務(wù)程序,其主要內(nèi)容為下一次DMA傳輸編程,輸出EO(中斷結(jié)束)至中斷控制器;或者是直接轉(zhuǎn)出(當(dāng)不需再次DMA傳輸時);

            (2)DMAC初始化,包括設(shè)置方式控制字,屏數(shù)控制字及本次傳輸數(shù)據(jù)的頁面號,,頁面地址偏移及傳輸數(shù)據(jù)個數(shù),必須特別注意的是DMAC的數(shù)據(jù)計數(shù)器比要傳輸?shù)膶嶋H個數(shù)要少1;

            (3)開放該通道允許DMA中斷請求;

            計數(shù)等,為考慮通用性,使用了目前普遍使用

            (4)在程序結(jié)束時恢復(fù)中斷向量。

            筆者已編制了一個對DMA進(jìn)行編控制的的TurboC2.0編程,程序也可以不加修改地使程序,此程序包括幾個有關(guān)DMAC編程的通用用于BorlandC++系統(tǒng)中,程序中假設(shè)I/0卡函數(shù),如DMAC控制塊參數(shù)的獲得,中斷向量產(chǎn)生的硬件中斷號是DREQ5,使用DMA通道及恢復(fù)設(shè)置,DMAC初始化,暫停DMA傳輸通道號1,讀者在應(yīng)用過程中應(yīng)根據(jù)實際I/O卡提繼續(xù)DMA傳輸,終止DMA傳輸,讀取已傳輸供的硬件中斷號及DMA通道號作相應(yīng)修改。



            關(guān)鍵詞: dma C語言 控制器

            評論


            相關(guān)推薦

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

            關(guān)閉