DMA服务于两个SRC通道吗

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
4个职位/ 0个新职位
最后发表
反光镜锁定
离线
最后看到:1年4个月前
加入:2017-02-14 04:30
DMA服务于两个SRC通道吗

我正在为DA14681/SDK1.0.8编写APU驱动程序代码,因为SDK1.0.8还没有准备好相关代码。
我的目标是将两个PMC/I2S通道:PCM1_IN1[31-8], PCM1_IN2[31-8]路由到两个SRC通道SRC_IN1,
SRC_IN2,然后通过SRC硬件输出到SRC的两个输出通道:SRC_OUT1_REG[]/SRC_OUT2_REG[],
然后将SRC输出通道SRC_OUT1_REG[]/SRC_OUT2_REG[]路由到DMA通道。
我阅读了DA14681 Datasheet Rev. 2.1(15-July-2016),有问题:
1) DMA是否支持两个SRC通道?

460页第95页
“20.1.1 I / O通道
SRC块将两个24位通道转换为
立体声一对或两个单声道。PCM线性
在SRC_IN上接收数据对,输出为
在SRC_OUT上左对齐2x24位,
SRC支持两个频道;从“图56:采样率转换器框图”,我们有两个通道寄存器:
Pcm_in1 [], pcm_in2 []/ src_in1_reg [], src_in2_reg []/ src_out1_reg, src_out2_reg

从460页74,“表29:DMA服务外设”,它说服务外设包括PCM RX/TX, SRC RX/TX,但它
没有明确地说两个PCM,SRC频道。

从460页426,“表756:DMA_REQ_MUX_REG (0x50003580)”,似乎只有一个DMA通道的SRC_TX,
所以我想知道如何将两个SRC通道提供到一个DMA通道,或者它一次只支持一个到一个DMA通道的SRC通道映射。

从代码“hw_dma.h”
typedef enum {
HW_DMA_TRIG_SPI_RXTX = 0 x0,
HW_DMA_TRIG_SPI2_RXTX = 0 x1,
HW_DMA_TRIG_UART_RXTX = 0 x2,
HW_DMA_TRIG_UART2_RXTX = 0 x3,
HW_DMA_TRIG_I2C_RXTX = 0 x4,
HW_DMA_TRIG_I2C2_RXTX = 0 x5,
HW_DMA_TRIG_USB_RXTX = 0 x6,
HW_DMA_TRIG_I2S_LEFTRIGHT = 0的混合体,
HW_DMA_TRIG_PDM_LEFTRIGHT = 0 x9,
HW_DMA_TRIG_FTDF_RXTX = 0 xa,
HW_DMA_TRIG_ECC_RXTX xb = 0,
xc HW_DMA_TRIG_ADC = 0,
HW_DMA_TRIG_NONE = 0 xf
} HW_DMA_TRIG;

I2S_LEFTRIGHT, PDM_LEFTRIGHT表示两个通道,但不知道如何将两个通道馈送到一个DMA通道,以及PDM是否表示
SRC吗?还是仅指PDM?

2)一个相关的问题,由于PCM和SRC有上述两个通道,
从第431页460,"表767:APU_MUX_REG (0x5000401C)",
位模式符号描述复位
6 R/W PDM1_MUX_IN PDM1输入mux
0 = SRC1_MUX_IN
1 = PDM输入

5:3 R/W PCM1_MUX_IN PCM1输入mux
0 =了
1 = SRC1输出
2 = PCM输出寄存器

2:0 R/W SRC1_MUX_IN SRC1输入mux
0 =了
1 = PCM输出
2 = SRC1输入寄存器
这张桌子让我很困惑,
1)比特2:0,设置为1路由PCM输出到SRC输入?
但是从460页的第95页,“图56:采样率转换器框图”,它说路由PCM_IN1/PCM_IN2到SRC_IN,

2)位5:3,设为1为路由到SRC1输出,设为2为路由到PCM输出寄存器,
同样,从460页的第95页,“图56:采样率转换器框图”,它说路由SRC_OUT1到SRC_OUT1_REG或PCM_OUT

如果我的描述也令人困惑,以其他方式,我想实现PCM_IN到USB的场景:
来自“表44:典型的SRC用例”fr第96页
叙述了。和
我如何配置APU_MUX_REG分别路由两个通道PCM_IN1_DATA——> SRC_OUT1_REG, PCM_IN2_DATA——> SRC_OUT2_REG ?

关键词:
设备:
MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 34
嗨,反光镜锁定

嗨,反光镜锁定

是的,SRC的DMA既支持渠道(它的一个模块,它支持2频道,这就是为什么在DMA数据表显示一个SRC部分),但由于没有实现从SDK没有适当的枚举,您必须指定两个SRC输出,SRC_OUT1和SRC_OUT2到一个不同的DMA通道,两个不同的通道,两个RX/TX对并且只使用RX。

关于第二个问题:

1)是的,位2:0设置为1将PCM输出的两个通道直接路由到SRC。

2) SRC输出可以直接路由到PCM,也可以通过SRC_OUT1_REG或SRC_OUT2_REG获得。

3)为了路由PCM的两个输出通道通过SRC到DMA的APU_MUX_REG,你应该配置比特2:0 SRC1_MUX_IN到1=PCM输出(这将配置PCM的输出作为SRC的输入)。

由于MT_dialog

反光镜锁定
离线
最后看到:1年4个月前
加入:2017-02-14 04:30


谢谢你的回复。确认DMA支持两个SRC通道是很好的。
有几件事可能需要进一步澄清:
1.你能不能再解释一下你的描述:“两个RX/TX对,只使用RX”
如果我设置DMA_REQ_MUX_REG (0x50003580)为0x09,那么它将路由SRC_OUT1_REG到DMA通道0,SRC_OUT2_REG到DMA通道1。(和tx没有关系),对吧?
2.关于第二个问题,我可能不理解正确:你描述的“PCM输出直接到SRC”是指SRC从PCM_DATA_IN引脚/gpio获得输入吗?
(在数据表中,图56表示PCM_IN1[31‐8],PCM_IN2[31‐8],但在表767:APU_MUX_REG (0x5000401C)中,它表示PCM输出,可能与PCM_DATA_OUT引针/gpio有关)

2'如果我设置APU_MUX_REG (0x5000401C)为0x09, (00001001b),我应该能够从PCM_DATA_IN引脚得到SRC输入,SRC输出到SRC_OUT1_REG/SRC_OUT2_REG,对吗?

谢谢,

陆打成一片

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 34
嗨,反光镜锁定

嗨,反光镜锁定

1.通过“两个Rx/Tx对和只使用Rx”,以下是指:

  1. 您需要对DMA_REQ_MUX_REG进行编程。DMA01_SEL设置为0x9 (SRC),并对DMA23_SEL执行同样的操作(假设您将选择通道对0/1,2/3)
  2. 然后,您将需要只打开“Rx”通道(通过设置DMAx_CTRL_REG的'DMA_ON'位域),这意味着通道0(对于0/1)和2(对于2/3),在分别编程了这些通道所需的寄存器之后。

对于通道0,起始地址将是SRC1_OUT1_REG的地址,对于通道2,起始地址将是SRC1_OUT2_REG的地址。通过这种方式,你将有两个通道0和2得到相同的SRC请求信号,因此你将能够跟踪立体声样本。你不需要两对(1/3)的“Tx”通道,所以你不应该打开它们(你甚至不需要编程他们各自的寄存器)。

2.为此,您只需将其中一个选定的gpio配置为PCM_DI模式(输入),并根据PCM配置,将传入的数据放入PCM1_IN1_REG和PCM1_IN2_REG中。这些应该通过编程APU_MUX_REG驱动到SRC输入多路复用器。SRC_IN_MUX到0x1(选择PCM输出)。

您不需要更改APU_MUX_REG。PCM1_MUX_IN,如果您只想获得SRC1_OUT1/2_REG输出样本并将它们存储到内存中。只有当您再次需要通过PCM将SRC输出样本输出到另一个GPIO时,才需要这样做。只有在这种情况下,才需要将APU_MUX_REG设置为0x9。如果您只是想将SRC输出示例存储到内存中,那么APU_MUX_REG应该设置为0x1。

由于MT_dialog