|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
使用DMA提高memcpy效率(For STR912) |
| 作者:seawwh 欄目:MCU技術(shù) |
使用DMA提高memcpy效率(For STR912) 在STR912中可以利用DMA功能來完成數(shù)據(jù)的拷貝memcpy,根據(jù)測試大約完成一次數(shù)據(jù)傳送需要45ns, 當(dāng)使用8位數(shù)據(jù)寬度來傳送數(shù)據(jù)時,每秒約22M Bytes,當(dāng)使用16位數(shù)據(jù)寬度來傳送數(shù)據(jù)時,每秒約44M Bytes, 當(dāng)使用32位數(shù)據(jù)寬度來傳送數(shù)據(jù)時,每秒約88M Bytes,可以大大提高數(shù)據(jù)的傳送效率. 注意:本函數(shù)需要使用一個DMA通道, 每次傳送的數(shù)據(jù)塊的不大于 4k Bytes,本程序時按字節(jié)傳送的, 同樣道理可以寫出按16/32位傳送的函數(shù); 使用前應(yīng)該對DMA初始化. #define DMA_Mem DMA_Channel0 #define DMA_Mem_ENABLE DMA_Mem->CCNF |= 0x00000001 #define DMA_Mem_DISABLE DMA_Mem->CCNF &= ~0x00000001 #define DMA_Mem_ACTIVE (DMA_Mem->CCNF & 0x00020000) #define DMA_Mem_WaitEnd while (DMA_Mem_ACTIVE) void DMA_Init_MemCopy() { DMA_InitTypeDef DMA_InitStruct; DMA_Cmd(ENABLE); DMA_StructInit(&DMA_InitStruct); DMA_InitStruct.DMA_Channel_LLstItm=0; DMA_InitStruct.DMA_Channel_SrcWidth = DMA_SrcWidth_Byte; // 8bits Transfer DMA_InitStruct.DMA_Channel_DesWidth = DMA_DesWidth_Byte; DMA_InitStruct.DMA_Channel_DesBstSize= DMA_DesBst_1Data; DMA_InitStruct.DMA_Channel_SrcBstSize= DMA_SrcBst_1Data; DMA_InitStruct.DMA_Channel_FlowCntrl = DMA_FlowCntrl0_DMA; DMA_ChannelSRCIncConfig (DMA_Mem, ENABLE); DMA_ChannelDESIncConfig (DMA_Mem, ENABLE); DMA_Init(DMA_Mem,&DMA_InitStruct); } void dma_memcpy(u8 *src, u8 *dst, u16 Count) { //45ns per Byte = 22 Mhz DMA_Mem_DISABLE; DMA_Mem->SRC=(u32)src; DMA_Mem->DES=(u32)dst; DMA_Mem->CC|=(Count & 0x0FFF); DMA_Mem_ENABLE; DMA_Mem_WaitEnd; } |
| 2樓: | >>參與討論 |
| 作者: greatbin 于 2007/1/12 16:25:00 發(fā)布:
這個要頂 建議加精 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |