久久久国产精品视频袁燕,99re久久精品国产,亚洲欧美日韩国产综合v,天天躁夜夜躁狠狠久久,激情五月婷婷激情五月婷婷

Rust嵌入式
認(rèn)證:普通會員
作者動態(tài)
5分鐘入門Rust基礎(chǔ)
1天前
分享幾個優(yōu)雅的C/C++宏
5天前
Esp32 Rust環(huán)境搭建
1星期前
VSCode安裝 PlatformIO 插件指南
1星期前
Rust是如何避開C開發(fā)中的隱形坑?
2星期前
工程師都在看

嵌入式 Rust 使用 DMA

直接存儲器存取(DMA)用來提供在外設(shè)和存儲器之間或者存儲器和存儲器之間的高速數(shù)據(jù)傳輸。無須 CPU干預(yù),數(shù)據(jù)可以通過 DMA 快速地移動,節(jié)省了 CPU 的資源,進(jìn)行其他操作。DMA 控制器有 3 條 DMA 通道,每條通道負(fù)責(zé)管理來自 1 個或者多個外設(shè)對存儲器訪問的請求。

DMA 控制器包括處理 DMA 請求的仲裁器,用于處理各個 DMA 請求的優(yōu)先級。

DMA框圖

PY32F030 的DMA 內(nèi)部有3個獨立的通道,可用于外設(shè)與存儲器或存儲器與存儲器之間的高速數(shù)據(jù)傳輸,可配置各通道的優(yōu)先級。

示例

存儲器與存儲器:examples/dma_mem2mem.rs

#![no_std]
#![no_main]

use defmt::Debug2Format;
use hal::dma::{AnyDma, Burst, Priorities, RepeatMode};
use py32f030_hal::{selfas hal, dma::Config, mode::Blocking};

use {defmt_rtt as _, panic_probe as _};

#[cortex_m_rt::entry]
fn main() -> ! {
    let p = hal::init(Default::default());
    defmt::info!("embassy_dma_mem2mem example!");

    letmut src: [u32; 4] = [1, 2, 3, 4];
    letmut dst: [u32; 4] = [0; 4];

    letmut dma: AnyDma<_, Blocking> = AnyDma::new(p.DMA);

    let [mut channel1, _, _] = dma.split();
    channel1.config(Config::new_mem2mem(
        src.as_mut_ptr() asu32,
        true,
        dst.as_mut_ptr() asu32,
        true,
        Priorities::Low,
        RepeatMode::OneTime(src.len() asu16),
        Burst::World,
    ));

    channel1.start();

    let rst = channel1.wait_complet();

    defmt::info!("rst: {:?}", Debug2Format(&rst));
    defmt::info!("src: {} ", src);
    defmt::info!("dst: {} ", dst);

    loop {
        cortex_m::asm::wfe();
    }
}
聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關(guān)注 19
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧