<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

DMA數據傳輸(源代碼分享)

電子工程師 ? 來源:網絡整理 ? 作者:工程師3 ? 2018-04-27 09:22 ? 次閱讀

手頭項目也需要加入DMA數據傳輸,以最大限度地提升CPU效率,于是測試了一下XMEGA的DMA模塊,把一塊內存中的數據DMA傳輸到另外一塊內存,DMA傳輸完成后,在中斷函數中顯示“DMAFinished”,提示DMA成功完成數據傳輸,另外DMA使用更多的情況是大量數據到USART、SPI等,本文只是小試牛刀。

效果如下,

源代碼:

#define DMA_BUFFER_SIZE 1024

#define DMA_CHANNEL 0

uint8_t source[DMA_BUFFER_SIZE],destination[DMA_BUFFER_SIZE];

static void fill_pattern(uint8_t *buffer, size_t len)

{

int i;

for (i = 0; i 《 len; i++) {

buffer = 42 ^ (i & 0xff) ^ (i 》》 8);

}

}

static bool verify_pattern(uint8_t *buffer, size_t len)

{

for (size_t i = 0; i 《 len; i++) {

if (buffer != (42 ^ (i & 0xff) ^ (i 》》 8))) {

return false;

}

}

return true;

}

void dma_test(void)

{

struct dma_channel_config config;

fill_pattern(source, DMA_BUFFER_SIZE);

memset(destination, 0, DMA_BUFFER_SIZE);

dma_enable();

memset(&config, 0, sizeof(config));

/*

* This example will configure a DMA channel with the following

* settings:

* - Low interrupt priority

* - 1 byte burst length

* - DMA_BUFFER_SIZE bytes for each transfer

* - Reload source and destination address at end of each transfer

* - Increment source and destination address during transfer

* - Source address is set to ef source

* - Destination address is set to ef destination

*/

dma_channel_set_interrupt_level(&config, DMA_INT_LVL_LO);

dma_channel_set_burst_length(&config, DMA_CH_BURSTLEN_1BYTE_gc);

dma_channel_set_transfer_count(&config, DMA_BUFFER_SIZE);

dma_channel_set_src_reload_mode(&config,

DMA_CH_SRCRELOAD_TRANSACTION_gc);

dma_channel_set_dest_reload_mode(&config,

DMA_CH_DESTRELOAD_TRANSACTION_gc);

dma_channel_set_src_dir_mode(&config, DMA_CH_SRCDIR_INC_gc);

dma_channel_set_dest_dir_mode(&config, DMA_CH_DESTDIR_INC_gc);

dma_channel_set_source_address(&config, (uint16_t)(uintptr_t)source);

dma_channel_set_destination_address(&config,

(uint16_t)(uintptr_t)destination);

dma_channel_write_config(DMA_CHANNEL, &config);

/* Use the configuration above by enabling the DMA channel in use. */

dma_channel_enable(DMA_CHANNEL);

/*

* Enable interrupts as the example is now configured to handle them

* properly.

*/

cpu_irq_enable();

/*

* Trigger a manual start since there is no trigger sources used in

* this example.

*/

dma_channel_trigger_block_transfer(DMA_CHANNEL);

pmic_init();

cpu_irq_enable();

while(1);

}

ISR(DMA_CH0_vect)

{

gfx_mono_draw_string(“DMA Finished”,0,0,&sysfont);

}

int main(void)

{

。。。

dma_test();

。。。

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10512

    瀏覽量

    207253
  • 數據傳輸
    +關注

    關注

    9

    文章

    1582

    瀏覽量

    63793
  • dma
    dma
    +關注

    關注

    3

    文章

    539

    瀏覽量

    99290
收藏 人收藏

    評論

    相關推薦

    基于labview的遠程數據傳輸

    跪求基于labview的遠程數據傳輸源代碼
    發表于 07-03 16:32

    Serial RapidIO接口DMA數據傳輸

    數據傳輸本人已經在多個基于DSP和PowerPC信號處理板上調試驗證了Serial RapidIO Endpoint Master DMA功能.1. Master DMA Write數據傳輸
    發表于 08-23 13:27

    DMA數據傳輸速率是多少?

    DMA數據傳輸速率是多少?由于DMA與CPU無關,所以CPU的速率可能不高。你知道DMAC的時鐘是什么嗎? 以上來自于百度翻譯 以下為原文What is the rate of data
    發表于 05-14 11:13

    請問怎樣去設計一種Ultra DMA數據傳輸系統?

    怎樣去設計Ultra DMA數據傳輸系統的硬件部分?怎樣去設計Ultra DMA數據傳輸系統的軟件部分?
    發表于 05-26 06:36

    怎樣去實現DMA數據傳輸的有效進行呢

    過程時不可能像PL端那樣能實現精準的時序控制,為了實現整個DMA數據傳輸的有效進行,需要明白數據傳輸的整個過程。以下面工程為例來對傳輸過程進行描述。如上圖所示主要是完成PS端
    發表于 01-07 06:22

    MPC5748G無法通過DMA傳輸數據傳輸到終端上的UART怎么解決?

    已經實現了以下代碼以在 MPC5748G 中使用 eDMA 通過 UART 通道傳輸數據。 但我無法通過 DMA傳輸
    發表于 05-05 06:16

    DMA進行數據傳輸和CPU進行數據傳輸的疑問

    求大佬解答,本人正在學習STM32單片機中DMA直接數據存儲部分的內容 看了DMA簡介后,也上手過實例代碼,但是沒有實際的項目經驗,所以有以下疑問:
    發表于 05-25 17:18

    數據傳輸速率是什么意思

    數據傳輸速率是什么意思 數據傳輸速率是通過信道每秒可傳輸的數字信息量的量度。數據傳輸速率也稱為吞吐率。數據傳輸速率由很
    發表于 03-18 14:45 ?4952次閱讀

    數據傳輸中的成幀

    什么是數據傳輸中的成幀 數據傳輸中的成幀 成幀技術是一種用來在一個比特流內分配或標記信道的技術,為電信提供選擇基本的時隙結構和管理方式、錯誤
    發表于 03-18 14:46 ?3685次閱讀

    datamover完成ZYNQ片內PS與PL間的數據傳輸

    到PL的數據傳輸相對簡單,使用vivado自帶的axi_datamover即可完成,詳細如下: A、向PL端查詢剩余數據存儲長度(以byte為單位); B、通過寫寄存器設置PL端DMA數據傳輸
    發表于 02-08 01:00 ?1538次閱讀
    datamover完成ZYNQ片內PS與PL間的<b class='flag-5'>數據傳輸</b>

    DMA數據傳輸在SPEAR300實現高速串口驅動設計

    DMA數據傳輸無需CPU的參與,是一種更加高效的數據傳輸方式?,F有的DMA數據傳輸方案都是基于DMA
    發表于 04-04 12:23 ?1477次閱讀
    <b class='flag-5'>DMA</b><b class='flag-5'>數據傳輸</b>在SPEAR300實現高速串口驅動設計

    STM32定時器觸發DMA數據傳輸失敗的原因如何解決

    有人使用STM32的定時器事件觸發DMA,讓其將內存數據傳輸到通信外設的數據寄存器進行發送,發現DMA根本就不動作。
    的頭像 發表于 11-25 09:21 ?2w次閱讀
    STM32定時器觸發<b class='flag-5'>DMA</b><b class='flag-5'>數據傳輸</b>失敗的原因如何解決

    STM32CubeMX-串口開啟DMA進行數據傳輸

    STM32CubeMX筆記-串口開啟DMA進行數據傳輸
    發表于 12-27 18:40 ?7次下載
    STM32CubeMX-串口開啟<b class='flag-5'>DMA</b>進行<b class='flag-5'>數據傳輸</b>

    淺析AXI DMA收發數據傳輸過程

    MAIP的M_AXI_MM2S接口接收到數據完成后通過mm2s_introut接口輸出高電平告訴PS端DMA接收數據傳輸完成,PS端開始執行發送中斷程序。
    發表于 10-11 15:16 ?2025次閱讀

    SPI數據傳輸有哪些方式

    SPI 數據傳輸可以有兩種方式:同步方式和異步方式。 同步方式:數據傳輸的發起者必須等待本次傳輸的結束,期間不能做其它事情,用代碼來解釋就是,調用
    的頭像 發表于 07-25 10:54 ?3653次閱讀
    SPI<b class='flag-5'>數據傳輸</b>有哪些方式
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>