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

[复制链接]
656|9
 楼主| 水之呢喃 发表于 2025-7-30 20:34 | 显示全部楼层 |阅读模式
DMA的NDATAT传输数值怎么理解?
DMA的配置过程中需要PERSIZE和MSIZE,我在串口通讯时使用8bit类型,在SPI传输时使用32bit类型。然后应该配置一下NDATAT寄存器,设置传输的个数。
这里,我有一个问题,这个NDATAT寄存器的个数是字节数,还是传输的次数,即传输的字节数为 NDATAT x PERSIZE的结果?

DKENNY 发表于 2025-7-31 09:25 | 显示全部楼层
NDATA(APM32的 DMA_NDATA 寄存器)是传输次数,表示DMA要传输多少个“数据单元”。

- 每个“数据单元”的大小由 PERSIZE(外设数据宽度)决定:
  - 串口:PERSIZE = 8位(1字节),NDT = 100,传输100次 = 100字节。
  - SPI:PERSIZE = 32位(4字节),NDT = 100,传输100次 = 100 × 4 = 400字节。

可以说,NDATA不是字节数,是传输次数。字节数 = NDT × PERSIZE的字节数。
梦塑者 发表于 2025-7-31 14:39 | 显示全部楼层
DKENNY 发表于 2025-7-31 09:25
NDATA(APM32的 DMA_NDATA 寄存器)是传输次数,表示DMA要传输多少个“数据单元”。

- 每个“数据单元”的 ...

我也是这么理解的。
从设计的角度上讲,我只是发送次数,至于位宽是多少,要看你自己设置的MSIZE来定了
穷得响叮当侠 发表于 2025-8-3 11:54 | 显示全部楼层
NDATAT寄存器确实是用来设置DMA传输的数据量的。在串口通讯时,如果使用8bit类型,那么NDATAT的值就是传输的字节数。在SPI传输时,如果使用32bit类型,NDATAT的值就是传输的32bit数据的数量。
CloudKiss 发表于 2025-8-4 19:06 | 显示全部楼层
是传输次数。
这个也可以做一个简单的测试实验来验证。
当然,最好的逻辑分析仪来显示结果
 楼主| 水之呢喃 发表于 2025-8-27 19:44 | 显示全部楼层
DKENNY 发表于 2025-7-31 09:25
NDATA(APM32的 DMA_NDATA 寄存器)是传输次数,表示DMA要传输多少个“数据单元”。

- 每个“数据单元”的 ...

谢谢。
后来通过试验也验证了这个事情
VelvetNight 发表于 2025-10-7 17:37 | 显示全部楼层
就是执行多少次呗
 楼主| 水之呢喃 发表于 2025-10-21 19:29 | 显示全部楼层
VelvetNight 发表于 2025-10-7 17:37
就是执行多少次呗

是的
谢谢回复与关注
逆鳞风暴 发表于 2025-11-11 18:46 | 显示全部楼层
是的,NDATAT寄存器的值乘以PERSIZE(数据项的大小)就得到了总的传输字节数
玛尼玛尼哄 发表于 2025-11-18 20:30 | 显示全部楼层
DMA 的 NDATAT 传输数值核心是指定单次 DMA 传输的总数据量,直接决定传输的字节数或数据单元总数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

26

帖子

0

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