关于PDM接口的数据出现问题

⚠️
嗨,...感谢您来论坛。令人兴奋的消息!我们现在正在迁至我们的新论坛平台,将提供更好的功能,并包含在主对话框网站中。所有帖子和帐户都已迁移。我们现在只接受新论坛上的流量 - 请发布任何新线程https://www.dialog-seminile.com/support.。我们将在未来几天修复错误/优化搜索和标记。
4个帖子/ 0新
最后一篇
海地
离线
最后一次露面:10个月前1年
加入:2018-06-29 01:59
关于PDM接口的数据出现问题

你好,
我一直在驾驶员驾驶员长期以来,但我仍然无法获得正确的PDM输出数据。我修改了项目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。在ISR服务功能中启用了SRC_IN中断,我将PCM数据写为SRC1_IN2_REG。对于测试,我刚刚在每20个样本中写出最大Vaule和最小值,如下所示:

uint32_t const pdm_reg_value [2] = {0x800000FF,0x7FFFFF00};
uint32_t pdm_out_select = 0;
void pdm_src_in_interrupt_cb_test(pdm_src_isr_data_t * src_isr_data)
{

pdm_out_select ++;
if(pdm_out_select == 40)
pdm_out_select = 0;
*(uint32_t *)src1_in2_reg = pdm_reg_value [pdm_out_select / 20];
......
}

并且我的浪潮如附件所示。编写最大值,我应该得到一个所有值PDM数据,写入最小值,我应该得到一个零值PDM数据。
通过示波器获得的数据表明:PDM数据不会立即颠倒。我不知道为什么。这是正确的吗?

附件:
设备:
PM_DIALOG.
离线
最后一次露面:2天1小时前
职员
加入:2018-02-08 11:03
嗨海泰,

嗨海泰,

如果我记得正确,您最近创建了一个类似的论坛主题,有关如何将数据数据到PDM数据。请注意,没有任何可用的例子,您应该在RCU参考应用程序代码中进行一些修改。如果您遵循上一篇文章中描述的所有程序,请您能告诉我吗?为方便起见,我将复制粘贴程序:

必须将PCM数据存储到SRC1_IN1_REG和SRC1_IN2_REG,具体取决于立体声模式。仅限右声道,必须写入src1_in2_reg。这可以通过使用ARM M0或通过DMA来完成。

因此,确实需要pdm_config.direction的更改,但不足以产生所需的输出。

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

由于PDM输出是预期的,并且提供了PCM编码的数据位于系统内存(请确认这是您的应用程序中的确实如此),只有DMA的“奇数”通道(1,3)应该被激活,从内存写入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_AMODE])。这意味着还必须在SRC1_IN_FS_REG中相应地设置SRC输入接口频率的采样率(另请参见表52)。

为了获取有关音频单元的更多信息,我非常建议您看看DA14585数据表的第24部分音频单元(AU),检查66:音频单元块图也非常有帮助。

但是,我会再次检查您的问题,我会尽快回复您。

谢谢,PM_DIALOG.

海地
离线
最后一次露面:10个月前1年
加入: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.
离线
最后一次露面:2天1小时前
职员
加入:2018-02-08 11:03
嗨海泰,

嗨海泰,

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

谢谢,PM_DIALOG.