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è)和作者交流的人吧
主站蜘蛛池模板: 洛宁县| 双鸭山市| 贺兰县| 平湖市| 云梦县| 都匀市| 盐亭县| 砚山县| 北票市| 元江| 井研县| 固安县| 曲靖市| 从江县| 永吉县| 开鲁县| 尉氏县| 海城市| 抚州市| 金溪县| 巴马| 南川市| 定日县| 伊川县| 永川市| 随州市| 额济纳旗| 津南区| 濉溪县| 陆良县| 苍溪县| 分宜县| 巴青县| 抚州市| 南开区| 堆龙德庆县| 卓尼县| 芮城县| 湛江市| 西充县| 阳春市|