我正在为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数据表Rev.2.1(2016年7月15日)阅读,并在这里有疑问:
1)DMA是否支持SRC频道?
从460的第95页,
“20.1.1 I / O通道
SRC块将两个24位通道转换为
立体声对或两个单声道。PCM线性
在SRC_IN上接收数据对,输出为
2x24位在src_out左对齐“,
它说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通道,或者它一次只支持一个SRC通道映射到一个DMA通道。
从代码“hw_dma.h”
typedef enum {
HW_DMA_TRIG_SPI_RXTX = 0 x0,
hw_dma_trig_spi2_rxtx = 0x1,
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 = 0x6,
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 = 0xb,
hw_dma_trig_adc = 0xc,
hw_dma_trig_none = 0xf.
hw_dma_trig;
I2S_LEFTRIGHT, PDM_LEFTRIGHT表示两个通道,但是不知道如何将两个通道提供给一个DMA通道,并且PDM表示这两个通道
SRC吗?还是只意味着PDM?
2)相关问题,由于PCM和SRC有如上所述的两个通道,
从460的第431页,“表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 Page 96
叙述了。和
如何配置APU_MUX_REG将通道PCM_IN1_DATA - > SRC_OUT1_REG,PCM_IN2_DATA - > SRC_OUT2_REG分开?
嗨,反光镜锁定
是的,SRC的DMA既支持渠道(它的一个模块,它支持2频道,这就是为什么在DMA数据表显示一个SRC部分),但由于没有实现从SDK没有适当的枚举,您必须指定两个SRC输出,SRC_OUT1和SRC_OUT2到DMA的一个不同的通道,两个不同的通道,两个RX/TX对并且只使用RX。
关于第二个问题:
1)是,设置为1的位2:0将直接将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
嗨
谢谢你的回应。可以确认DMA支持SRC频道。
有几件事可能需要进一步澄清:
1.你能在你的描述中解释一下:“两个rx / tx对并仅使用rx”
如果我将DMA_REQ_MUX_REG(0x50003580)设置为0x09,则它将将SRC_OUT1_REG向DMA通道0路由到DMA通道0,以及SRC_OUT2_REG到DMA通道1.(没有任何相关的“TX”),对右?
2.关于第二个问题,我可能理解不正确:你所说的“PCM output directly to SRC”是指SRC从PCM_DATA_IN引脚/gpio获得输入吗?
(在数据表中,图56表示PCM_IN1 [31-8],PCM_IN2 [31-8],但在表767:APU_MUX_REG(0x5000401C)中,它表示PCM输出,可以与PCM_DATA_OUT PIN / GPIO相关)
2'如果我设置APU_MUX_REG (0x5000401C)为0x09, (00001001b),我应该能够获得SRC输入从PCM_DATA_IN引脚和SRC输出到SRC_OUT1_REG/SRC_OUT2_REG,对吗?
谢谢,
陆打成一片
嗨,反光镜锁定
1.通过“两个RX / TX对并仅使用RX”,以下是:
对于通道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_in_mux来驱动到src输入mux到0x1(选择PCM输出)。
如果您只想获取SRC1_OUT1 / 2_REG输出样本并将其存储到内存,则无需更改APU_MUX_REG.PCM1_MUX_IN。如果您再次需要将SRC输出样本再次输出到另一个GPIO,则只需要将SRC输出样本输出。仅在这种情况下,您需要将APU_MUX_REG设置为0x9。如果您只想将SRC输出样本存储到内存中,APU_MUX_REG应只是设置为0x1。
由于MT_dialog