[APM32E0] DMA的NDATAT传输数值怎么理解?

[复制链接]
1020|38
fengm 发表于 2026-3-6 11:36 | 显示全部楼层
NDATAT寄存器的单位是什么?
saservice 发表于 2026-3-6 13:34 | 显示全部楼层

NDATAT乘以PERSIZE是否等于总传输字节数?
jtracy3 发表于 2026-3-6 18:13 | 显示全部楼层
DMA传输的总字节数由 NDTR初始值 × 数据宽度 决定。
qiufengsd 发表于 2026-3-7 19:47 | 显示全部楼层
实际传输的总字节数 = NDTR × Min(PERSIZE, MSIZE)
mattlincoln 发表于 2026-3-7 21:56 | 显示全部楼层
DMA 控制器每次触发,会从源地址搬运一个“数据单元”到目的地址。这个“数据单元”的大小由 外设数据宽度  和  内存数据宽度  决定。
10299823 发表于 2026-3-8 07:41 | 显示全部楼层
常用于判断进度或实现环形缓冲区。
zerorobert 发表于 2026-3-9 12:50 | 显示全部楼层
DMA控制器按照您设定的“事务”单元来工作。一个“事务”包含了一次数据传输动作。
guijial511 发表于 2026-3-9 13:01 来自手机 | 显示全部楼层
对于MCU而言,一定要用好DMA功能,能够达到事半功倍的效果。
louliana 发表于 2026-3-9 15:19 | 显示全部楼层
NDTR 数的是“趟数”,每趟搬多少由 SIZE 决定。
lihuami 发表于 2026-3-10 09:49 | 显示全部楼层
NDTR是DMA控制器中的关键寄存器,用于记录剩余待传输的数据项数量。
dspmana 发表于 2026-3-10 13:59 | 显示全部楼层
NDATAT 寄存器配置的是“传输的次数”,而不是“字节数”。
wilhelmina2 发表于 2026-3-10 17:53 | 显示全部楼层
总传输的数据量 = NDTR x PERSIZE
usysm 发表于 2026-3-11 20:58 | 显示全部楼层
NDATAT  在计数什么?              
葡萄又绿江南岸 发表于 2026-3-12 09:38 | 显示全部楼层
输数,每完成 1 次数据传输,该值自动减 1,直到变为 0 时传输结束。可通过读取该寄存器实时查看 DMA 传输进度,比如初始设 100,传输 50 个后 NDATAT 值为 50,值为 0 代表传输完成,是判断 DMA 传输状态的关键指标。
总结
NDATAT 表示 DMA剩余待传输数据个数,而非已传输数;
传输过程中 NDATAT 逐次减 1,初始值为总传输数;
该寄存器可实时查看传输进度,值为 0 代表传输完成。
暗夜幽灵骑士 发表于 2026-3-16 09:45 | 显示全部楼层
对的,NDATAT寄存器的值乘以PERSIZE(数据项的大小)就得到了总的字节数。
huangcunxiake 发表于 2026-4-22 14:18 | 显示全部楼层
NDATAT(常写作 NDTR)是 DMA 控制器中用于指定待传输数据单元总数的寄存器,核心是 “计数传输次数,而非字节数”。
xixi2017 发表于 2026-4-23 14:25 | 显示全部楼层
它记录的是「传输项数」,不是「总字节数」。
xinpian101 发表于 2026-4-24 19:56 | 显示全部楼层
NDATAT(常写作 NDTR)核心是传输次数(数据单元个数),不是字节数;总字节数 = NDATAT× 数据宽度(PERSIZE/MSIZE)。
地下縱情搖擺 发表于 2026-4-25 10:20 | 显示全部楼层
NDATAT寄存器的值乘以PERSIZE确实可以得出总的传输字节数。所以,如果你设置NDATAT为某个值,并且PERSIZE为8bit,那么总的传输字节数就是NDATAT乘以1;如果是32bit,就是NDATAT乘以4。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0