在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            第7課:DMA

            作者: 時間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
            A用來連接外部設(shè)備和內(nèi)部設(shè)備之間的數(shù)據(jù)傳輸。有了它就可以繞開CPU,直接進(jìn)行數(shù)據(jù)傳輸。但同時A的傳輸也會用到數(shù)據(jù)總線。所以它的使用也是有利有弊的。

            A利用了有限狀態(tài)機來分析。它分成3個狀態(tài)。

            本文引用地址:http://www.biyoush.com/article/201611/316800.htm

            狀態(tài)1等待REQ,一切狀態(tài)為0

            狀態(tài)2這個狀態(tài)已經(jīng)接受到了REQ,這個時候把CNT中的值導(dǎo)入到DMA中的CURR—TC中,然后ACK就變成了1

            狀態(tài)3這個時候分為2個有限狀態(tài)機,子機用來作數(shù)據(jù)傳輸,從源地址取數(shù)據(jù),再寫到目標(biāo)地址。而主機負(fù)責(zé)計數(shù),以及計數(shù)到0的中斷等。。。

            其實 有限狀態(tài)機FSM這種分析方法簡單來說就是把過程的變化無視掉,轉(zhuǎn)而只看狀態(tài)穩(wěn)定后的結(jié)果。

            以下來介紹在傳輸中的3種基本分類。

            第一類 是 單元式 和 突發(fā)式 unit and brust

            unit 發(fā)送1個Byte,而brust發(fā)送4個。

            第2類 服務(wù)類 單一服務(wù) 和 連續(xù)服務(wù) single and whole

            單一服務(wù)本質(zhì)上來講就是做一個原子操作 必須再從狀態(tài)1到狀態(tài)3再走一遍,也就是說 需要等待REQ的這比有請求。而連續(xù)服務(wù)則在CURR_TC中的計數(shù)到0才停止。但是需要注意的一點:雖然是連續(xù)的,但是它也要短暫的釋放數(shù)據(jù)總線,來給“饑渴”的CPU控制。

            第3類 請求式和握手式 demand and shake

            請求式就是當(dāng)ACK結(jié)束整個一次傳輸后,恢復(fù)到0,發(fā)現(xiàn)REQ仍然是1的話,繼續(xù)進(jìn)行傳輸。

            而shake mode 指的是 ,ACK完成一次傳輸后,一定要等到REQ 變成0,來確認(rèn)才能繼續(xù)進(jìn)行。不然會一直等待。

            請求式單服務(wù),握手式單服務(wù),握手式全服務(wù),請求式全服務(wù)。一般如果是外設(shè)對外設(shè)的話,推薦使用請求全服務(wù)。

            而從速度上來講,連續(xù)服務(wù)的確比單服務(wù)快一點。

            簡單說下需要設(shè)置的寄存器。

            因為我們有4組DMA,每組要設(shè)置的寄存器是9個,所以總共算術(shù)36個。

            在9個中,前4個設(shè)置源地址,源地址的控制,目標(biāo)地址,目標(biāo)地址的控制等選項。

            第5個是DMA控制寄存器,它要可以設(shè)置DMA的模式等具體的內(nèi)容。

            第6,7個是看源地址和目標(biāo)地址在現(xiàn)在的數(shù)值。

            而第8個是看CT內(nèi)部計數(shù)器中,遞減到了幾。

            第9個是控制DMA啟動和停止的寄存器。例如在單一模式下,傳完一次 on/off位會自動置0,需要再次置1才能再次傳輸

            以下來進(jìn)行舉例:

            寫一個程序 利用分別利用DMA傳輸1M數(shù)據(jù),另外一個正??截悾枚〞r器PWM來計時 并輸出到UART串口中?;旧铣酥袛?,前2次用到的設(shè)備這次都利用到了。

            #include"s3c2440.h"
            #define UART_CLK 50000000
            #define UART_BAUD_RATE 115200
            #define UART_BRD (int)(UART_CLK/(UART_BAUD_RATE *16))-1

            int n=0; //定義外部變量

            void init_uart()
            {
            rGPHCON |=0xa0;
            rGPHUP = 0x0c;
            rULCON0 = 0x3;
            rUCON0 = 0x5;
            rUFCON0 = 0;
            rUMCON0 = 0;
            rUBRDIV0 = UART_BRD;
            }

            void init_timer0() //初始化pwm,0.5秒計65535次數(shù)
            {
            rTCFG0 = 0x63;
            rTCFG1 = 0x1;
            rTCNTB0 = 0xFFFF;
            rTCON = 0xa;
            rTCON = 0x9;
            }

            void init_irq()
            {
            rINTMOD = 0;
            rINTMSK = ~(1<<10);//計時到0進(jìn)入ISR,其中進(jìn)行計數(shù)的累加,和小燈亮暗處理,小燈亮暗 為了說明進(jìn)入了中斷
            }

            void uart_write(char *data)
            {
            while (*data !=