没志青年
发布于 2025-07-27 / 26 阅读
0

ESP32 通用DMA控制器

手册第3章,345

文档中好像没有。

GDMA

GDMA 用于在

  • 内部 RAM 与内部 RAM

  • 外部 RAM 与外部 RAM

  • 内部 RAM 与外部 RAM

  • 外设与内部 RAM

  • 外设与外部 RAM

之间直接传输数据,不需要 CPU 的任何操作,从而降低了 CPU 的工作负载,提高了系统的效率。。

GDMA 特性:

  • 数据传输以字节为单位,传输数据量可软件编程。

  • 能够访问的内部 RAM 最大地址空间为 480 KB

  • 能够访问的外部 RAM 最大地址空间为 32 MB

  • 通道间固定优先级及轮询仲裁

  • 支持链表

GDMA 结构:

ESP32-S3 GDMA 共有 10 个独立的通道,其中包括 5 个接收通道和 5 个发送通道。

这些通道被支持 GDMA 功能的外设共享。

每个通道都有三个缓冲区 Buffer:

GDMA 链表

软件可以通过挂载链表的方式来使用 GDMA 引擎,链表本身必须存储在内部 RAM 中

通过链表,可实现像 STM32 中的连续传输、循环传输,并且可实现非连续内存块的连续传输。

链表分为 outlinkn 与 inlinknn 表示通道号。

GDMA 从内部 RAM 获取链表,然后:

  • 根据 outlink 将 RAM 中的数据发送出去。

  • 根据 inlink 将接收的数据存入 RAM 中。

GDMA 优先级仲裁

GDMA 中断

中断

说明

GDMA_OUT_TOTAL_EOF_CHn_INT

对于发送通道n,当一个链表(可包含多个链表描述符)对应的所有数据都已发送完成时触发此中断。

GDMA_IN_DSCR_EMPTY_CHn_INT

对于接收通道n,当接收链表描述符指向的 buffer 大小小于待接收数据长度时触发此中断。

GDMA_OUT_DSCR_ERR_CHn_INT

对于发送通道n,当发送链表描述符里有错误时触发此中断。

GDMA_IN_DSCR_ERR_CHn_INT

对于接收通道n,当接收链表描述符里有错误时触发此中断。

GDMA_OUT_EOF_CHn_INT:对于发送通道 n,当发送描述符的 EOF 位为 1,并且该描述符对应的数据发

送完成时触发此中断。当 GDMA_OUT_EOF_MODE_CHn 为 0 时,该描述符对应的最后一个数据进入到

GDMA TX 通道时,该中断触发;当 GDMA_OUT_EOF_MODE_CHn 为 1 时,该描述符对应的最后一个数据

从 GDMA TX 通道取出时,该中断触发。

GDMA_OUT_DONE_CHn_INT

对于发送通道n,当一个发送链表描述符对应的数据发送完成时触发此中断。

GDMA_IN_ERR_EOF_CHn_INT

对于接收通道 n,当接收的描述符对应数据段中有错误发生时触发此中

断。(该中断只用于外设选择 UHCI0 (UART0/UART1) 时)。

GDMA_IN_SUC_EOF_CHn_INT

对于接收通道n,当一个接收链表描述符对应的数据接收完成,并且描

述符的 suc_eof 为 1 时触发此中断。

GDMA_IN_DONE_CHn_INT

对于接收通道n,当一个接收链表描述符对应的数据接收完成时触发此中断。

GDMA 配置

(1)时钟配置

(2)复位

(3)发送通道配置


(4)接收通道配置