S3C2440-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);
關(guān)鍵詞:
S3C2440DMA控制
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論