关于从PDM接口输出数据的问题

⚠️
大家好. .谢谢你来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台,它将提供更好的功能,包含在主对话网站中。所有岗位和账户都已迁移。我们现在只接受新论坛的流量-请在上面发布任何新帖子//www.wsdof.com/support.我们将在未来几天修复bug /优化搜索和标记。
4个职位/ 0个新
最后发表
海涛
离线
最后看到:1年10个月前
加入:2018-06-29 01:59
关于从PDM接口输出数据的问题

你好,
我已经在pdm out的驱动上工作了很长时间,但是我仍然不能得到正确的pdm out数据。我修改了项目DA14585_RCU_v_6.140.2.17,试图将一些pcm数据转换为pdm数据。我让SRC_IN工作在手动模式,SRC_OUT工作在自动模式。SRC_IN采样率设置为16Khz, SRC数据源为SRC_IN_REG。PDM_CLK设置为3.2Mhz, PDM_DATA方向为PDM_DIRECTION_OUT_LEFT。启用SRC_IN中断,在isr服务功能中,我写pcm数据到SRC1_IN2_REG。对于测试,我只是每20个样本交替编写最大值和最小值,如下图所示:

Uint32_t const pdm_reg_value[2] = {0x800000ff, 0x7fffff00};
pdm_out_select = 0;
空白pdm_src_in_interrupt_cb_test (pdm_src_isr_data_t * src_isr_data)

pdm_out_select + +;
如果(pdm_out_select = = 40)
pdm_out_select = 0;
*(uint32_t *)SRC1_IN2_REG = pdm_reg_value[pdm_out_select/20];
...
}

我得到了一个wave,如附件所示。写最大值,我应该得到一个所有一个值的pdm数据,写最小值,我应该得到一个所有零值的pdm数据。
示波器获得的数据表明:PDM数据没有立即反转。我不知道为什么。是正确的吗?

附件:
设备:
PM_Dialog
离线
最后看到:1天8小时前
工作人员
加入:2018-02-08 11:03
嗨Hailtao,

嗨Hailtao,

如果我没记错的话,您最近创建了一个关于如何将pcm数据转换为pdm数据的类似论坛帖子。请注意,没有任何类似的例子,你应该在RCU引用应用程序代码中做一些修改。你能让我知道你是否按照之前的职位描述的所有程序来做吗?为了您的方便,我将复制粘贴程序:

pcm数据必须存储到SRC1_IN1_REG和SRC1_IN2_REG中,这取决于是否打算使用立体声模式。对于正确的通道,必须写入SRC1_IN2_REG。这可以通过使用ARM M0或通过DMA来完成。

改变pdm_config。方向确实是需要的,但它还不足以产生预期的结果。

为了使用DMA,需要分配一个可用的通道对(0/1或2/3)来服务于SRC。对于立体声模式,两个通道对都必须分配给SRC,以便能够写入SRC1_IN1_REG(例如,使用通道1)和SRC1_IN2_REG(使用通道3)。

由于PDM输出是有意的,并且假设pcm编码的数据位于系统内存(请确认在您的应用程序中是否确实如此),只有“奇数”通道(1,3)的DMA应该被激活,以从内存写入SRC。

通过不向SRC1_IN1/2_REG写入任何内容,并且仅激活PDM输出模式,SRC将产生一个与预期不同的输出。

在该测试情况下,必须将SRC输出接口设置为在SRC1_CTRL_REG [SRC_OUT_AMODE]中的自动模式,在SRC中产生PDM输出时(另请参阅SRC手册和自动模式配置的DA14585数据表的表51,具体取决于使用案件)。

关于SRC输入接口,如果数据被DMA获取并写入SRC输入寄存器,可以将其设置为手动模式(参见SRC1_CTRL_REG[src_in_mode])。这意味着SRC输入接口频率的采样率也必须在SRC1_IN_FS_REG中相应地设置(参见表52)。

为了获得更多关于音频单元的信息,我强烈建议你看一看DA14585 datasheet的第24节音频单元(AU),它也会非常有帮助,检查图66:音频单元框图。

但是,我会再次检查你的问题,并尽快给你答复。

谢谢,PM_Dialog

海涛
离线
最后看到:1年10个月前
加入:2018-06-29 01:59
是的,我也问过类似的问题

是的,我以前问过类似的问题。当时你的建议对我非常有帮助,谢谢:)。现在PDM数据结果接近正确。此处提到的测试不使用DMA,但在SRC_IN中断服务中将PCM数据写入SRC1_IN2_REG。写入SRC1_IN2_REG的PCM数据无法立即获得正确的PDM输出。相反,我需要在几个连续的SRC_IN中断中重复编写相同的PCM数据,以逐渐获得正确的PDM输出。简而言之,我得到了正确的PDM结果,但没有立即。.这让我感到困惑。

PM_Dialog
离线
最后看到:1天8小时前
工作人员
加入:2018-02-08 11:03
嗨Hailtao,

嗨Hailtao,

让我检查一下您的问题,我会尽快给您回复。感谢您提供的信息。

谢谢,PM_Dialog