This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,@ Tony Tang
新开一个帖子。感谢你的答复,之前在 www.deyisupport.com/.../104471.aspx
我的目标就是实现 7.1声道,即4个AXR同时输出数据。
我的程序原来是 I2S_SLOTS=2 ,一个AXR引脚输出立体声,是成功的。
现在修改: 使能4个AXR引脚,XTDM = 0x000000FF; DMA aCnt*4。
问题:
1、 修改后AXR没有输出,请问配置是有问题吗?
2、能否给出配置实现7.1声道的思路或参考文档。
我把程序附件加上,期待您的回答。
/****************************************************************************/ /* */ /* McASP ��ʼ�� */ /* */ /* 2015��07��13�� */ /* */ /****************************************************************************/ #include "TL6748.h" // ���� DSP6748 ������������� #include "edma_event.h" #include "interrupt.h" #include "soc_OMAPL138.h" #include "hw_syscfg0_OMAPL138.h" #include "codecif.h" #include "mcasp.h" #include "edma.h" #include "psc.h" #include "uartStdio.h" #include "dspcache.h" #include "aic3106_init.h" #include "mcasp_init.h" /****************************************************************************/ /* */ /* �궨�� */ /* */ /****************************************************************************/ // McASP ����ͨ�� #define MCASP_XSER_RX (0u) // McASP ����ͨ�� #define MCASP_XSER_TX (2u) #define MCASP_XSER_TX2 (3u) #define MCASP_XSER_TX3 (4u) #define MCASP_XSER_TX4 (5u) /****************************************************************************/ /* */ /* ��ʼ�� McASP ����ͨ�� */ /* */ /****************************************************************************/ void McASPI2STxConfigure(unsigned char wordSize,unsigned char slotSize, unsigned int slotNum, unsigned char modeDMA) { // ��λ McASPTxReset(SOC_MCASP_0_CTRL_REGS); switch(modeDMA) { case MCASP_MODE_DMA: // ʹ�� FIFO McASPWriteFifoEnable(SOC_MCASP_0_FIFO_REGS, 1, 1); // ���÷��� word �� slot �Ĵ�С McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, wordSize, slotSize, MCASP_TX_MODE_DMA); break; case MCASP_MODE_NON_DMA: // ���÷��� word �� slot �Ĵ�С McASPTxFmtI2SSet(SOC_MCASP_0_CTRL_REGS, wordSize, slotSize, MCASP_TX_MODE_NON_DMA); break; } // ��ʼ��֡ͬ����TDM ��ʽʹ�� slot ����������֡ͬ���źŵ������� // McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, slotNum, MCASP_TX_FS_WIDTH_WORD, // MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE); McASPTxFrameSyncCfg(SOC_MCASP_0_CTRL_REGS, 2, MCASP_TX_FS_WIDTH_WORD, MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE); // ��ʼ������ʱ�ӣ�ʹ���ⲿʱ�ӣ�ʱ����������Ч McASPTxClkCfg(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL, 0, 0); McASPTxClkPolaritySet(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_POL_FALL_EDGE); McASPTxClkCheckConfig(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLKCHCK_DIV32, 0x00, 0xFF); // ʹ�ܷ��ͽ���ͬ�� //McASPTxRxClkSyncEnable(SOC_MCASP_0_CTRL_REGS); // ʹ�� ���� slot // McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, (1 << slotNum)-1); McASPTxTimeSlotSet(SOC_MCASP_0_CTRL_REGS, 0x000000FF); // ���ô�����������ͨ������ McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX); McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX2); McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX3); McASPSerializerTxSet(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX4); // ��ʼ�� McASP ���ţ������������������ McASPPinMcASPSet(SOC_MCASP_0_CTRL_REGS, 0xFFFFFFFF); McASPPinDirOutputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AXR(MCASP_XSER_TX)| MCASP_PIN_AXR(MCASP_XSER_TX2) | MCASP_PIN_AXR(MCASP_XSER_TX3) | MCASP_PIN_AXR(MCASP_XSER_TX4) | MCASP_PIN_AFSX | MCASP_PIN_ACLKX); //McASPPinDirInputSet(SOC_MCASP_0_CTRL_REGS, MCASP_PIN_AHCLKX ); } /****************************************************************************/ /* */ /* ��ʼ�� McASP Ϊ I2S ģʽ */ /* */ /****************************************************************************/ void McASPI2SConfigure(unsigned char transmitMode, unsigned char wordSize, unsigned char slotSize, unsigned int slotNum, unsigned char modeDMA) { // ʹ�� McASP ģ�� PSC PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_MCASP0, PSC_POWERDOMAIN_ALWAYS_ON, PSC_MDCTL_NEXT_ENABLE); McASPI2STxConfigure(wordSize, slotSize, slotNum, modeDMA); } /****************************************************************************/ /* */ /* ��ʼ�� McASP �ж� */ /* */ /****************************************************************************/ void McASPIntSetup(unsigned int cpuINT, void (*userISR)(void)) { // ��ʼ���ж� IntRegister(cpuINT, userISR); IntEventMap(cpuINT, SYS_INT_MCASP0_INT); IntEnable(cpuINT); } /****************************************************************************/ /* */ /* ��� McASP ���ͺͽ��� */ /* */ /****************************************************************************/ void I2SDataTxRxActivate(unsigned char transmitMode) { // ���ʹ���ⲿʱ�� McASPTxClkStart(SOC_MCASP_0_CTRL_REGS, MCASP_TX_CLK_INTERNAL); // ��������� McASPTxSerActivate(SOC_MCASP_0_CTRL_REGS); // ʹ��״̬�� McASPTxEnable(SOC_MCASP_0_CTRL_REGS); // ��������0 McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX, 0); McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX2, 0); McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX3, 0); McASPTxBufWrite(SOC_MCASP_0_CTRL_REGS, MCASP_XSER_TX4, 0); }
Hello, Tony Tang
原程序,1个AXR输入,1个AXR输出。 slot size = 32, word size =16, ACNT=4。工作正常。
我将程序修改为输入数据复制4份到4个AXR输出,但是输出数据不对。
程序修改了:使能了4个serializer,ACNT=4*4,发送数据数组扩大4倍。
复制数据大概流程是:
unsigned int txBufPtr[SIZE*4],rxBufPtr[SIZE];
for(i=0;i<SIZE;i++){
txBufPtr[4*i] = rxBufPtr[i];
txBufPtr[4*i+1] = rxBufPtr[i];
txBufPtr[4*i+2] = rxBufPtr[i];
txBufPtr[4*i+3] = rxBufPtr[i];
}
然后再发送txBufPtr,长度参数不修改。
4个AXR输出数据错乱了,是我哪修改错了吗? 期待您的答复。