新聞中心

S3C2440-DMA

作者: 時(shí)間:2016-12-02 來(lái)源:網(wǎng)絡(luò) 收藏
S3c2440A 支持位于系統(tǒng)總線和外設(shè)總線之間的4 個(gè)通道的控制器。每個(gè)DMA 控制器通道
無(wú)限制地執(zhí)行系統(tǒng)總線上的設(shè)備或外設(shè)總線上的設(shè)備之間數(shù)據(jù)搬移。換句話說(shuō),就是每個(gè)
通道都操作一下四種情況:
(1)源和目的設(shè)備都在系統(tǒng)總線上
(2)源設(shè)備在系統(tǒng)總線上,目的設(shè)備在外設(shè)總線上
(3)源設(shè)備在外設(shè)總線上,目的設(shè)備在系統(tǒng)總線上
(4)源設(shè)備和目的設(shè)備都在外設(shè)總線上
DMA 的主要有點(diǎn)就是其傳輸數(shù)據(jù)不需要CPU 的干涉。DMA 操作可由軟件或來(lái)自內(nèi)設(shè)或外
部請(qǐng)求引腳來(lái)初始化。
DMA每次傳送2個(gè)字節(jié),放到FIFO中,IIS就播放,F(xiàn)IFO空,導(dǎo)致DMA被再次觸發(fā),直到傳輸計(jì)數(shù)器為0,產(chǎn)生DMA中斷,CPU進(jìn)入中斷處理程序。在DMA傳送的時(shí)候,CPU可以處理其他事情。提高了系統(tǒng)效率。
下面的程序使用IIS播放聲音同時(shí)跑流水燈。如果不用DMA,直接用上一篇的IIS程序,會(huì)發(fā)現(xiàn)聲音斷斷續(xù)續(xù),因?yàn)镮IS和流水燈一起分CPU的時(shí)間。如果使用DMA,則IIS需要的數(shù)據(jù)由DMA負(fù)責(zé)傳送,而CPU可以執(zhí)行流水燈程序,互相不耽誤。當(dāng)傳輸計(jì)數(shù)器為0時(shí),產(chǎn)生DMA中斷,CPU進(jìn)入中斷處理程序。其他時(shí)候,CPU可以執(zhí)行流水燈。這樣就實(shí)現(xiàn)了流水燈和IIS放音同時(shí)執(zhí)行。
#include "2440addr.h"
#include "music.h"
#define L3MODE 1<<2
#define L3DATA 1<<3
#define L3CLOCK 1<<4
#define _ISR_STARTADDRESS 0x33ffff00
#define U32 unsigned int
U32 flag, result, remain;
void Delay(){
int i, j, k;
for(i = 0; i < 0xff; i++)
for(j = 0; j < 0xff; j++)
for(k = 0; k < 0xff; k++)
;
}
void Led(){
int i;
for(i = 3; i < 7; i++){
rGPFDAT &= "(1<<i);
Delay();
rGPFDAT = 0xff;
}
}
void WriteL3(unsigned char data, unsigned int mode){
//mode = 0,地址模式;mode = 1,數(shù)據(jù)傳輸模式
int i, k;
if(mode == 0){
rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK )|L3CLOCK;
}
else{
rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);
}
for(k = 0; k < 5; k++)
;
for(i = 0; i < 8; i++){
if(data & 0x1){
rGPBDAT &= "L3CLOCK;
rGPBDAT |= L3DATA;
for(k = 0; k < 5; k++)
;
rGPBDAT |= L3CLOCK;
rGPBDAT |= L3DATA;
for(k = 0; k < 5; k++)
;
}
else{
rGPBDAT &= "L3CLOCK;
rGPBDAT &= "L3DATA;
for(k = 0; k < 5; k++)
;
rGPBDAT |= L3CLOCK;
rGPBDAT &= "L3DATA;
for(k = 0; k < 5; k++)
;
}
data >>= 1;
}
rGPBDAT = rGPBDAT & "(L3MODE|L3DATA|L3CLOCK)|(L3CLOCK|L3MODE);
}
上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: S3C2440DMA控制

評(píng)論


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

關(guān)閉