91视频免费?看_蜜芽MY188精品TV在线观看_国产免费无遮挡在线观看视频_深夜国产_亚洲精品欧洲精品_欧美黑人粗暴多交

嵌入式 Rust 使用 DMA

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

DMA 控制器包括處理 DMA 請(qǐng)求的仲裁器,用于處理各個(gè) DMA 請(qǐng)求的優(yōu)先級(jí)。

DMA框圖

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

示例

存儲(chǔ)器與存儲(chǔ)器: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)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場(chǎng)。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請(qǐng)聯(lián)系:editor@netbroad.com
覺(jué)得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 1
收藏 2
關(guān)注 14
成為作者 賺取收益
全部留言
0/200
成為第一個(gè)和作者交流的人吧
主站蜘蛛池模板: 太谷县| 精河县| 常州市| 通城县| 济源市| 申扎县| 厦门市| 玛纳斯县| 佛坪县| 翁源县| 桦川县| 正定县| 西藏| 永平县| 文登市| 东乡县| 巩义市| 夏河县| 水富县| 米易县| 司法| 高要市| 蓬溪县| 东乡族自治县| 淅川县| 聂拉木县| 鱼台县| 嘉峪关市| 龙陵县| 万年县| 抚远县| 错那县| 江华| 柳江县| 福州市| 安塞县| 宣汉县| 保山市| 西吉县| 武山县| 温宿县|