嵌入式課程設(shè)計-DMA傳送編程_第1頁
嵌入式課程設(shè)計-DMA傳送編程_第2頁
嵌入式課程設(shè)計-DMA傳送編程_第3頁
嵌入式課程設(shè)計-DMA傳送編程_第4頁
嵌入式課程設(shè)計-DMA傳送編程_第5頁
免費預(yù)覽已結(jié)束,剩余15頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

嵌入式課程設(shè)計 ---DMA傳送編程嵌入式課程設(shè)計系別 :計算機與通信工程學(xué)院班級 :通信工程 08-1班姓名 :####學(xué)號 :33333333333鄭州輕工業(yè)學(xué)院計算機與通信工程學(xué)院2011年12月鄭州輕工業(yè)學(xué)院課程設(shè)計任務(wù)書題目DMA傳送編程專業(yè)、班級 通信工程 08-1學(xué)號3333333姓名333主要內(nèi)容、基本要求、主要參考文獻等 :1、主要內(nèi)容(1)編寫單字節(jié)方式、雙字節(jié)方式和四字節(jié)方式常規(guī)內(nèi)存拷貝及時間檢測程序(2)編寫DMAT式內(nèi)存拷貝及時間檢測程序(3)比較DMAT式內(nèi)存拷貝及常規(guī)內(nèi)存拷貝的效率2、基本要求(1)掌握S3c44B0DM檢制器的使用(2)掌握DM徽件編程方法3、主要參考文獻[11馬忠梅,馬廣云,徐英惠,田澤.ARM嵌入式處理器結(jié)構(gòu)與應(yīng)用基礎(chǔ).北京:北京航天航空大學(xué)出版社, 2002【2】田澤 .嵌入式系統(tǒng)開發(fā)與應(yīng)用實驗教程 .北京航空航天大學(xué)出版社, 2004[3]周立功.ARM微控制器基礎(chǔ)與實戰(zhàn)[M].北京航天航空大學(xué)出版社,2003完成期限:指導(dǎo)教師簽名 :張濤張彥課程負責人簽名 :張濤張彥2-目錄TOC\o"1-5"\h\z一、課程設(shè)計的基本任務(wù) 4二、課程設(shè)計的基本要求 4三、預(yù)備知識 4 四、實驗設(shè)備 4 五、基礎(chǔ)知識 4 六、課程設(shè)計說明書 7七、程序代碼 83-DMA傳送編程.一、課程設(shè)計的基本任務(wù)了解DMA專送原理掌握S3c44B0DMAfe制器的使用掌握DM儆件編程方法二、課程設(shè)計的基本要求編寫單字節(jié)方式、雙字節(jié)方式和四字節(jié)方式常規(guī)內(nèi)存拷貝及時間檢測程序編寫DMAT式內(nèi)存拷貝及時間檢測程序比較DMAT式內(nèi)存拷貝及常規(guī)內(nèi)存拷貝的效率三、預(yù)備知識了解ADT集成開發(fā)環(huán)境的基本功能了解DMA勺原理以及處理步驟四、實驗設(shè)備JX44B0教學(xué)實驗箱ADT1000?真器和ADTIDE集成開發(fā)環(huán)境串口連接線五、基礎(chǔ)知識直接數(shù)據(jù)存儲 -DMADMAJ式當高速外設(shè)要與系統(tǒng)內(nèi)存或者要在系統(tǒng)內(nèi)存的不同區(qū)域之間,進行大量數(shù)據(jù)的快速傳送時,查詢方式和中斷方式可能不能滿足要求直接存儲器存取(DMA就是為解決這個問題提出的采用DMAJ式,在一定時間段內(nèi),由DMA空制器取代CPU獲得總線控制權(quán),來實現(xiàn)內(nèi)存與外設(shè)或者內(nèi)存的不同區(qū)域之間大量數(shù)據(jù)的快速傳送典型的DMA空制器(以下

簡稱DMAC)J工作電路簡稱DMAC)J工作電路-4-DM徽據(jù)傳送的工作過程1)DMAC發(fā)出DMAt送請求2)DMAC2)DMAC通過連接到CPU勺HOLD言號向CPl>出DMA請求3)CPU3)CPU在完成當前總線操作后會立即對DMA青求做出響應(yīng)CPU(勺響應(yīng)包括兩個方面:CPU等控制總線、數(shù)據(jù)總線和地址總線浮空,即放棄對這些總線的控制權(quán)CPU等有效的HLDA言號力口至ijDMACt,以通知DMACCPU已經(jīng)放棄了總線的控制權(quán)CPU將總線浮空,即放棄了總線控制權(quán)后,由DMACI管系統(tǒng)總線的控制權(quán),并向外設(shè)送出DMA勺應(yīng)答信號DMAC送出地址信號和控制信號,實現(xiàn)外設(shè)與內(nèi)存或內(nèi)存之間大量數(shù)據(jù)的快速傳送DMAC等規(guī)定的數(shù)據(jù)字節(jié)傳送完之后,通過向CP3HOLD言號,撤消對CPU的DMA青求。CPU攵到此信號,一方面使HLDA6效,另一方面又重新開始控制總線,實現(xiàn)正常取指令、分析指令、執(zhí)行指令的操作。DM聯(lián)送方式I/O接口到存儲器存儲器到 I/O接口存儲器到存儲器I/O接口到存儲器的傳送當進行由I/O接口到存儲器的數(shù)據(jù)傳送時,來自I/O接口的數(shù)據(jù)利用DMACf出的控制信號,將數(shù)據(jù)輸送到系統(tǒng)數(shù)據(jù)總線D0~D7±,同時,DMAC1出存儲器單元地址及控制信號,將存在于D0~D7±的數(shù)據(jù)寫入所選中的存儲單元中。這樣就完成了由I/O接口到存儲器一個字節(jié)的傳送。同時DMAO改內(nèi)部地址及字節(jié)數(shù)寄存器的內(nèi)容。存儲器到 I/O接口與前一種情況類似,在進行這種傳送時, DMACS出存儲器地址及控制信號,將選中的存儲單元的內(nèi)容讀出放在數(shù)據(jù)總線D0~D7±,接著,DMACf出控制信號,將數(shù)據(jù)寫到規(guī)定的(預(yù)選中)端口中去,而后MDA?動修改內(nèi)部的地址及字節(jié)數(shù)寄存器的內(nèi)容S3c44B0勺DM饋制器-5-S3c44B廓成了4個通道的DM饋制器:,兩個ZDM饋制器ZDMA0/1可以用于存儲器到存儲器、儲存器到 I/O設(shè)備、I/O設(shè)備之間的 DMA傳送;,兩個BDM舲制器BDMA0/1用于儲存器與I/O設(shè)備之間的傳輸。S3c44B(fr與DM饋制器有關(guān)的寄存器ZDMA0/1空制寄存器ZDMA起始地址、目的地址寄存器DMA+數(shù)器寄存器ZDMA0/1空制寄存器ZDMA起始地址、目的地址寄存器-6-DMA+數(shù)器寄存器六、課程設(shè)計說明書本實驗通過DMAT式實現(xiàn)存儲器到存儲器間的數(shù)據(jù)傳送,并將其與常規(guī)的內(nèi)存拷貝操作進行比較拷貝動作的計時處理采用定時器進行計時處理,采用函數(shù) Timer_Start啟動計時處理,參數(shù)divider表示定時時間間隔,0:16us1:32us2:64us3:128us操作完成時調(diào)用Timer_Stop停止定時器計數(shù),其返回值為計數(shù)值,該值乘以時間問隔(128us)即為計時時間Timer_Start(3);/*128us*/time=Timer_Stop();/* 停止定時器*/Uart_Printf("CopyBytes:time=%f\n",time*128E-6);常規(guī)的內(nèi)存拷貝操作字節(jié)拷貝"(unsignedchar*)(dstAddr)="(unsignedchar*)(srcAddr);雙字節(jié)拷貝(unsignedshort*)(dstAddr)=*(unsignedshort*)(srcAddr);字節(jié)拷貝7-(unsignedint*)(dstAddr)=*(unsignedint*)(srcAddr);DMA勺內(nèi)存拷貝操作清除傳輸完畢標志zdma0Done=0;設(shè)置DMA專輸?shù)钠鹬沟刂泛烷L度rZDISRC0=srcAddr|(dw<<30)|(1<<28);/*dw為DMAt輸寬度*/rZDIDES0=dstAddr|(2<<30)|(1<<28);rZDICNT0=length|(2<<28)|(1<<26)|(3<<22)|(1<<20);啟動DMA專輸并開始計時rZDCON0=0x1;Timer_Start(3);DMA勺內(nèi)存拷貝操作等待傳輸完成,傳輸完成標記將在DM/fr斷服務(wù)程序中置位while(zdma0Done==0);返回當前定時計數(shù)器中的值time=Timer_Stop();Uart_Printf("ZDMA0:time=%f\n",time*128E-6);關(guān)中斷rINTMSK=BIT_GLOBAL;DM沖斷處理函數(shù)voidisr_dma0(void){rI_ISPC=BIT_ZDMA0;/*設(shè)置傳輸完畢標志 */zdma0Done=1;}實驗報告要求什么叫DMA專送方式?試說明DMA&式傳送數(shù)據(jù)的主要步驟。試比較DMA專輸、查詢式傳輸及中斷方式傳輸之間的優(yōu)缺點和適用場合 ?七、程序代碼 :/**************************************************************/8-/**//*FILENAMEVERSION*//**//*DMA.C1.0*//**//*DESCRIPTION*//**//*JX44B0(S3C44B0X)DMA實驗*//**//**//*DATASTRUCTURES*//**//*FUNCTIONS:*//* 在JX44B0教學(xué)實驗箱進行DMAT式內(nèi)存拷貝的實驗*//**//*DEPENDENCIES*//*JX44B0-1*//*JX44B0-2*//*JX44B0-3*//**//**//*NAME:*//*REMARKS:*//**//*Copyright(C)2003WuhanCVTECHCO.,LTD*//**************************************************************//**************************************************************//*學(xué)習(xí)ARMftt理器中DMAJ式的處理方法:*//*DMA方式:內(nèi)存,內(nèi)存DMA方式傳輸數(shù)據(jù)*//*注意:學(xué)習(xí)該實驗之前請先學(xué)習(xí) interrupt中斷處理實驗 *//**************************************************************//*包含文件 */#include"44b.h"#include"44blib.h"#include"rtc.h"typedef(*ISR_ROUTINE_ENTRY)(void);#definePrintfUartPrintf/*functions*/voidZdma0(intsrcAddr,intdstAddr,intlength);voidZdma0Done(void);voidTest_Zdma0(void);voidisr_dma0(void);/*globals*/volatileintzdma0Done;voidIsrIRQ()__attribute__((interrupt("IRQ")));/**************************************************************///Functionname:IsrIRQ//Description: 非矢量方式下中斷的查表處理//中斷地址表位于 0x0c7fff00開始的256字節(jié)//Returntype:void//Argument:void**************************************************************/voidIsrIRQ(){intcount=0;unsignedintisr_pending;unsignedintisr_mask=0x00000001;unsignedintisr_mask_set=rINTMSK;ISR_ROUTINE_ENTRYisr_routine_entry=(ISR_ROUTINE_ENTRY)0x0;__asm__("STMFDSP!,{r1,r4-r8}@SAVEr1,r4-r10\n""nop\n");isr_pending=(rINTPND&~isr_mask_set);10-while(isr_mask){if(isr_pending&isr_mask){isr_routine_entry=(ISR_ROUTINE_ENTRY)(*(int*)(HandleADC+count));break;}count+=4;isr_mask<<=1;

if(isr_routine_entry)(*isr_routine_entry)();__asm__("LDMFDSP!,{r1,r4-r8}@RESTOREr1,r4-r10\n""nop\n");/**************************************************************///Functionname:init_interrupt_handler//Description:式下中斷向量表初始化處理//Returntype:void//Argument:irq_handler//中斷處理函數(shù)入口**************************************************************/voidinit_interrupt_handler(unsignedintirq_handler){inti;rINTPND=0x00000000;/*清除所有未決的中斷 */rI_ISPC=0x03FFFFFF;for(i=0;i<256;i+=4)/* 清除中斷表 */{11-(unsignedint*)(_ISR_STARTADDRESS+i)=0;}非矢量方設(shè)置IRQ模式處理函數(shù)*(unsignedint*)(HandleIRQ)=irq_handler;非矢量方設(shè)置IRQ模式處理函數(shù)/**************************************************************///Functionname:install_isr_handler//Description: 非矢量方式下中斷向量的安裝//Returntype:void//Argument:irq_no,中斷號//irq_routine,中斷處理函數(shù)地址**************************************************************/voidinstall_isr_handler(intirq_no,void*irq_routine){*(unsignedint*)(irq_no)=(unsignedint)irq_routine;}/**************************************************************///Functionname:Main//Description:DMA測試程序主函數(shù)//內(nèi)存,內(nèi)存DMA方式傳輸數(shù)據(jù)//傳輸完畢引發(fā)DM/fr斷//注冊中斷源 :BIT_ZDMA0//Returntype:int//Argument:void**************************************************************/intMain(void){Uart_Select(0);Uart_Init(MCLK,115200);Uart_Printf("DMATESTPROGRAM\n");rINTCON=0x7;/*Non-vect,IRQdisable,FIQdisable*/init_interrupt_handler((unsignedint)IsrIRQ);-12-install_isr_handler(HandleZDMA0,(void*)isr_dma0);rINTMOD=0x0;/*設(shè)置所有中斷為IRQ模式*/rINTMSK=(0x07ffffff&~(BIT_GLOBAL|BIT_ZDMA0));/*使能TICK中斷*/rINTCON=0x5;/*打開IRQ模式的中斷*/Test_Zdma0();while(1);/*************************************************************///Functionname:TestZdma0//Description:testzdma0//Returntype:void//Argument:void**************************************************************/voidTest_Zdma0(void)unsignedchar*src,*dst;inti;unsignedintmemSum;Uart_Printf("[ZDMA0MEM2MEMTest]\n");dst=(unsignedchar*)malloc(0x80000);src=(unsignedchar*)malloc(0x80000);/*將dst區(qū)域設(shè)置為非 Cacheable區(qū)域,關(guān)閉 Cache*/rNCACHBE1=(((((unsigned)dst+0x100000)>>12)+1)<<16)|((unsigned)dst>>12);Uart_Printf("dst=%x,src=%x\n",(int)dst,(int)src);-13-Zdma0((int)src,(int)dst,0x80000);free(src);free(dst);}/*************************************************************///Functionname:Zdma0//Description: 以三種不同的方式進行數(shù)據(jù)拷貝,檢查其時間消耗//Returntype:void//Argument:srcAddr,拷貝數(shù)據(jù)的起始地址//dstAddr,拷貝數(shù)據(jù)的目的地址//length,拷貝數(shù)據(jù)的長度**************************************************************/voidZdma0(intsrcAddr,intdstAddr,intlength){inttime;/*將目標地址設(shè)置為非Cache區(qū)*/rNCACHBE1=(((((unsigned)dstAddr+0x100000)>>12)+1)<<16)|((unsigned)dstAddr>>12);/*測試單字節(jié)方式的拷貝時間 *//*啟動定時器,精度128us,用于計時*/Timer_Start(3);for(time=0;time<length;time++){*(unsignedchar*)(dstAddr+time)=*(unsignedchar*)(srcAddr+time);}TOC\o"1-5"\h\z/*返回當前定時計數(shù)器中的值 */time=Timer_Stop();/*輸出拷貝的時間 */Uart_Printf("CopyBytes:time=%f\n",time*128E-6);14-/*測試雙字節(jié)方式的拷貝時間 */Timer_Start(3);for(time=0;time<length;time+=2){(unsignedshort*)(dstAddr+time)=*(unsignedshort*)(srcAddr+time);}time=Timer_Stop();Uart_Printf("Copyshortwords:time=%f\n",time*128E

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論