TraveoII DMA 原子传输(Atomic Transfer)

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

您好,

我正在使用 Traveo CYT2B7,我想要使用 P-DMA 连续将 ADC 的 16-bit 采样结果传输到内存中,请问每 16-bit 的数据传输是否是原子传输?在 P-DMA 传输过程中,CPU 同时读取内存中目的地址的数据是否会出现错误数据(既不是新的数据也不是旧的数据的情况)?

0 点赞
1 解答
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi,

对于您的ADC 连续采样输入数据示例,错误取决于bus master的操作状态,如果总线被 P-DMA 占用,那么 CPU 可能会得到错误的采样值, 特别是transfer size设置为 8 位。
对于您的情况,您应该将 src 和 dst 的transfer size设置为 16 位,然后将在单次传输中执行 16 位并生成 DMA 完成中断。 同時也请diable CPU的缓存。

Alfred_Tsang_1-1658807231752.png

 

Alfred_Tsang_0-1658807088774.png

谢谢

在原帖中查看解决方案

0 点赞
4 回复数
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi,
如果您从 DMA 和 CPU access相同的内存位置, 那么就有可能得到不正确的值。
因此,建议通過trigger multiplexer等待 DMA Done的中断信号, 再从 CPU 读取内存位置。
(请参阅 AN220191 如何使用 DMA 第 3 节(P-DMA 用例)了解更多信息)
谢谢

0 点赞
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

您好,

请问您能详细说一下其中的原因吗?

是因为 P-DMA 的 16-bit 传输不具有原子性导致的吗?


下图是我的使用场景,ADC 连续采样,P-DMA 将采样结果依次放入内存中,如果不等待 P-DMA 传输完成标志,直接读取内存中的结果,能否读取到完整的采样结果,即读取到本周其或上一周期的传输结果是可以接受的,其他情况是不接受的。

adc-pdma.png

0 点赞
Alfred_Tsang
Moderator
Moderator
Moderator
50 replies posted 50 sign-ins 10 solutions authored

Hi,

对于您的ADC 连续采样输入数据示例,错误取决于bus master的操作状态,如果总线被 P-DMA 占用,那么 CPU 可能会得到错误的采样值, 特别是transfer size设置为 8 位。
对于您的情况,您应该将 src 和 dst 的transfer size设置为 16 位,然后将在单次传输中执行 16 位并生成 DMA 完成中断。 同時也请diable CPU的缓存。

Alfred_Tsang_1-1658807231752.png

 

Alfred_Tsang_0-1658807088774.png

谢谢

0 点赞
pengzw
Level 3
Level 3
25 replies posted 10 questions asked 50 sign-ins

好的,谢谢您!

0 点赞