硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1188|回复: 4
收起左侧

[DSP] 请问856x在DMAMUX的驱动方式下如何实现双通道的同步更新

[复制链接]

1

主题

2

回帖

5

积分

新手上路

积分
5
发表于 2024-10-29 14:04:52 | 显示全部楼层 |阅读模式
如题,采用硬汉老师V7开发板教程中74章DAC856x驱动的SPI+DMA的方式驱动时,因为TIM12触发的是DMAMUX事件,这种模式下DMA传输完成中断也将不触发,因此无法判断LDAC的拉低时机,无法通过异步模式同步更新两个通道的输出,所以请问是否有其他的办法实现,或者是否有双通道的12位DAC一次可以传输两个通道的值利用同步更新的方式实现双通道的同步更新。谢谢大家!
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-10-29 14:59:24 | 显示全部楼层
当前实现的这个SPI DMA更新两个通道做不到严格同步。使用非DMA方式可以。更新速度不高的时候使用非DMA方式吧,手动控制LDAC引脚。

高速同步DMA更新可以考虑搞个骚操作,每个点都交叉更新两个通道,这样接近于同步更新,再接近些,错开一个点,这样就严格同步了。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2024-10-29 15:11:01 | 显示全部楼层
eric2013 发表于 2024-10-29 14:59
当前实现的这个SPI DMA更新两个通道做不到严格同步。使用非DMA方式可以。更新速度不高的时候使用非DMA方式 ...

就是要速度快,且还有其他的任务所以想用DMA的方式,您说的这个技巧我暂时还没明白,等我再好好理解研究下,谢谢硬汉老师的点拨。
不过我倒是想到了一个另外的操作:打开TIM12的同时打开一个定时器中断,中断频率是TIM12的一半,优先级低于TIM12,这样这个定时器中断进来的时候MUX应该已经发送完两个通道的值了,这时拉低LDAC更新实现两个通道的同步更新是否可行?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2024-10-30 11:44:34 | 显示全部楼层
Yunpeng 发表于 2024-10-29 15:11
就是要速度快,且还有其他的任务所以想用DMA的方式,您说的这个技巧我暂时还没明白,等我再好好理解研究 ...

可以试试。

我的那个思路是,我们的程序里面不是有个双通道的输出,DMA缓冲先填充的通道1,然后填充的通道2数据。将其修改为,通道1填充1个数据,通道2填充1个数据,交叉填充,这样也许可行。
回复

使用道具 举报

1

主题

2

回帖

5

积分

新手上路

积分
5
 楼主| 发表于 2024-11-26 09:44:34 | 显示全部楼层
eric2013 发表于 2024-10-30 11:44
可以试试。

我的那个思路是,我们的程序里面不是有个双通道的输出,DMA缓冲先填充的通道1,然后填充的 ...

好的非常感谢,有空我试试,到时候给您反馈
这段时间别的项目突然插入,耽搁了回复,非常抱歉
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 23:33 , Processed in 0.235271 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表