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_configure( chan, // 要配置的通道 &c, // 我们刚刚创建的配置 dst, // 初始写地址 src, // 初始读地址 count_of(src), // 传输次数;本例中每次传输1字节 true // 立即启动 );
这是一个最简单的DMA写法
将数据从A复制到B
浙公网安备 33010602011771号