<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

第7課:DMA

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

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

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

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

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

狀態(tài)3這個(gè)時(shí)候分為2個(gè)有限狀態(tài)機,子機用來(lái)作數據傳輸,從源地址取數據,再寫(xiě)到目標地址。而主機負責計數,以及計數到0的中斷等。。。

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

以下來(lái)介紹在傳輸中的3種基本分類(lèi)。

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

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

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

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

第3類(lèi) 請求式和握手式 demand and shake

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

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

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

而從速度上來(lái)講,連續服務(wù)的確比單服務(wù)快一點(diǎn)。

簡(jiǎn)單說(shuō)下需要設置的寄存器。

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

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

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

第6,7個(gè)是看源地址和目標地址在現在的數值。

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

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

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

寫(xiě)一個(gè)程序 利用分別利用DMA傳輸1M數據,另外一個(gè)正??截?,利用定時(shí)器PWM來(lái)計時(shí) 并輸出到UART串口中?;旧铣酥袛?,前2次用到的設備這次都利用到了。

#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次數
{
rTCFG0 = 0x63;
rTCFG1 = 0x1;
rTCNTB0 = 0xFFFF;
rTCON = 0xa;
rTCON = 0x9;
}

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

void uart_write(char *data)
{
while (*data != 国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放

<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>