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.

[参考译文] Starterware:McASP 与 CS4272编解码器(32位)连接、具有适用于 AM1808/L138的 Starterware

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/571417/starterware-mcasp-interfacing-to-cs4272-codec-32-bit-with-starterware-for-am1808-l138

工具/软件:Starterware

我在调整 CS 4272编解码器的 Starterware 时遇到问题。 它被配置为 I2S、24位右对齐。

SCLK 被连接至 ACLKX 和 ACLKR 输入。  

MCLK 连接到 AFESR 和 AFSX 输入。

引脚多路复用器针对所有 McASP 信号进行配置。

我已确定数据线的范围、并看到 AXR (15)串行器上发送的有效编解码器数据。  

我已使用与外部位时钟的同步和异步操作。  我想使用来自编解码器的位时钟来确保与左/右组帧对齐。

DMA 正在运行、但始终会出现0xffffffff。 并且 RSTAT 被设定为0x152 (帧同步错误、在收集数据位时意外的帧)

我的插槽和字大小为:

#define SLOT_SIZE (32U)//发送/接收数据的时隙大小//
#define WORD_SIZE (32U)//发送/接收数据的字大小。 字大小<=插槽大小//

我认为"右对齐24位"实际上会发出 Int32字、因此我不会屏蔽输入。  

McASPReadFifoEnable (hMcASP->fifforegs、NUM_RX_SERIALIZERS、1);

对于每个 DMA 事件的字数、这应该是2吗? 不确定、但我已经尝试过它、它不会影响同步错误标志。

用于设置的代码是 config、然后是 start 函数。  

//======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
//将 McASP 发送部分配置为 I2S 模式。 //
//======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
void McASP_Config (void){//静态 void McASPI2SConfigure (void){

//==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
//重置将清除或重置所有 McASP 控件//
//必须在格式重新配置之前完成//
//==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
McASPRxReset (hMcASP->regs);
McASPTxReset (hMcASP->regs);

//==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
//为 DMA 数据传输启用 FIFO。 每个 DMA 一个字//
//按串行器数量设置的数字,因此一个。 //
//==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
McASPReadFifoEnable (hMcASP->fifforegs、NUM_RX_SERIALIZERS、1);//为 DMA 传输启用 FIFO //
McASPWriteFifoEnable (hMcASP->fifforegs、NUM_TX_SERIALIZERS、1);// 1表示每个串行器事件的字数(32it)

McASPRxFmtI2SSet (hMcASP->regs、word_size、slot_size、MCASP_RX_MODE_DMA);//以发送器/接收器格式单位设置 I2S 格式//
McASPTxFmtI2SSet (hMcASP->regs、word_size、slot_size、MCASP_TX_MODE_DMA);


McASPRxFrameSyncCfg (hMcASP->regs、2、MCASP_RX_FS_WIDTH_WORD、MCASP_RX_FS_EXT_BEGIN_ON_RIS_EDGE);//配置帧同步。 //
McASPTxFrameSyncCfg (hMcASP->regs、2、MCASP_TX_FS_WIDTH_WORD、MCASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE);// TDM 格式的 I2S、带2个插槽//


McASPRxClkCfg (hMcASP->regs、MCASP_RX_CLK_EXTERNAL、0、0);//配置接收器的时钟//
McASPRxClkPolaritySet (hMcASP->regs、MCASP_RX_CLK_POL_FALL_EDGE);//配置极性(SYNC 使 RX 上的极性反相//
McASPRxClkCheckConfig (hMcASP->regs、MCASP_RX_CLKCHCCK_DIV32、0x00、0xFF);//设置预分频32位、最小值= 0、最大值= 0xff //


McASPTxClkCfg (hMcASP->regs、MCASP_TX_CLK_EXTERNAL、0、0);//配置发送器的时钟//
McASPTxClkPolaritySet (hMcASP->regs、MCASP_TX_CLK_POL_FALL_EDGE);
McASPTxClkCheckConfig (hMcASP->regs、MCASP_TX_CLKCHCK_DIV32、0x00、0xFF);//设置预分频32位、最小值= 0、最大值= 0xff //

McASPTxRxClkSyncEnable (hMcASP->regs);//启用 RX 和 TX 部分的同步//

McASPRxTimeSlotSet (hMcASP->regs、I2S_SLOTS);//启用发送器/接收器插槽。 I2S 使用2个插槽//
McASPTxTimeSlotSet (hMcASP->regs、I2S_SLOTS);

McASPSerializerRxSet (hMcASP->regs、MCASP_XSER_RX);//设置串行器、当前只有一个串行器是 RX //
McASPSerializerTxSet (hMcASP->regs、MCASP_XSER_TX);//设置串行器、当前只有一个串行器是 TX //

McASPPinMcASPSet (hMcASP->regs、0xFFFFFFFF);//将 McASP 引脚配置为所有 GPIO //
McASPPinDirOutputSet (hMcASP->regs、MCASP_PIN_AXR (MCASP_XSER_TX);//输出-串行器 Tx 连接到编解码器的输入//
McASPPinDirInputSet (hMcASP->regs、
McASP_PIN_AFSX //输入-帧同步、时钟和串行器 Rx //
| MCASP_PIN_ACLKX
| MCASP_PIN_AHCLKX
| MCASP_PIN_AFSR
| MCASP_PIN_ACLKR
| MCASP_PIN_AHCLKR
| MCASP_PIN_AXR (MCASP_XSER_RX);

McASPTxIntEnable (hMcASP->regs、MCASP_TX_DMAERROR //为 McASP 启用错误中断//
| MCASP_TX_CLKFAIL
| MCASP_TX_SYNCERROR
| MCASP_TX_UNDERRUN);

McASPRxIntEnable (hMcASP->regs、MCASP_RX_DMAERROR
| MCASP_RX_CLKFAIL
| MCASP_RX_SYNCERROR
| MCASP_RX_overrun);
//}


//======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
//激活数据传输/接收//
//在调用 DMA 之前,DMA 参数应准备就绪。 //
//======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //
void McASP_Start (void){//静态 void I2SDataTxRxActivate (EDMA_InfoHandle hEdma){
EDMA_InfoHandle hEdma = hMcASP->hEdma;

McASPRxClkStart (hMcASP->regs、MCASP_RX_CLK_EXTERNAL);//启动时钟//
McASPTxClkStart (hMcASP->regs、MCASP_TX_CLK_EXTERNAL);

EDMA3EnableTransfer (hEdma->regs、EDMA3_CHA_McASP0_RX、EDMA3_TRIG_MODE_EVENT);//为传输启用 EDMA //
EDMA3 EnableTransfer (hEdma->regs、EDMA3_CHA_McASP0_TX、EDMA3_TRIG_MODE_EVENT);

McASPRxSerActivate (hMcASP->regs);//激活串行器//
McASPTxSerActivate (hMcASP->regs);

while (McASPTxStatusGet (hMcASP->regs)& MCASP_TX_STAT_DATAREADY);//确保 XDATA 位清零//

McASPRxEnable (hMcASP->regs);//激活状态机//
McASPTxEnable (hMcASP->regs);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    将此主题移至 OMAP-L13x、AM1x 和 C674x 处理器论坛。