树莓派Pico‌的pio的dma

main.c

c 复制代码
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/dma.h"

// 源数据缓冲区:将要被DMA复制的数据
const char src[] = "Hello, world! (from DMA)";
// 目标数据缓冲区:DMA复制数据的目的地(大小与源缓冲区一致)
char dst[count_of(src)];

int main() {
    // 初始化所有标准输入输出(用于串口打印)
    stdio_init_all();

    // 获取一个空闲的DMA通道,如果没有可用通道则触发panic(程序终止)
    int chan = dma_claim_unused_channel(true);

    // 配置DMA传输参数:
    // 1. 传输数据宽度为8位(1字节)
    // 2. 读取地址自增:每次传输后,读取指针自动指向源缓冲区下一个字节
    // 3. 写入地址自增:每次传输后,写入指针自动指向目标缓冲区下一个字节
    // 4. 不选择数据请求信号(DREQ),DMA将以最快速度进行传输

    // 获取通道默认配置
    dma_channel_config c = dma_channel_get_default_config(chan);
    // 设置传输数据大小为8位
    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通道
    dma_channel_configure(
            chan,          // 要配置的DMA通道
            &c,            // 上面创建的配置参数
            dst,           // 初始写入地址(目标缓冲区起始位置)
            src,           // 初始读取地址(源缓冲区起始位置)
            count_of(src), // 传输次数:等于源数据的字节数(每次传输1字节)
            true           // 是否立即启动传输:是
    );

    // 可选操作:在DMA传输期间,CPU可以去执行其他任务
    // 本示例中CPU无其他工作,因此阻塞等待DMA传输完成
    dma_channel_wait_for_finish_blocking(chan);

    // DMA已完成数据复制:将源缓冲区(src)的数据复制到了目标缓冲区(dst)
    // 从目标缓冲区读取数据并打印
    puts(dst);
}

CMakeLists.txt

bash 复制代码
cmake_minimum_required(VERSION 3.13)

include(pico_sdk_import.cmake)

project(pio_squarewave C CXX ASM)
pico_sdk_init()

add_executable(pio_squarewave
        main.c
)

pico_generate_pio_header(pio_squarewave ${CMAKE_CURRENT_LIST_DIR}/uart_rx.pio)

target_link_libraries(pio_squarewave  pico_multicore hardware_dma   pico_stdlib hardware_pio)

pico_add_extra_outputs(pio_squarewave)
相关推荐
BBNbQKHXygfU3 天前
基于遗传算法优化BP神经网络的时间序列预测探索
mcu
想放学的刺客3 天前
单片机嵌入式试题(第30期)全局变量“满天飞“!!!局限性和影响有哪些,什么情况下才不得不使用?
单片机·嵌入式硬件·mcu·物联网·51单片机
网易独家音乐人Mike Zhou3 天前
【RealMCU】瑞昱官方LOG信息保存及解析,DebugAnalyzer自动化接收脚本(不需要用到ROM.trace文件)
单片机·mcu·物联网·自动化·嵌入式·iot·瑞昱
郝亚军6 天前
获取libiec61850和如何编译iec61850库
mcu·tcp/ip
liu_endong6 天前
杰发科技AC7840——打印所有GPIO的PORT配置寄存器
mcu·算法·杰发科技·autochips·车规芯片
想放学的刺客6 天前
单片机嵌入式系统试题(第28期)flash芯片各引脚作用?低功耗设计估算电池续航时间是多少?如何优化低功耗等项目经验
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机
MickyCode8 天前
嵌入式开发调试之Traceback
arm开发·stm32·单片机·mcu
wotaifuzao9 天前
【Keil 5安装】keil 5最新版本安装+环境配置+下载百度资源分享(安装包,注册机等)
stm32·单片机·嵌入式硬件·mcu·学习·keil5·最新keil
帅次9 天前
系统分析师-信息物理系统分析与设计
stm32·单片机·嵌入式硬件·mcu·物联网·iot·rtdbs
MounRiver_Studio9 天前
RISC-V IDE MRS2进阶分享(三):MRS语言服务器
ide·mcu·risc-v·嵌入式开发