RP2040 PICOSDK食用指南——DMA1

// 数据将从src复制到dst
const char src[] = "Hello, world! (from DMA)";
char dst[count_of(src)];

int main() {
    stdio_init_all();

    // 获取一个空闲通道,如果没有则触发panic()
    int chan = dma_claim_unused_channel(true);

    // 8位数据传输。读写地址在每次传输后都会递增
    // (分别指向src或dst中的下一个位置)。
    // 未选择DREQ,因此DMA会以最快速度传输。
    dma_channel_config c = dma_channel_get_default_config(chan);
    channel_config_set_transfer_data_size(&c, DMA_SIZE_8);
    channel_config_set_read_increment(&c, true);
    channel_config_set_write_increment(&c, true);

    dma_channel_configure(
        chan,          // 要配置的通道
        &c,            // 我们刚刚创建的配置
        dst,           // 目标
        src,           // 源头
        count_of(src), // 传输次数;本例中每次传输1字节
        true           // 立即启动
    );

    // 我们可以选择在DMA工作时去做其他事情。
    // 本例中处理器无事可做,所以只需等待DMA完成。
    dma_channel_wait_for_finish_blocking(chan);

    // DMA现已将文本从发送缓冲区(src)复制到接收缓冲区(dst),
    // 因此我们可以从dst打印内容。
    puts(dst);
}

顺序大概就是

获取空闲通道

先获取一个默认设置

dma_channel_get_default_config(chan) 是 RP2040 微控制器 Pico SDK 中的函数,用于获取指定 DMA 通道的默认配置参数。这个函数会返回一个预填充的配置结构体,其中包含了一组适合大多数场景的初始值,这样开发者就不必手动设置每一个配置选项。
dma_channel_get_default_config(chan)

然后设置传输数据大小

设置读写自增还是降序

然后写一个通道配置结构体

dma_channel_configure(
        chan,          // 要配置的通道
        &c,            // 我们刚刚创建的配置
        dst,           // 初始写地址
        src,           // 初始读地址
        count_of(src), // 传输次数;本例中每次传输1字节
        true           // 立即启动
    );
dma_channel_configure

这是一个最简单的DMA写法

 

将数据从A复制到B

 

posted @ 2025-07-06 22:44  mcwhirr  阅读(29)  评论(0)    收藏  举报