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.

[参考译文] AM3352:McASP 发送不工作

Guru**** 2589280 points
Other Parts Discussed in Thread: SYSCONFIG, AM3352

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/612713/am3352-mcasp-transmit-not-working

器件型号:AM3352
Thread 中讨论的其他器件:SysConfig

对于启动器、是的、我遵循技术手册的第22.3.12.2节、我看到过以下文章: e2e.ti.com/.../220666 

这是定制板上的 TI-RTOS 项目。

我不是使用 Starterware 对 McASP 进行编程、而是写入寄存器。 这是设置

McASP0通过引脚 AXR0 (接收)、AXR1 (发送)、ACLKX (编解码器生成的时钟)和 FSX (编解码器生成的时钟)连接到编解码器320AIC3106。 我们以8kHz 的频率运行、每帧有2个插槽、同步。  

我可以得到的只是正常的。 我对此没有任何问题。

我的发送中断工作正常。 我将获得它看起来所包含的所有中断。 我的问题是我的引脚已死。 我将引脚变为 GPIO 并对其进行设置和清除、我观察到它在示波器上上下移动、因此我知道它可以正常工作。 我使用串行器1作为传输。 我在 main 之外初始化这个东西、以便在它打开时中断运行。

我的 PFUNC 寄存器设置为0、因此目前所有内容都是 McASP。 我的 Pdir 寄存器设置为0x00000002、因此我相信串行器1引脚是输出。 我的 SRCTL_1寄存器设置为0x00000001。 我的 XINTCTL 中断为 DATA_RDY 且欠运转。 我没有跑下下跑。 我正在写入配置总线、因此我将直接写入串行器1的 TX 寄存器。  

我已经尝试将引脚多路复用器设置为输入和输出、但它看起来没有什么作用。 我不关注 CLKCHK 错误、也不做任何事情来设置 AHCLK、我只是让它们位于何处。 我的 AMUTE 寄存器设置为0、因此错误不应导致静音。  

除欠运转之外、是否还有其他会导致 TX 引脚无法正常工作的错误? 我是否在某个地方漏掉了一条通知我启用串行器引脚进行输出的注释?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    XSTAT 和 XGBLCTL 寄存器的值是多少? XTDM 是否设置为使插槽0和插槽1处于活动状态。 在 GBLCTL 中、发送状态机复位后是否退出。 您是否看到在示波器上正确生成了传输时钟和帧同步。

    如果您发布 MCASP 发送初始化代码的一部分、或者将其与 Starterware 或驱动程序代码进行比较、这将有所帮助:

    如果使用 rCSL,以下是一些代码供参考。
    processors.wiki.ti.com/.../QuickStartOMAPL1x_rCSL

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

    Rx 和 TX 针对设置进行了很好的镜像。 时钟工作正常、是预期频率。  

    我没有使用 CSL

    代码有点不连贯、因为我刚开始执行此操作:

    #define MCASP_PWRIDLESYSCZNO_IDLE 0x00000001

    #define MCASP_PFUNC_AFSR_GPIO (1<<31)
    #define MCASP_PFUNC_AHCLKR_GPIO (1<<30)
    #define MCBSP_PFUNC_ACLKR_GPIO (1<<29)
    #define MCASP_PFUNC_AFSX_GPIO (1<<28)
    #define MCASP_PFUNC_AHCLKX_GPIO (1<<27)
    #define MCASP_PFUNC_ACLKX_GPIO (1<<26)
    #define MCASP_PFUNC_AMUTE_GPIO (1<<25)
    #define MCASP_PFUNC_AXR3_GPIO (1<<3)
    #define MCASP_PFUNC_AXR2_GPIO (1<<2)
    #define MCASP_PFUNC_AXR1_GPIO (1<<1)
    #define MCASP_PFUNC_AXR0_GPIO (1)

    #define MCBSP_Pdir_AFSR_OUTPUT (1<<31)
    #define MCBSP_Pdir_AHCLKR_OUTPUT (1<<30)
    #define MCASP_Pdir_ACLKR_OUTPUT (1<<29)
    #define MCBSP_Pdir_AFSX_OUTPUT (1<<28)
    #define MCBSP_Pdir_AHCLKX_OUTPUT (1<<27)
    #define MCASP_Pdir_ACLKX_OUTPUT (1<<26)
    #define MCASP_Pdir_AMUTE_OUTPUT (1<<25)
    #define MCASP_Pdir_AXR3_output (1<<3)
    #define MCASP_Pdir_AXR2_output (1<<2)
    #define MCASP_Pdir_AXR1_output (1<<1)
    #define MCASP_Pdir_AXR0_output (1)

    #define MCASP_PDOUT_SET_AFSR 0x8000000
    #define MCASP_PDOUT_SET_AHCLKR 0x40000000
    #define MCASP_PDOUT_SET_ACLKR 0x20000000
    #define MCASP_PDOUT_SET_AFSX 0x10000000
    #define MCASP_PDOUT_SET_AHCLKX 0x08000000
    #define MCASP_PDOUT_SET_ACLKX 0x04000000
    #define MCASP_PDOUT_SET_AMUTE 0x02000000
    #define MCASP_PDOUT_SET_AXR3 0x00000008
    #define MCASP_PDOUT_SET_AXR2 0x00000004
    #define MCASP_PDOUT_SET_AXR1 0x00000002
    #define MCASP_PDOUT_SET_AXR0 0x00000001

    #define MCASP_PDCLR_AFSR 0x8000000
    #define MCASP_PDCLR_AHCLK 0x40000000
    #define MCBSP_PDCLR_CLR_ACLKR 0x20000000
    #define MCBSP_PDCLR_CLR_AFSX 0x10000000
    #define MCBSP_PDCLR_AHCLKX 0x08000000
    #define MCBSP_PDCLR_CLR_ACLKX 0x04000000
    #define MCASP_PDCLR_AMUTE 0x02000000
    #define MCASP_PDCLR_AXR3 0x00000008
    #define MCASP_PDCLR_AXR2 0x00000004
    #define MCASP_PDCLR_AXR1 0x00000002
    #define MCBSP_PDCLR_AXR0 0x00000001

    #define MCASP_PDIN_DATA_AFESR 0x80000000
    #define MCASP_PDIN_DATA_AHCLKR 0x40000000
    #define MCASP_PDIN_DATA_ACLKR 0x20000000
    #define MCASP_PDIN_DATA_AFSX 0x10000000
    #define MCBSP_PDIN_IN_DATA_AHCLKX 0x08000000
    #define MCASP_PDIN_DATA_ACLKX 0x04000000
    #define MCASP_PDIN_DATA_AMUTE 0x02000000
    #define MCASP_PDIN_DATA_AXR3 0x00000008
    #define MCASP_PDIN_DATA_AXR2 0x00000004
    #define MCASP_PDIN_DATA_AXR1 0x00000002
    #define MCASP_PDIN_DATA_AXR0 0x00000001

    #define MCASP_GBLCTL_TX_FS_ACTIVE (1<<12)
    #define MCASP_GBLCTL_TX_ST_MCHN_ACTIVE (1<<11)
    #define MCASP_GBLCTL_TX_UNSET_CLEAR (1<<10)
    #define MCASP_GBLCTL_TX_HIFREQ_DIV_ACTIVE (1<<9)
    #define MCASP_GBLCTL_TX_CLK_DIV_ACTIVE (1<<8)
    #define MCASP_GBLCTL_RX_FS_ACTIVE (1<<4)
    #define MCASP_GBLCTL_RX_ST_MCHN_ACTIVE (1<<3)
    #define MCASP_GBLCTL_RX_UNSET_CLEAR (1<<2)
    #define MCASP_GBLCTL_RX_HIFREQ_DIV_ACTIVE (1<<1)
    #define MCASP_GBLCTL_RX_CLK_DIV_ACTIVE (1)

    #define MCASP_RMASK_16_BIT 0x0000FFFF

    #define MCASP_RFMT_1bit_DELAY (1<<16)
    #define MCASP_RFMT_MSB_FIRST (1<<15)
    #define MCASP_RFMT_SLOT_16_BITS (7<<4)
    #define MCASP_RFMT_READ_CFG_BUF (1<<3)

    #define MCASP_AFESRCTL_2_SLOT_TDM (2<<7)

    #define MCBSP_RTDM_1_ACTIVE_TIME_SLOTS 0x00000001
    #define MCBSP_RTDM_2_ACTIVE_TIME_SLOTS 0x00000003
    #define MCASP_RTDM_All_TIME_SLOTS_ACTIVE 0xFFFFFFFF

    #define MCASP_RINTCTL_RX_DATA_RDY_EN (1<<5)
    #define MCASP_RINTCTL_RX_CLK_FAIL_EN 0x00000004
    #define MCASP_RINTCTL_RX_SYNC_ERROR_EN 0x00000002
    #define MCASP_RINTCTL_RX_O溢 位_EN 0x00000001

    #define MCASP_RSTAT_ERROR 0x00000100
    #define MCASP_RSTAT_DMA_ERROR 0x00000080
    #define MCASP_RSTAT_START_OW_FRAME 0x00000040
    #define MCASP_RSTAT_DATA_RDY 0x00000020
    #define MCASP_RSTAT_LAST_SLOT 0x00000010
    #define MCASP_RSTAT_LEVE_SLOT 0x00000008
    #define MCASP_RSTAT_CLOCK _FAIL 0x00000004
    #define MCASP_RSTAT_SYNC_FAIL 0x00000002
    #define MCBSP_RSTAT_overrun 0x00000001

    #define MCASP_XMASK_16_BIT 0x0000FFFF

    #define MCASP_XFMT_1bit_DELAY (1<<16)
    #define MCASP_XFMT_MSB_FIRST (1<<15)
    #define MCASP_XFMT_SLOT_16_BITS (7<<4)
    #define MCASP_XFMT_WRITE_CFG_BUF (1<<3)

    #define MCASP_AFSXCTL_2_SLOT_TDM (2<<7)

    #define MCBSP_XTDM_1_ACTIVE_TIME_SLOTS 0x00000001
    #define MCBSP_XTDM_2_ACTIVE_TIME_SLOTS 0x00000003
    #define MCASP_XTDM_All_TimesLOAD_ACTIVE 0xFFFFFFFF

    #define MCASP_XINTCTL_START_FRAME_EN (1<<7)
    #define MCASP_XINTCTL_DATA_RDY_EN (1<<5)
    #define MCASP_XINTCTL_CLK_FAIL_EN (1<<2)
    #define MCASP_XINTCTL_SYNC_ERROR_EN (1<<1)
    #define MCASP_XINTCTL_UNDERRUN (1)

    #define MCASP_XCLKCHK_Xmax (10<<16)
    #define MCASP_XCLKCHK_XMIN (6<8)

    #define MCASP_XCLKCHK_INTERNAL (1<<15)
    #define MCASP_XCLKCHK_divide_down 19.

    #define MCASP_XSTAT_ERROR 0x00000100
    #define MCASP_XSTAT_DMA_ERROR 0x00000080
    #define MCASP_XSTAT_START_OW_FRAME 0x00000040
    #define MCASP_XSTAT_DATA_RDY (1<<5)
    #define MCASP_XSTAT_LAST_SLOT 0x00000010
    #define MCASP_XSTAT_LEVE_SLOT 0x00000008
    #define MCASP_XSTAT_CLOCK _FAIL (1<<2)
    #define MCASP_XSTAT_SYNC_FAIL 0x00000002
    #define MCASP_XSTAT_UNDERRUN (1)

    #define MCBSP_SRCTL_RRDY 0x00000020
    #define MCBSP_SRCTL_XRDY 0x00000010
    #define MCBSP_SRCTL_TX_EN 0x00000001
    #define MCASP_SRCTL_RX_EN 0x00000002

    空 InitMcASP0 (空)

    HWI_DisableMIR2 (HWI_MASK_MIR2_McASP0_CODEC | HWI_MASK_MIR2_McASP0_CODE_RX);

    //重置所有内容
    * McASP0_GBLCTL = 0;

    //禁用空闲
    //*SP0_PWRIDLESYSCDIP= MCBSP_PWRIDLESYSCDIP_McANO_IDLE;

    ////初始化 RX
    * McASP0_RMASK = MCBSP_RMASK_16_BIT;

    * McASP0_RFMT = MCBSP_RFMT_1BIT_DELAY | MCBSP_RFMT_SLOT_16_BITS | MCBSP_RFMT_READ_CFG_BUF | MCBSP_RFMT_MSB_FIRST;

    * McASP0_AFESRCTL = MCBSP_AFESRCTL_2_SLOT_TDM;

    * McASP0_ACLKRCTL = 0;

    * McASP0_AHCLKRCTL = 0;

    * McASP0_RTDM = MCBSP_RTDM_2_ACTIVE_TIME_SLOTS;

    * McASP0_RINTCTL = MCBSP_RINTCTL_RX_DATA_RDY_EN;//尚未启用错误 INT

    * McASP0_RCLKCHK = 0;

    ////初始化 TX
    * McASP0_XMASK = MCBSP_XMASK_16_BIT;

    * McASP0_XFMT = MCASP_XFMT_1bit_DELAY | MCASP_XFMT_SLOT_16_BITS | MCASP_XFMT_WRITE_CFG_BUF | MCASP_XFMT_MSB_FIRST;

    * McASP0_AFSXCTL = MCBSP_AFSXCTL_2_SLOT_TDM;

    * McASP0_ACLKXCTL = 0;

    * McASP0_AHCLKXCTL = 0;//MCASP_XCLKCHK_INTERNAL | MCASP_XCLKCHK_divid_DOWN;//基于 AUXCLK、为19.2MHz

    * McASP0_XTDM = MCBSP_XTDM_2_ACTIVE_TIME_SLOTS;

    * McASP0_XINTCTL = MCASP_XINTCTL_DATA_RDY_EN | MCASP_XINTCTL_UNDERRUN;//尚未启用错误 INT

    * McASP0_XCLKCHK = 0;//MCBSP_XCLKCHK_Xmax | MCBSP_XCLKCHK_XMIN;

    //串行器
    * McASP0_SRCTL_0 = MCBSP_SRCTL_RX_EN;
    * McASP0_SRCTL_1 = MCBSP_SRCTL_TX_EN;

    //引脚配置
    * McASP0_PFUNC = 0;/* MCBSP_PFUNC_AFESR_GPIO | MCBSP_PFUNC_AHCLKR_GPIO |
    McASP_PFUNC_ACLKR_GPIO | MCASP_PFUNC_AHCLKX_GPIO | MCASP_PFUNC_AMUTE_GPIO |
    McASP_PFUNC_AXR3_GPIO | MCASP_PFUNC_AXR2_GPIO;*

    * McASP0_Pdir = MCBSP_Pdir_AXR1_output;

    //设置串行器(即使对于外部时钟也需要)
    *McASP0_GBLCTL |= MCBSP_GBLCTL_TX_HIFREQ_DIV_ACTIVE | MCBSP_GBLCTL_RX_HIFREQ_DIV_ACTIVE;
    //验证
    while ((* McASP0_GBLCTL 和(MCBSP_GBLCTL_TX_HIFREQ_DIV_ACTIVE | MCBSP_GBLCTL_RX_HIFREQ_DIV_ACTIVE))!=
    (McASP_GBLCTL_TX_HIFREQ_DIV_ACTIVE | MCASP_GBLCTL_RX_HIFREQ_DIV_ACTIVE);

    Hwi_enableMIR2 (HWI_MASK_MIR2_McASP0_CODE_TX | HWI_MASK_MIR2_McASP0_CODE_RX);

    //如果可以,清除 stat 寄存器
    * McASP0_RSTAT = 0xFFFF;
    * McASP0_XSTAT = 0xFFFF;

    //启用 McASP
    //撤消状态机的清除位
    *McASP0_GBLCTL |= MCBSP_GBLCTL_TX_UNSET_CLEAR | MCBSP_GBLCTL_RX_UNSET_CLEAR;
    //验证
    while (((* McASP0_GBLCTL 和(MCBSP_GBLCTL_TX_UNSET_CLEAR | MCBSP_GBLCTL_RX_UNSET_CLEAR))!=
    (McASP_GBLCTL_TX_UNSET_CLEAR | MCASP_GBLCTL_RX_UNSET_CLEAR);

    //使状态机退出复位状态
    *McASP0_GBLCTL |= MCBSP_GBLCTL_TX_ST_MCHN_ACTIVE | MCBSP_GBLCTL_RX_ST_MCHN_ACTIVE;
    //验证
    while (((* McASP0_GBLCTL 和(MCBSP_GBLCTL_TX_ST_MCHN_ACTIVE | MCBSP_GBLCTL_RX_ST_MCHN_ACTIVE))!=
    (McASP_GBLCTL_TX_ST_MCHN_ACTIVE | MCASP_GBLCTL_RX_ST_MCHN_ACTIVE));

    //从复位中删除帧同步
    * McASP0_GBLCTL |= MCBSP_GBLCTL_TX_FS_ACTIVE | MCBSP_GBLCTL_RX_FS_ACTIVE;
    //验证
    while ((* McASP0_GBLCTL 和(MCBSP_GBLCTL_TX_FS_ACTIVE | MCBSP_GBLCTL_RX_FS_ACTIVE))!=
    (McASP_GBLCTL_TX_FS_ACTIVE | MCASP_GBLCTL_RX_FS_ACTIVE);

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

    因此、我仍然没有答案

    要使该引脚正常工作、需要发生什么情况?

    电源域已启用  

    Pinmux 设置正确-问题-是否将其设置为输入或输出? 由于它可以配置为 McASP 模块内部的输入或输出、我会假设输入、但我将其用作输出、那么它是什么?

    McASP 引脚功能设置为 McASP 引脚

    McASP 方向设置为输出

    时钟功能

    无欠运转错误

    按照说明进行设置

    中断被启用

    如前所述、我正在获取中断、并且我正在写入 XBUF1寄存器以获取样本、除了引脚不执行任何操作外、一切看起来都正常。 我已经验证、刷新监测它的变量时、我只会收到欠运转错误、并且我通过使用我尝试传输的样本填充缓冲器来获得中断。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我猜、由于我没有得到回复、其他人也会因此而感到损失
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    鹅卵石

    很 n`t 延迟的响应、由于一些优先任务、我被这个线程所绕过、并且没有跟上您的响应。

    您正在尝试使用直接寄存器写入来对 McASP 进行编程、而不是使用功能 CSL 或 McASP LLD 驱动程序。 当我们n`tn`t 相同的环境设置并且 DO 完全可见 SOC 寄存器以注释问题所在时、这将更难进行调试。 您能否以我们可以在 EVM 上重现的形式提供此项目?  我们建议您使用 Processor SDK RTOS CSL 或 LLD 驱动程序对 MCASP 进行编程。

    为了参考 CSL 代码、我们在 以下位置的电路板诊断中提供了一个使用 AIC3106的 OMAPL 平台的 MCASP CSL 代码:

    pdk_am335x_1_0_7\packages/ti\board\diag\McASP\src

    您可以查看在 McASP_TEST.c 中定义的 BoardDiag McASPI2SConfigure 函数

    McASPRxReset (SOC_MCASP_CFG_BASE);
    McASPxReset (SOC_MCASP_CFG_BASE);
    
    //为 DMA 传输启用 FIFO *
    McASPReadFifoEnable (SOC_MCASP_CFG_BASE、1、1);McASPWriteFifoEnable
    (SOC_MCASP_CFG_BASE、1、1、1、1 1);
    
    
    
    /*以发送器/接收器格式单位设置 I2S 格式*/
    McASPRxFmtI2SSet (SOC_MCASP_CFG_BASE、WORD_SIZE、SLOT_SIZE、
    McASP_RX_MODE_DMA);
    McASPTxFmtI2SSet (SOC_MCASP_CFG_BASE、WORD_SIZE、SLOT_SIZE、\
    McASP_TX_MODE_DMA);
    
    McASPRxFrameSyncCfg (SOC_MCASP_CFG_BASE、2、MCASP_RX_FS_WIDTH_WORD、
    McASP_RX_FS_EXT_BEGIN_ON_RIS_EDGE);
    McASPTxFrameSyncCfg (SOC_MCASP_CFG_BASE、2、MCASP_TX_FS_WIDTH_WORD、
    McASP_TX_FS_EXT_BEGIN_ON_RIS_EDGE);
    
    //配置接收器的时钟*/
    McASPRxClkCfg (SOC_MCASP_CFG_BASE、MCASP_RX_CLK_EXTERNAL、0、0);
    McASPRxClkPolaritySet (SOC_MCASP_CFG_BASE、 McASP_RX_CLK_POL_RIS_EDGE);
    McASPRxClkCheckConfig (SOC_MCASP_CFG_BASE、MCASP_RX_CLKCHCK_DIV32、
    0x00、0xFF);
    
    /*配置发送器的时钟*/
    McASPTxClkCfg (SOC_MCASP_CFG_BASE、MCASP_TX_CLK_EXTERNAL、0、0);
    McASPTxClkPolaritySet (SOC_MCASP_CFG_BASE、MCASP_TX_CLK_POL_FALL_EDGE);
    McASPTxClkCheckConfig (SOC_MCASP_CFG_BASE、MCASP_TX_CLKCHCK_DIV32、
    0x00、0xFF);
    
    /*启用 RX 和 TX 部分的同步*/
    McASPTxRxClkSyncEnable (SOC_MCASP_CFG_BASE);
    /*启用发送器/接收器插槽。 I2S 使用2个插槽*/
    McASPRxTimeSlotSet (SOC_MCASP_CFG_BASE、I2S_SLOTS);
    McASPTxTimeSlotSet (SOC_MCASP_CFG_BASE、I2S_SLOTS);
    
    /*
    **设置串行器
    *
    
    McASPSerializerTxSet (SOC_MCASP_CFG_BASE、MCASP_XSER_TX);
    McASPSerializerRxSet (SOC_MCASP_CFG_BASE、MCASP_XSER_RX);
    
    
    /*
    **配置 McASP 引脚
    **输出-帧同步、时钟、串行器 Rx 和串行器 Tx
    ** (内部生成的时钟)
    McASPPinMcASPSet
    (SOC_MCASP_CFG_BASE、0xFFFFFFFF);
    McASPPinDirOutputSet (SOC_MCASP_CFG_BASE、MCASP_PIN_AXR (MCASP_XSER_TX));
    McASPPinDirInputSet (SOC_MCASP_CFG_BASE、 McASP_PIN_AFSX
    | MCASP_PIN_ACLKX
    | MCASP_PIN_AFR
    | MCASP_PIN_AXR
    (MCASP_XSER_RX);
    
    //为 McASP 启用错误中断* McASP_PIN_ACLKR | MCASP_PIN_AXR (MCASP_RO_RX_RUS_EXTRAC_MCASP_RUS_MCASP_RUS_RX_AM_RUN_AM_EXTRACK_|MCASP_RAP_MCASP_RUS_RUN_MCASP_RUS_EXTRA_MCASP_MCASP_RUN_RUN_MCASP |
    MCASP_RAP_MCASP_RIC_MCASP_RIC_RIC_Rx_MCASP_Rx_Rx_Rx_Rx_SY
    
    
    
    
    
    
    
    

    此致、

    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想我不明白您说"以我们可以在 EVM 上重现的形式发送此项目的...provide 文件"是什么意思。 您是否意味着您需要文件本身? 您是否需要我为您制作一个项目?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的意思是、可以使用所有相关文件压缩您的项目、以便我们可以在 EVM 上运行该项目并查看 MCASP 和系统配置寄存器设置。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可以通过电子邮件而不是公开发送它吗? 此外、由于我不知道您使用的是哪种 EVM 或对该板不熟悉、我认为您将负责填补引脚复用、GPIO、编解码器初始化等方面的空白?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否可以将其秘密发送?

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

    鹅卵石

    我已将我从您那里收到的文件转发给 Rahul Prabhu

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

    鹅卵石

    Victor 已与我们联系、以加快此问题的调试过程。 如前所述、调试此问题对我们而言极具挑战性、因为您选择使用寄存器位级配置而不是使用 Processor SDK RTOS 中的 CSL API 或 MCASP 驱动程序 API 来开发 MCASP 代码。 由于这些挑战、我们创建 获取软件问题支持的清单/指南、发布在 Sitara 论坛上、这表明要获得 E2E 论坛的支持、请使用 Processor SDK RTOS 开发裸机和 RTOS 代码。 我们为众多客户提供支持、因此我希望您了解在支持定制软件和硬件的此类开发工作方面的延迟。

    说过我已经审查了 Victor 提交给我们的下行代码、并有几个问题/意见:

    1.在您的帖子中,您表示已从编解码器接收 FSX 和 ACLKX。 您能否说明 MCLK 是否作为输入连接到 ACLKX 引脚时钟、或者 ACLKX 位时钟是否从 MCLK 分频到 AHCLKX 高频主时钟。
    2.您能否在复位状态机和帧同步后读取 XSTAT 以查看发送端是否存在任何问题。 如果可能、请在您通过配置 GBLCTL 寄存器释放复位后从 CCS 寄存器视图中提供完整的 MCASP 寄存器配置。
    在同步模式中、接收时钟是从发送端获取的、所以我假设 ACLKX 和 ACLKR 位时钟被正确接收和内部同步、您是否还使用示波器检查了发送帧同步。
    4.您能否在 ACLKXCTL 中使用 CLKXP=1来反转发送时钟极性、在我们提供 CLKXP 的 MCASP -AICCODEC 示例中、当外部接收器在串行时钟的上升沿对数据进行采样时、似乎设置为1、 因此、发送器必须在串行时钟的下降沿移出数据

    我将在明天继续查看此代码、并告诉您是否可以推荐其他调试步骤。

    此致、
    Rahul

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

    1) 1)编解码器 m-clock 连接到24.576MHz 晶体。 编解码器生成帧同步(8kHz)、该帧同步进入 FSX 和连接到 ACLKX 的 WCLK。 我们设置了2个16位字。 不使用 AHCLKX

    2) 2)我猜您想在初始化过程完成后查看寄存器视图吗? 如果没有、并且设置过程中有一定的点、请指明您希望在设置过程步骤中查看寄存器视图的哪个位置? 正如您所知、在 GBLCTL 寄存器内有很多东西从复位中释放出来。 这里的任一种方式是初始化结束时的寄存器:

    到达断点之前的 XSTAT 为0x00000104、因为到达断点会生成额外的错误、否则不会出现这些错误。 错误是 XCKFAIL、它不应影响任何东西、因为我们没有系统设置来检查时钟、而 XERR 仅意味着存在错误

    3) 3) ACLKR 未使用、我们仅连接到 ACLKX。 我已经使用示波器检查了帧同步和字时钟、它们都很好。 正如我之前所说的、我可以通过将已知信号发送到编解码器并使用单次图形在 CCS 中绘制它来获得很好的验证

    4) 4)反转时钟的极性未修复它。 AXR1上仍然没有活动

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

    感谢您提供寄存器。 读取 XSTAT 的一种方法可能是在代码中读取该代码并将其打印在 UART 上、或者如果停止内核会产生更多错误、则连接到 DAP (调试子系统端口并查看值)。

    此外、TRM 表示以 I2S 格式传输、首先使用 MSB、左对齐、同时选择 XDATDLY= 01 (请参阅表22-9)。 我很好奇、为什么您在设置中注释掉了1位延迟位。

    我检查了此处所示的常见问题:
    processors.wiki.ti.com/.../McASP_Tips

    您的端口配置与 XFMT 配置一致、因为您要设置 XBUSEL =1并将数据写入 XBUF、但您可能需要查看 MCASP 的32位访问要求、因为您的配置需要16位传输。  您的16位数据需要作为 32位字传输到 XBUF、即将 uint16_t 数据的数组转换为 uint32_t 数组、并在每个字上填充

    此致
    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我正在读取代码中的 XSTAT、这就是我能够在断点之前获得该值的方式。 我们没有任何可以打印出来的 UART 连接。

    我们不使用 I2S 格式、而是使用 TDM。 一位延迟是我为编解码器所做的事情。 编解码器具有可编程延迟、McASP 具有可编程延迟。 我尝试过一个还是另一个、看看这是否可以解决任何问题。 令人惊讶的是,它没有。

    当然、我会在读取/写入时将其更改为32位变量
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我一段时间内没有听到任何声音。 只是想确保这一问题仍在进行中
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    鹅卵石

    您是否将代码更新为32位访问并尝试 wiki 上的建议。 您使用了什么选项:填充数据或启用 AFIFO?

    正如我所指出 的、您的 MCASP 代码未遵循我们在这里提供给我们的用于访问外设的 CSL 或 LLD 驱动程序支持指南。 n`t、您也要在我们完全理解的定制硬件上测试这一点。 是否有办法帮助我们在 TI 评估平台上重现此问题。

    此致、

    Rahul

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

    是的、我切换到32位变量来写入和读取数据寄存器。 没有什么不同。

    我将尝试使用这些驱动程序。 我会告诉您它是否修复了任何问题、或者我是否对如何使用它有任何疑问

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

    好的、现在我对 McASP 驱动程序有一些问题

    wiki 上的链接  

    它指出、我需要调用  Int32_t mcaspInit (void)来开始初始化模块。 当我在实际代码/驱动程序中查找该例程时、这不是正确的原型。 驱动程序将其作为 void mcaspInit (uint32_t instNum)。 此外、当我尝试将其包含在代码中时、我会收到一个隐式函数警告、即使我包含了像 wiki 告诉我的那样的 driver.h 文件。 然后、当我查看示例项目时、该例程甚至没有被调用。 使用完全不同的方法。  我知道我应该遵循示例项目、但如果该示例项目不准确、在线 wiki 的重点是什么?

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

    鹅卵石

    很抱歉、您的陈述不实、并感谢您将此事告知我们。 我们已从 mcasp_drv.h 中删除了令人困惑的 mcaspInit() API,并在即将发布的4.1版本中将 MCASP_deviceInit()移到了 mcasp_soc.h (此问题已使用错误 ID PRSDK-2882进行跟踪)。 我们将相应地更新 wiki。

    此致、
    Rahul

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

    该示例没有帮助。 它不会告诉我如何更改任何 McASP 设置(串行器、格式、时钟源等) (我没想到会更改)。 这也是令人困惑的

    该示例调用 McaspDevice_init、该命令设置 McASP_MODULE 和 McASP_deviceInstInfo。 然后它调用 configMcASP_SockHwInfo、该文件似乎仅获取 cfg、并将其发送回:
    McASP_socGetInitCfg (MCASP_NUM、hwinfo);


    /*如果需要,请更改任何内容*/
    McASP_socSetInitCfg (MCASP_NUM、hwinfo);

    因此、我要更改 hwinfo 设置中的任何设置、我发现它与已经设置的 McASP_deviceInstInfo 是相同的数据类型。 那么、设置 McASP_deviceInstInfo 的重点是什么? 这些设置是否应进入 hwinfo 和 McASP_socSetInitCfg? 执行 Get 和 Set 但不更改任何内容的要点是什么? 如果这些设置未发送到模块、我不理解 McaspDevice_init 的要点。

    我是否可以看到另一个示例、它可能会为我清除这些问题? 我已经查看过 MCASP_LLD_SDS 文档、但考虑到首次使用驱动程序 API 时出错(第11页)、我不知道我可以信任多少文档

    仅供参考您的 wiki 修复仅修复了 mcaspInit 的一个实例,它仍在驱动程序配置部分下

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    MCAASP 驱动程序使用 McASP_SoC.c 中使用的值为驱动程序设置默认值 McASP_socGetInitCf 和 McASP_socSetInitCfg 用于更改这些默认设置。 例如、SoC 配置对 McASP0 TX 和 RX 使用中断编号80和81、对 McASP1使用中断编号82和83。 您可以通过获取默认 SOC 配置并对其进行修改、然后使用 McASP_socSetInitCfg 来修改中断设置。 如注释所示、用户可以指示 McASP_socGetInitCfg 和 McASP_socSetInitCfg 调用之间的配置更改。

    McASP_cfg.c 文件中提供了主 MCASP 接收侧设置和发送侧设置、该文件提供了 mcaspRcvSetup 和 mcaspXmtSetup。 检查文件夹中的文件 MCASP_DeviceLoopback_evmAM335x_armExampleProject.txt 以查看与此示例对应的所有源文件。 读取代码的最佳方法是生成 CCS 工程并将其导入 CCS。 这些是我们针对该器件提供的唯一 MCASP 示例。

    OMAPL137还有另一个 MCASP 项目、该项目基于 CSL、如果目的是查看 MCASP 配置序列、则可以参考该项目。 可在此处找到(pdk_am335x_1_0_7\packages/ti\board\diag\McASP\src)

    此致、
    Rahul
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我知道它使用默认配置、但如果 McASP_deviceInstInfo 在本地更改/设置某些变量、但从未调用例程将其应用于 McASP 配置、它的作用是什么? 它似乎只是设置局部变量、但不对其执行任何操作、然后调用另一个例程、看起来它允许您获取和更改这些相同的变量、但不会执行任何操作。 那么、McASP_deviceInstInfo 的作用是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    鹅卵石

    McASP 驱动程序确实使用此结构来设置中断并将驱动程序绑定到器件。 请参阅 mcaspBindDev 和 mcaspRegisterInt 的源代码。 这两个 API 都将根据应用开发人员使用 McASP_deviceInstInfo 设置的信息来设置驱动程序

    希望这能澄清使用情况。

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

    我将从我们离开该调试的位置进行选择。 我们基于您迄今为止在 wiki 上共享的信息讨论了此问题、并提供了一个问题列表、以帮助我们了解您的设置和配置。 目前、我们的主要问题是引脚多路复用设置、因为 MCASP 似乎认为它正在传输数据、并且您会收到传输中断。

    1.当您将引脚配置为 GPIO 时、是否可以指示使用 MCASP PFUNC 寄存器或全局填充控制寄存器。 您能否确认您使用 TI 引脚多路复用工具而不是手动配置生成了引脚多路复用器。
    请为 FSYNC、发送串行器和发送时钟引脚(ACLKX)提供 PINMUX 的寄存器转储、并确认 INPUTENABLE 被设置为1以进行时钟和帧同步
    3.您是否了解了编解码器的设置和保持时间。 有一个报告的 MCASP 从机的情况、其中帧同步建立/保持时间导致了类似的问题:
    e2e.ti.com/.../1607710
    4.您是否可以使用设置尝试单字宽度而不是当前单位宽的帧同步?


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

    好的、我再次回到这个项目

    1) 1)当我将引脚配置为 GPIO 并观察引脚上升和下降时、我是通过 McASP GPIO 控件执行此操作的。 我确实使用引脚多路复用工具来确定我的引脚多路复用器。

    2) 2)您有我的项目、因此您可以查找我的 pinmux 代码。 但如果您删除了它、这里是我的引脚多路复用设置:

    *(((U32 *)(PINMUX_BASE + 0x1d0))=(PIN_INPUT | MUX_MODE0);//(C11) TMs.TMS *
    *(((U32 *)(PINMUX_BASE + 0x1d4))=(PIN_INPUT | MUX_MODE0);//(B11) TDI.tDI */
    *(((U32 *)(PINMUX_BASE + 0x1d8))=(PIN_OUTPUT | MUX_MODE0);//(A11) TDO.TDO */
    *(((U32 *)(PINMUX_BASE + 0x1dc))=(PIN_INPUT | MUX_MODE0);//(A12) TCK.TCK *
    *((U32 *)(PINMUX_BASE + 0x1e0))=(PIN_INPUT | MUX_MODE0);//(B10) nTRST.nTRST *
    *((U32 *)(PINMUX_BASE + 0x1e4))=(PIN_INPUT | MUX_MODE0);//(C14) EMU0.EMU0 *
    *(((U32 *)(PINMUX_BASE + 0x1e8))=(PIN_INPUT | MUX_MODE0);//(B14) EMU1.EMU1 *

    *(((U32 *)(PINMUX_BASE + 0x88))=(PIN_INPUT_PULLUP | MUX_MODE7);//(T13) GPMC_csn3.GPIO2[0]*
    *(((U32 *)(PINMUX_BASE + 0x8c))=(PIN_INPUT 下拉| MUX_MODE7);//(V12) GPMC_clk.GPIO2[1]*
    *(((U32 *)(PINMUX_BASE + 0x90))=(PIN_INPUT_PULLUP | MUX_MODE7);//(R7) GPMC_ADVn_ALE.GPIO2[2]*
    *(((U32 *)(PINMUX_BASE + 0x94))=(PIN_OUTPUT | MUX_MODE7);//(T7) GPMC_oen_ren.GPIO2[3]*/
    *(((U32 *)(PINMUX_BASE + 0x98))=(PIN_INPUT 下拉| MUX_MODE7);//(U6) GPMC_WN.GPIO2[4]*/
    *(((U32 *)(PINMUX_BASE + 0x9C))=(PIN_INPUT_PULLUP | MUX_MODE7);//(T6) GPMC_BE0n_cle。GPIO2[5]*
    *(((U32 *)(PINMUX_BASE + 0x134))=(PIN_INPUT 下拉| MUX_MODE7);//(L17) gmii1_rxd3.gpio2[18]*
    *(((U32 *)(PINMUX_BASE + 0x138))=(PIN_INPUT_PULLUP | MUX_MODE7);//(L16) gmii1_rxd2.gpio2[19]*
    *(((U32 *)(PINMUX_BASE + 0x13c))=(PIN_INPUT_PULLUP | MUX_MODE7);//(L15) gmii1_rxd1.gpio2[20]*/
    *(((U32 *)(PINMUX_BASE + 0x140))=(PIN_INPUT_PULLUP | MUX_MODE7);//(M16) gmii1_rxd0.gpio2[21]*

    *((U32 *)(PINMUX_BASE + 0x164))=(PIN_INPUT | MUX_MODE7);//(C18) eCAP0_IN_PWM0_OUT.GPIO0[7]*
    *(((U32 *)(PINMUX_BASE + 0x11c))=(PIN_INPUT | MUX_MODE7);//(J18) gmii1_txd3.gpio0[16]*
    *(((U32 *)(PINMUX_BASE + 0x120))=(PIN_INPUT | MUX_MODE7);//(K15) gmii1_txd2.gpio0[17]*/
    *(((U32 *)(PINMUX_BASE + 0x124))=(PIN_INPUT | MUX_MODE7);//(K16) gmii1_txd1.gpio0[21]*/
    *(((U32 *)(PINMUX_BASE + 0x20))=(PIN_INPUT | MUX_MODE7);//(U10) GPMC_AD8.GPIO0[22]*
    *(((U32 *)(PINMUX_BASE + 0x24))=(PIN_INPUT | MUX_MODE7);//(T10) GPMC_ad9.GPIO0[23]*
    *((U32 *)(PINMUX_BASE + 0x28))=(PIN_INPUT | MUX_MODE7);//(T11) GPMC_ad10.GPIO0[26]*
    *(((U32 *)(PINMUX_BASE + 0x2C))=(PIN_INPUT | MUX_MODE7);//(U12) GPMC_AD11.GPIO0[27]*
    *(((U32 *)(PINMUX_BASE + 0x144))=(PIN_INPUT_PULLUP | MUX_MODE7);//(H18) rmii1_ref_clk.GPIO0[29]*

    *((U32 *)(PINMUX_BASE + 0x0))=(PIN_INPUT | MUX_MODE7);//(U7) GPMC_ad0.GPIO1[0]*
    *((U32 *)(PINMUX_BASE + 0x4))=(PIN_INPUT | MUX_MODE7);//(V7) GPMC_ad1.GPIO1[1]*
    *((U32 *)(PINMUX_BASE + 0x8))=(PIN_INPUT | MUX_MODE7);//(R8) GPMC_ad2.GPIO1[2]*
    *((U32 *)(PINMUX_BASE + 0xc))=(PIN_INPUT | MUX_MODE7);//(T8) GPMC_ad3.GPIO1[3]*/
    *(((U32 *)(PINMUX_BASE + 0x10))=(PIN_INPUT | MUX_MODE7);//(U8) GPMC_AD4.GPIO1[4]*/
    *(((U32 *)(PINMUX_BASE + 0x14))=(PIN_INPUT | MUX_MODE7);//(V8) GPMC_AD5.GPIO1[5]*
    *(((U32 *)(PINMUX_BASE + 0x18))=(PIN_INPUT | MUX_MODE7);//(R9) GPMC_AD6.GPIO1[6]*
    *(((U32 *)(PINMUX_BASE + 0x1c))=(PIN_INPUT | MUX_MODE7);//(T9) GPMC_AD7.GPIO1[7]*
    *(((U32 *)(PINMUX_BASE + 0x170))=(PIN_INPUT | MUX_MODE7);//(E15) uart0_RxD.GPIO1[10]*
    *((U32 *)(PINMUX_BASE + 0x30))=(PIN_INPUT | MUX_MODE7);//(T12) GPMC_AD12.GPIO1[12]*
    *((U32 *)(PINMUX_BASE + 0x34))=(PIN_INPUT | MUX_MODE7);//(R12) GPMC_ad13.GPIO1[13]*
    *(((U32 *)(PINMUX_BASE + 0x38))=(PIN_INPUT | MUX_MODE7);//(V13) GPMC_ad14.GPIO1[14]*
    *(((U32 *)(PINMUX_BASE + 0x3c))=(PIN_INPUT | MUX_MODE7);//(U13) GPMC_ad15.GPIO1[15]*/
    *(((U32 *)(PINMUX_BASE + 0x44))=(PIN_INPUT | MUX_MODE7);//(V14) GPMC_A1.GPIO1[17]*
    *(((U32 *)(PINMUX_BASE + 0x48))=(PIN_INPUT | MUX_MODE7);//(U14) GPMC_A2.GPIO1[18]*
    *(((U32 *)(PINMUX_BASE + 0x4c))=(PIN_INPUT | MUX_MODE7);//(T14) GPMC_A3.GPIO1[19]*
    *(((U32 *)(PINMUX_BASE + 0x58))=(PIN_INPUT | MUX_MODE7);//(U15) GPMC_A6.GPIO1[22]*
    *(((U32 *)(PINMUX_BASE + 0x5c))=(PIN_INPUT | MUX_MODE7);//(T15) GPMC_A7.GPIO1[23]*
    *(((U32 *)(PINMUX_BASE + 0x60))=(PIN_INPUT | MUX_MODE7);//(V16) GPMC_A8.GPIO1[24]*
    *(((U32 *)(PINMUX_BASE + 0x64))=(PIN_INPUT | MUX_MODE7);//(U16) GPMC_A9.GPIO1[25]*
    *(((U32 *)(PINMUX_BASE + 0x78))=(PIN_INPUT | MUX_MODE7);//(U18) GPMC_BE1n.GPIO1[28]*/
    *(((U32 *)(PINMUX_BASE + 0x7c))=(PIN_INPUT | MUX_MODE7);//(V6) GPMC_csn0.GPIO1[29]*/
    *((U32 *)(PINMUX_BASE + 0x80))=(PIN_INPUT | MUX_MODE7);//(U9) GPMC_csn1.GPIO1[30]*
    *(((U32 *)(PINMUX_BASE + 0x84))=(PIN_INPUT | MUX_MODE7);//(V9) GPMC_csn2.GPIO1[31]*/

    *((U32 *)(PINMUX_BASE + 0x114))=(PIN_INPUT | MUX_MODE7);//(J16) gmii1_txen.GPIO3[3]*/
    *((U32 *)(PINMUX_BASE + 0x118))=(PIN_INPUT | MUX_MODE7);//(J17) gmii1_rxdv.GPIO3[4]*/
    *(((U32 *)(PINMUX_BASE + 0x188))=(PIN_INPUT_PULLUP | MUX_MODE7);//(C17) I2C0_SDA.GPIO3[5]*
    *(((U32 *)(PINMUX_BASE + 0x18c))=(PIN_INPUT | MUX_MODE7);//(C16) I2C0_SCL.GPIO3[6]*/
    *(((U32 *)(PINMUX_BASE + 0x12c))=(PIN_INPUT | MUX_MODE7);//(K18) gmii1_txclk.GPIO3[9]*
    *((U32 *)(PINMUX_BASE + 0x130))=(PIN_INPUT | MUX_MODE7);//(L18) gmii1_rxclk.GPIO3[10]*
    *(((U32 *)(PINMUX_BASE + 0x234))=(PIN_INPUT | MUX_MODE7);//(F15) USB1_DRVVBUS.GPIO3[13]*/
    *(((U32 *)(PINMUX_BASE + 0x19c))=(PIN_INPUT | MUX_MODE7);//(C12) McASP0_ahclkr.GPIO3[17]*/
    *(((U32 *)(PINMUX_BASE + 0x1a0))=(PIN_INPUT | MUX_MODE7);//(B12) McASP0_aclkr.GPIO3[18]*/
    *(((U32 *)(PINMUX_BASE + 0x1a4))=(PIN_INPUT | MUX_MODE7);//(C13) McASP0_fsr.GPIO3[19]*
    *(((U32 *)(PINMUX_BASE + 0x1ac))=(PIN_INPUT | MUX_MODE7);//(A14) McASP0_ahclkx.GPIO3[21]*

    *((U32 *)(PINMUX_BASE + 0x190))=(PIN_INPUT | MUX_MODE0);//(A13) McASP0_aclkx.McASP0_aclkx *
    *((U32 *)(PINMUX_BASE + 0x194))=(PIN_INPUT | MUX_MODE0);//(B13) McASP0_FSX.McASP0_FSX *
    *(((U32 *)(PINMUX_BASE + 0x198))=(PIN_INPUT | MUX_MODE0);/*(D12) McASP0_axr0.McASP0_axr0 */
    *(((U32 *)(PINMUX_BASE + 0x1a8))=(PIN_INPUT | MUX_MODE0);//(D13) McASP0_axr1.McASP0_axr1 *

    *(((U32 *)(PINMUX_BASE + 0x10c))=(PIN_INPUT | MUX_MODE4);//(H17) gmii1_crs.McASP1_aclkx *
    *((U32 *)(PINMUX_BASE + 0x110))=(PIN_INPUT | MUX_MODE4);//(J15) gmii1_rxer.McA1_FSX *
    *((U32 *)(PINMUX_BASE + 0x128))=(PIN_INPUT | MUX_MODE3);//(K17) gmii1_txd0.McASP1_axr2 *
    *(((U32 *)(PINMUX_BASE + 0x144))=(PIN_INPUT | MUX_MODE4);//(H18) rmii1_REFCLK/McASP1_axr3 *

    *((U32 *)(PINMUX_BASE + 0x14c))=(PIN_OUTPUT | MUX_MODE0);//(M18) MDIO_clk.MDIO_clk *
    *((U32 *)(PINMUX_BASE + 0x148))=(PIN_INPUT | MUX_MODE0);//(M17) MDIO_DATA.MDIO_DATA *

    *(((U32 *)(PINMUX_BASE + 0x1b0))=(PIN_INPUT | MUX_MODE0);//(A15) xdma_event_intr0.xdma_event_intr0 */
    *(((U32 *)(PINMUX_BASE + 0x1b4))=(PIN_INPUT | MUX_MODE0);//(D14) xdma_event_intr1.xdma_event_intr1 */

    *(((U32 *)(PINMUX_BASE + 0x174))=(PIN_OUTPUT | MUX_MODE4);//(E16) uart0_TXD.eCAP1_IN_PWM1_OUT *

    *((U32 *)(PINMUX_BASE + 0xe0))=(PIN_OUTPUT | MUX_MODE0);//(U5) LCD_vSYNC.LCD_vsync *
    *((U32 *)(PINMUX_BASE + 0xe4))=(PIN_OUTPUT | MUX_MODE0);//(R5) LCD_HSYNC.LCD_HSYNC *
    *((U32 *)(PINMUX_BASE + 0xe8))=(PIN_OUTPUT | MUX_MODE0);//(V5) LCD_pclk.LCD_pclk *
    *((U32 *)(PINMUX_BASE + 0xec))=(PIN_OUTPUT | MUX_MODE0);//(R6) LCD_AC_BIAS_EN.LCD_AC_BIAS_EN *
    *((U32 *)(PINMUX_BASE + 0xa0))=(PIN_OUTPUT | MUX_MODE0);//(R1) LCD_Data0.LCD_Data0 *
    *(((U32 *)(PINMUX_BASE + 0xa4))=(PIN_OUTPUT | MUX_MODE0);//(R2) LCD_data1.LCD_data1 *
    *(((U32 *)(PINMUX_BASE + 0xa8))=(PIN_OUTPUT | MUX_MODE0);//(R3) LCD_data2.LCD_data2 *
    *(((U32 *)(PINMUX_BASE + 0xac))=(PIN_OUTPUT | MUX_MODE0);//(R4) LCD_data3.LCD_data3 *
    *((U32 *)(PINMUX_BASE + b0))=(PIN_OUTPUT | MUX_MODE0);//(T1) LCD_data4.LCD_data4 *
    *((U32 *)(PINMUX_BASE + b4))=(PIN_OUTPUT | MUX_MODE0);//(T2) LCD_data5.LCD_data5 *
    *((U32 *)(PINMUX_BASE + b8))=(PIN_OUTPUT | MUX_MODE0);//(T3) LCD_data6.LCD_data6 *
    *((U32 *)(PINMUX_BASE + bb c))=(PIN_OUTPUT | MUX_MODE0);//(T4) LCD_data7.LCD_data7 *
    *((U32 *)(PINMUX_BASE + 0xc0))=(PIN_OUTPUT | MUX_MODE0);//(U1) LCD_data8.LCD_data8 *
    *((U32 *)(PINMUX_BASE + 0xc4))=(PIN_OUTPUT | MUX_MODE0);//(U2) LCD_data9.LCD_data9 *
    *((U32 *)(PINMUX_BASE + 0xc8))=(PIN_OUTPUT | MUX_MODE0);//(U3) LCD_data10.LCD_data10 *
    *(((U32 *)(PINMUX_BASE + 0xcc))=(PIN_OUTPUT | MUX_MODE0);//(U4) LCD_data11.LCD_data11 *
    *(((U32 *)(PINMUX_BASE + 0xd0))=(PIN_OUTPUT | MUX_MODE0);//(V2) LCD_data12.LCD_data12 *
    *(((U32 *)(PINMUX_base + 0xd4))=(PIN_OUTPUT | MUX_MODE0);//(V3) LCD_data13.LCD_data13 *
    *((U32 *)(PINMUX_BASE + 0xd8))=(PIN_OUTPUT | MUX_MODE0);//(V4) LCD_data14.LCD_data14 *
    *(((U32 *)(PINMUX_BASE + 0xdc))=(PIN_OUTPUT | MUX_MODE0);//(T5) LCD_data15.LCD_data15 *

    *((U32 *)(PINMUX_BASE + 0x70))=(PIN_INPUT | MUX_MODE3);//(T17) GPMC_wait0.rmii2_crs_dv *
    *((U32 *)(PINMUX_BASE + 0x74))=(PIN_INPUT | MUX_MODE3);//(U17) GPMC_WPN.rmii2_rxer *
    *((U32 *)(PINMUX_BASE + 0x40))=(PIN_OUTPUT | MUX_MODE3);//(R13) GPMC_a0.rmii2_txen */
    *((U32 *)(PINMUX_BASE + 0x54))=(PIN_OUTPUT | MUX_MODE3);//(V15) GPMC_A5.rmii2_txd0 */
    *((U32 *)(PINMUX_BASE + 0x50))=(PIN_OUTPUT | MUX_MODE3);//(R14) GPMC_A4.rmii2_txd1 *
    *((U32 *)(PINMUX_BASE + 0x6c))=(PIN_INPUT | MUX_MODE3);//(V17) GPMC_A11.rmii2_rxd0 *
    *((U32 *)(PINMUX_BASE + 0x68))=(PIN_INPUT | MUX_MODE3);//(T16) GPMC_A10.rmii2_rxd1 */
    *(((U32 *)(PINMUX_BASE + 0x108))=(PIN_INPUT | MUX_MODE1);//(H16) gmii1_col.rmii2_REFCLK *

    *((U32 *)(PINMUX_BASE + 0x100))=(PIN_OUTPUT | MUX_MODE0);//(G17) mmc0_clk.mmc0_clk *
    *((U32 *)(PINMUX_BASE + 0x104))=(PIN_OUTPUT | MUX_MODE0);//(G18) mmc0_cmd.mmc0_cmd *
    *(((U32 *)(PINMUX_BASE + 0xFC))=(PIN_INPUT | MUX_MODE0);//(G16) mmc0_data0.mmc0_data0 */
    *(((U32 *)(PINMUX_BASE + 0xf8))=(PIN_INPUT | MUX_MODE0);//(G15) mmc0_data1.mmc0_data1 *
    *(((U32 *)(PINMUX_BASE + 0xf4))=(PIN_INPUT | MUX_MODE0);//(F18) mmc0_data2.mmc0_data2 *
    *(((U32 *)(PINMUX_BASE + 0xf0))=(PIN_INPUT | MUX_MODE0);//(F17) mmc0_data3.mmc0_data3 *

    *((U32 *)(PINMUX_BASE + 0x16c))=(PIN_INPUT | MUX_MODE3);//(E17) uart0_rtsn.I2C1_SCL *
    *((U32 *)(PINMUX_BASE + 0x168))=(PIN_INPUT | MUX_MODE3);//(E18) uart0_CTSN.I2C1_SDA *

    *(((U32 *)(PINMUX_BASE + 0x21c))=(PIN_OUTPUT | MUX_MODE0);//(F16) USB0_DRVVBUS.USB0_DRVVBUS *

    *(((U32 *)(PINMUX_BASE + 0x150))=(PIN_INPUT | MUX_MODE0);//(A17) spi0_SCLK.spi0_SCLK */
    *((U32 *)(PINMUX_BASE + 0x154))=(PIN_OUTPUT | MUX_MODE0);//(B17) spi0_d0.spi0_d0 *
    *(((U32 *)(PINMUX_BASE + 0x158))=(PIN_INPUT | MUX_MODE0);//(B16) spi0_D1.spi0_D1 *
    *((U32 *)(PINMUX_BASE + 0x15c))=(PIN_OUTPUT | MUX_MODE0);//(A16) spi0_cs0.spi0_cs0 *
    *((U32 *)(PINMUX_BASE + 0x160))=(PIN_OUTPUT | MUX_MODE0);//(C15) spi0_CS1.spi0_CS1 *

    *(((U32 *)(PINMUX_BASE + 0x180))=(PIN_INPUT | MUX_MODE0);//(D16) uart1_Rxd.uart1_RxD */
    *((U32 *)(PINMUX_BASE + 0x184))=(PIN_OUTPUT | MUX_MODE0);//(D15) uart1_TXD.uart1_TXD *
    *((U32 *)(PINMUX_BASE + 0x178))=(PIN_INPUT | MUX_MODE0);//(D18) uart1_CTSN.uart1_CTSn *
    *(((U32 *)(PINMUX_BASE + 0x17c))=(PIN_OUTPUT | MUX_MODE0);//(D17) uart1_rtsn.uart1_rtsn *

    其中:

    #define PINMUX_BASE          (CONTRAL_BASE + 0x800)

    #define CONTRAL_BASE         0x44E10000

    #define PIN_INPUT 0x00000020
    #define PIN_OUTPUT 0x00000000
    #define PIN_INPUT_PULLUP 0x00000030
    #define PIN_INPUT_PULLDOWN 0x00000020
    #define PIN_PULL_DISABLE 0x00000008
    #define MUX_MODE0 0x00000000
    #define MUX_MODE1 0x00000001
    #define MUX_Mode2 0x00000002
    #define MUX_MODE3 0x00000003
    #define MUX_MODE4 0x00000004
    #define MUX_MODE5 0x00000005
    #define MUX_MODE6 0x00000006
    #define MUX_MODE7 0x00000007

    遗憾的是、我们用于创建此设置的保存的 pinmux 文件将不再加载到 pinmux 实用程序中。 用于 AXR0、AXR1、ACLKX 和 McASP0的 FSX 的引脚是输入

    3) 3)我将查看编解码器的设置和保持时间、但我不知道如果它们不匹配我将要做什么

    4) 4)我使用320AIC3106编解码器作为主器件、遗憾的是它没有用于帧同步的选项(我可以找到)。 我是否提到接收对两个通道都有效?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    3) 3)我查看了编解码器与 McASP 的设置和保持时间、看起来它们应该应用良好。 主器件(编解码器)的最短时间长于从器件(McASP)的最短时间。 老实说、TI 编解码器无论如何都不能与 TI 处理器配合使用、我会感到惊讶
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否发布时钟和帧同步的屏幕截图、以便让我再看一下?

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

    e2e.ti.com/.../McASP-captures.ziphere是我们范围内的一组屏幕。  1是 Fs、2是位时钟、3是发送、4是接收。 您可以看到 RX 正常、TX 不执行任何操作

    激发5和6是来自编解码器的第一个 FS 突发。 3和4以及 FS 边沿的特写、1和2只是显示了它的外观概述

    如果您需要数据表中的时序、并且想要该良好状态的屏幕截图、您可以在3352 (第211页第7.11.2节) 和320AIC3106数据表(第10页第9.6节)的数据表中找到这些时序。

    是否可能无法正确处理欠运转情况? 我在 HWI 中捕获它们以用于 McASP TX 中断、我设置布尔值以复位外设、在任务(级别1)中、我通过禁用 RX 和 TX 的中断(Hwi_disableMIR2 (HWI_MASK_MIR2_McASP0_CODE_TX | HWI_MASK_MIR2_McASP0_CODE_TX)来对该布尔值执行操作、然后再次运行相同的函数。 这将始终使我的中断再次启动、但在 TX 线上没有任何活动

    #define HWI_MASK_MIR2_McASP0_CODEC _TX (1<<(80-64))
    #define HWI_MASK_MIR2_McASP0_CODEC _RX (1<<(81-64))

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

    您当前如何配置 CLKXP?  我看到您曾尝试过一次更改、但从您的时序来看、CLKXP=0很明显会违反时序要求。  必须使用 CLKXP=1。  我认为,这显然是一个问题,尽管可能是多个问题中的第一个问题。  我们需要进行此更改并进行进一步分析。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此外、我建议使用 AIC3106的 I2S 传输模式。 看起来您当前使用的是"DSP 模式"。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、我将 CLKXP 配置为 CLKXP= 1。 请记住、编解码器在我们的项目中生成 WCLK 和 BCLK

    找出所有可能的问题。 我很想弄清楚这一点、我当然不是专家。

    DSP 或 I2S、我想我应该能够让它以任一方式工作。 在我们确定该引脚的错误后、我将介绍 I2S

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

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

    我尝试了 I2S 模式、得到了相同的结果

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

    我有一些时间研究这条线、但我还没有发现吸烟枪。 请参阅以下内容...

    首先、确认您正在探测 AM335x 和编解码器之间测试点的信号。 编解码器提供哪些位时钟和 LR 时钟频率?

    *对我来说、寄存器转储看起来不错。 除了从 AHCLKR 引脚读取 MCASP_ACLKRCTL 寄存器的保留区域中的位、以及为外部接收高频时钟源设置的 AHCLKRCTL/AHCLKXCTL 寄存器之外、我无法确定任何问题。 我怀疑 RSTAT/XSTAT 中设置的错误标志是从停止 CCS 读取寄存器。 您能否在为中断提供服务时使用软件转储寄存器以实现更精确的状态?

    *我想看到 McASP pinmux 的寄存器转储作为完整性检查、但代码看起来设置正确。 我认为 AXR1发送引脚应在接收器被启用的情况下工作、但仅值得作为输出引脚尝试...

    *原理图看起来不错- McASP 和编解码器之间只有4个连接。 非常简单。

    *我收到的布局光绘在各层之间存在一些对齐问题、我实际上无法跟踪从编解码器到处理器的布线。 过孔未在第1层和第5层之间对齐...

    *我仔细检查了您的初始化序列。 我认为它严格遵循 TRM 文档。

    *在最初向其写入0以进行复位后、也许可以尝试添加一个读回并验证 GBLCTL 寄存器...
    TRM 第25.0.21.1.2节"发送/接收部分初始化"中未说明这一点、但25.0.21.1.4读回 GBLCTL 的重要性说明"如果跳过此步骤、McASP 可能永远不会看到全局控制寄存器中的 RESET 位被置为有效和置为无效、从而导致未初始化的 McASP。"
    通常需要两个位时钟和两个 DSP 总线时钟、才能对 GBLCTL 进行写操作、从而通过 McASP 外设进行传播。

    *有关高速 HCLK 配置的兼容性的文档不清楚
    -在 TRM 第25.0.21.1.2节中、步骤4显示"启动各自的高频串行时钟 AHCLKX 和/或 AHCLKR。 即使使用了外部高频串行时钟、也需要执行此步骤。" 我看到您已按照25.0.21.1.2开始使用它们、但它们是从外部提供的 AHCLKR/X 引脚、这些引脚不会进行引脚多路复用或提供时钟。
    -在高频时钟源位被清零(外部供源)的情况下使能高频时钟可能无效(AHCLKRCTL 中的 HCLKRM 位/ AHCLKXCTL 寄存器中的 HCLKXM 位)
    不过、第25.0.21节的内容是" McASP 需要最少的位时钟和帧同步才能运行"、因此可以允许高频时钟关闭... 值得尝试在内部提供这些时钟... 您可能已经根据注释掉的代码尝试了这种方法:* McASP0_AHCLKXCTL = 0;//MCASP_XCLKCHK_INTERNAL | MCASP_XCLKCHK_divide_down;
    -至少、如果没有有效的高频时钟、时钟故障检查电路将无法正常运行: "为了使发送时钟故障检查电路正常运行、无论 AHCLKX 是内部生成的还是外部源的、都必须将高频串行时钟分频器从复位状态中取出"... 但您没有使用此功能或启用它可能生成的中断。
    -通过配置系统配置模块芯片配置3寄存器(CFGCHIP3)中的 ASINNC3_CLKSRC 位、可以选择将 McASP 模块时钟选为 PLL0_SYSCLK2或 PLL1_SYSCLK2 -您尝试了什么设置?

    *在您的 TX ISR 中、可能会对可能产生提示的其他中断的实例进行计数-例如 XSYNCERR。 您能否确认 TX ISR 是否按预期频率运行? 很明显、它是、或者您的初始化例程将在 while (* McASP0_XSTAT 和 MCASP_XSTAT_DATA_RDY)处挂起!= 0);
    -我还认为插槽=(U8)(((Status>>3)和0x01);是向后处理的,但现在几乎没有结果- XSTAT 中的 XTDMSLOT 位:0 =当前 TDM 时隙是奇数,1 =当前 TDM 时隙是偶数。

    *以防万一、请确保 CCS 存储器或寄存器窗口不监视 XRBUF 位置-读取 XRBUF 会清除 RSTAT 中的 RDATA 位和 XSTAT 中的 XDATA 位

    *对于 I2S 格式、(R/X) DATDLY 应设置为1位延迟、而对于左对齐格式、应设置为0位延迟。 当您针对寄存器转储尝试此实验时、您是否也修改了编解码器寄存器设置? 当您从 DSP 格式转换为 I2S 格式时、还有同样的问题吗?

    如果您仍然无法使 TX 引脚切换、我会将一些内容作为调试步骤进行回退。 从 TX ISR 中消除条件语句、并输出将像0xAAAA 或0x5555一样切换的模式。
    切换到轮询模式而不是中断模式、只是为了查看 TX 引脚的切换情况。
    消除其他 BIOS 任务以专注于 McASP 调试...

    请告诉我这是否有任何帮助。

    此致、
    标记
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然、这里还有很多要消化的东西

    1) 1)我在上一篇文章中发布了来自 McASP 的每个信号的捕获: e2e.ti.com/.../McASP-captures.zip 我获得了正确的8kHz 帧同步和250kHz 时钟

    2) 2)我可以尝试从软件转储寄存器、但您指示的所有寄存器都是接收寄存器、并且接收数据时没有问题。 我从编解码器获取数据、一切正常。 接收侧的问题是否会影响 TX 引脚的功能? 我将处理寄存器转储。

    3) 3)如果您需要、我可以提供引脚多路复用寄存器转储、但我知道以下情况:在 McASP 模块内部、我将该引脚更改为 GPIO (通过 PFUNC 和 Pdir)、我可以让该线路作为 GPIO 线路切换我所需的所有内容。 因此、我知道引脚多路复用器已将其正确设置为正确的引脚。 此外、当我尝试将其用作串行器时、我已经尝试将其用作输入和输出、但它对引脚的功能没有任何影响。

    4) 4)我很高兴连接看起来正常。

    5) 5)我将让硬件布局人员对此进行研究

    6) 6)很高兴我按照顺序执行操作。

    7) 7)我将读回 GBLCTL 寄存器

    8) 8)这里有很多。 根据我收集的内容:我需要在打开 AH 时钟之前尝试为其提供时钟(是的、我已经尝试过)。 我会再试一次。 我不打算使用时钟错误中断。 我是否需要它才能正常工作? 我没有在任何地方读过它说它是一个需要中断来监控和处理的地方。 至于模块的时钟源、我一直使用默认时钟源、但我没有尝试更改它。 我可以尝试其他时钟源

    9)我确实观察欠运转、我认为我没有打开 SYNCERROR (但我很确定我之前已经打开了它。 很难记住、我尝试了很多东西)、但我会尝试看看我们是否得到了它的任何实例。 我可以再次检查以确保我们以正确的速率运行中断、但在运行中断时、直到刷新表达式监视器后、我才会收到任何欠运转错误。 不过、我将再次检查它。

    10) 10)当我测试这个东西时、我尝试保持寄存器窗口关闭

    11)是的、在 I2S 和 DSP 模式之间切换时、我针对位延迟进行了调整。 我想、如果我错了、请纠正我的错误、即使我不这样做、最糟糕的情况是我的数据会出错。 这对我来说还可以、我至少可以解决这个问题。

    12) 12)现在、我尝试根据一组常数输出一个正弦波。 我想我可以尝试轮询模式

    我现在在这里做了一些家庭作业。 当我尝试过其中的一些内容时、我会再回来
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下是 McASP0的引脚多路复用器:

    以下是实时寄存器:

    它们遵循寄存器列表:

    0 McASP0_REV
    1 McASP0_PWRIDLESYSC65
    2 McASP0_PFUNC
    3 McASP0_Pdir
    4 McASP0_PDOUT
    5 McASP0_PDIN
    6 McASP0_PDCLR
    7 McASP0_GBLCTL
    8 McASP0_AMUTE
    9 McASP0_DLBCTL
    10 McASP0_DITCTL
    11 McASP0_RGBLCTL
    12 McASP0_RMASK
    13 McASP0_RFMT
    14 McASP0_AFESRCTL
    15 McASP0_ACLKRCTL
    16 McASP0_AHCLKRCTL
    17 McASP0_RTDM
    18 McASP0_RINTCTL
    19 McASP0_RSTAT
    20 McASP0_RSLOT
    21 McASP0_RCLKCHK
    22 McASP0_REVTCTL
    23 McASP0_XGBLCTL
    24 McASP0_XMASK
    25 McASP0_XFMT
    26 McASP0_AFSXCTL
    27 McASP0_ACLKXCTL
    28 McASP0_AHCLKXCTL
    29 McASP0_XTDM
    30 McASP0_XINTCTL
    31 McASP0_XSTAT
    32 McASP0_XSLOT
    33 McASP0_XCLKCHK
    34 McASP0_XEVTCTL
    35 McASP0_DITCSRA_0
    36 McASP0_DITCSRA_1
    37 McASP0_DITCSRA_2
    38 McASP0_DITCSRA_3
    39 McASP0_DITCSRA_4
    40 McASP0_DITCSRA_5
    41 McASP0_DITCSRB_0
    42 McASP0_DITCSRB_1
    43 McASP0_DITCSRB_2
    44 McASP0_DITCSRB_3
    45 McASP0_DITCSRB_4
    46 McASP0_DITCSRB_5
    47 McASP0_DITUDRA_0
    48 McASP0_DITUDRA_1
    49 McASP0_DITUDRA_2
    50 McASP0_DITUDRA_3
    51 McASP0_DITUDRA_4
    52 McASP0_DITUDRA_5
    53 McASP0_DIBUDRB_0
    54 McASP0_DICUDRB_1
    55 McASP0_DICUDRB_2
    56 McASP0_DICUDRB_3
    57 McASP0_DICUDRB_4
    58 McASP0_DICUDRB_5
    59 McASP0_SRCTL_0
    60 McASP0_SRCTL_1
    61 McASP0_SRCTL_2
    62 McASP0_SRCTL_3
    63 McASP0_SRCTL_4
    64 McASP0_SRCTL_5
    65 McASP0_XBUF_0
    66 McASP0_XBUF_1
    67 McASP0_XBUF_2
    68 McASP0_XBUF_3
    69 McASP0_XBUF_4
    70 McASP0_XBUF_5
    71 McASP0_RBUF_0
    72 McASP0_RBUF_1
    73 McASP0_RBUF_2
    74 McASP0_RBUF_3
    75 McASP0_RBUF_4
    76 McASP0_RBUF_5
    77 McASP0_WFIFOCTL
    78 McASP0_WFIFOSTS
    78 McASP0_RFIFOCTL
    79 McASP0_RFIFOSTS

    我再次尝试将串行器引脚作为引脚复用设置中的输出、没有变化。 我尝试用一个内部时钟设置 AH 时钟、没有改变。 我在重置 GBLCTL 寄存器时尝试读回它、没有改变。 我检查了 TX 中断的发生速率:每8kHz Fs 2次、因此看起来不错。 我在 AM3352中找不到任何 SysConfig 寄存器或模块。 请帮帮我。

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

    大家好、鹅卵石

    我们能够再现 McASP 发送串行器、而不是与您的软件切换。

    它似乎是由 XMASK 寄存器与从 TxSample 向 XBUF1寄存器写入的16位不匹配引起的。

    为了进行调试、我用0xAAAAAAAA 代替了对 TxISR 中 XBUF1的写入(也通过单独的实验尝试0x0000AAAA 和0xAA0000)。

    每当 XMASK = 0x0000FFFF 时、无论写入 XBUF1的内容是什么(0xAAAAAAAA、0x0000AAAA 或0xAAAA0000)、Tx 串行器都会输出零。 我还观察到 NumOfUnderruns 在每种情况下都缓慢递增...

    当 XMASK = 0xFFFFFF0000时、Tx 串行器在将0x0000AAAA 写入 XBUF1时移出所有零。 但是、当将0xAAAA0000或0xAAAAAAAA 写入 XBUF1时、它在位时钟的每个位上都翻转。 请参阅以下示波器屏幕截图。 我仍然观察到 NumOfUnderruns 在每种情况下缓慢递增。

    当 XMASK = 0xFFFFFFFF 时、结果与 XMASK = 0xFFFFFF0000相同。

    为了将它全部绑定在一起、我修改了您的初始化序列以使用 XMASK = 0xFFFFFF0000、并且在 TxISR 中、我将 TxSample 更改为有符号32位、然后将16位数据左移16位。 Tx 串行器输出外观良好的数据。 请参阅以下示波器屏幕截图。 请在您的结尾处进行复制、以确认它是否正确

    所做的更改:

    在 InitMcASP0 (void)中、设置* McASP0_XMASK = 0xFFFFFF0000;

    在 McASP0CodecTxISR (void)中...

    声明为32位... 静态 S32 TxSample = 0;

        向左移位16... TxSample =(否定15dB1000Hz[SineIndex0+]<<16);

        向左移位16... TxSample =(否定15dB1000Hz[SineIndexx1+]<<16);


    注:
    代码仍使用 DSP 模式(而不是 I2S 模式)- 1位帧脉冲
    编解码器设置未修改
    我不确定为什么接收操作的 RMASK = 0x0000FFFF。 在类型转换为16位变量时、32位 RBUF0寄存器的行为可能是这样的? 您能否对掩码和移位(RMASK 和 RBUF0)进行实验以确保其正确接收?

    另请参阅有关 McASP 32位访问要求的此 wiki

    http://processors.wiki.ti.com/index.php/McASP_Tips#32-bit_Access_Requirements

    ==========================-

    我的实验说明:

    * McASP0_XMASK = MCBSP_XMASK_16_BIT;//0x0000FFFF

    -更改为* McASP0_XBUF_1 = TxSample;更改为* McASP0_XBUF_1 = 0xAAAAAAAA;

    -观察 TX 引脚始终处于低电平(重现的问题)

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况

    -范围截屏222

    -更改为* McASP0_XBUF_1 = 0x0000AAAA;

    -观察 TX 引脚始终处于低电平(重现的问题)

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况

    -更改为* McASP0_XBUF_1 = 0xAAAA0000;

    -观察 TX 引脚是否始终为低电平

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况

    * McASP0_XMASK = 0xFFFFFFFF;  //32位掩码...

    -更改为* McASP0_XBUF_1 = TxSample;更改为* McASP0_XBUF_1 = 0xAAAAAAAA;

    -观察帧的每个位时钟(128kHz)的 TX 引脚切换

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况

    -范围截屏221

    -更改为* McASP0_XBUF_1 = 0xAAAA0000;

    -观察帧的每个位时钟(128kHz)的 TX 引脚切换

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况

    -更改为* McASP0_XBUF_1 = 0x0000AAAA;   

    -观察 TX 引脚始终处于低电平!

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况

    * McASP0_XMASK = 0xFFFFFF0000; //MSB 16位掩码

    -更改为* McASP0_XBUF_1 = TxSample;更改为* McASP0_XBUF_1 = 0xAAAAAAAA;

    -观察帧的每个位时钟(128kHz)的 TX 引脚切换

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况

    示波器快照220

    -更改为* McASP0_XBUF_1 = 0x0000AAAA;   

    -观察 TX 引脚始终处于低电平!

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况

    -更改为* McASP0_XBUF_1 = 0xAAAA0000;

    -观察帧的每个位时钟(128kHz)的 TX 引脚切换

    -观察在 TxISR 中 NumOfUnderruns 递增时的欠运转情况


    希望这对您有所帮助、
    标记

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

    我以为我提供了我的最新代码、因为我已经:

    静态 S16 TxSample = 0;
    S32 RealSample = 0;
    (笑声)
    RealSample =(S32) TxSample;
    * McASP0_XBUF_1 =实例;




    S32 RealData =* McASP0_RBUF_0;
    S16 RxData =(S16) RealData;

    因此、我将执行32位读取和写入。 显然只是到了错误的地方……

    我从您的帖子中得知、这似乎是该部件的未知行为、对吧?

    编辑:是的、似乎可以解决 AXR1引脚的问题

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

    大家好、鹅卵石

    我们现在有信心了解 McASP 与16位数据的机制。

    在 McASP0_XMASK = 0x0000FFFF 且 McASP0_XFMT 首先配置为 LSB 而不是 MSB 的情况下、我们观察到 XBUF1[15:0]中的16位数据从发送引脚移出。
    回想一下、在 XMASK = 0x0000FFFF 且 MSB 在 XFMT 中的第一个位已置位的情况下、即使将0xAAAAAAAA 写入 XBUF1寄存器、我们也会在发送引脚上观察到所有的零。 这是因为 XMASK 寄存器屏蔽了 XBUF[31:16]、而 MSB 在前、只有 XBUF[31:0]的16个最高有效位移出(向左移位)。 这证明了对于16位数据、当 LSB 优先被置位时、串行器移动 XBUF[15:0]、当 MSB 优先被置位时、串行器移动 XBUF[31:16]。

    在代码中、接收器也会首先移入数据 MSB、但由于时隙大小为16位、因此它会在16位时钟之后停止移位。 因此、RBUF0[15:0]中的数据将填充16位数据、这就是接收数据看起来正常的原因。

    请参阅 TRM:25.0.21.1串行器中 McASP 一章的"通用架构"部分。
    另请参阅该 wiki 页面、了解有关使用32位版本的一些提示: http://processors.wiki.ti.com/index.php/McASP_Tips#32-bit_Access_Requirements

    希望这对您有所帮助、
    标记

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    嗯、很高兴我们最终确定了这一点。 我现在能够为我的扬声器提供音频(它具有大量静态、但我认为这可能是编解码器设置)。

    考虑到我已经发布了我的代码和寄存器设置多少次、没有人发现了这一点、这种工作方式一定会让大家感到惊讶。

    既然你们有我的硬件、你们为什么不把它提供给帮助我解决 NDK 问题的团队、我可能也可以做出类似的突破。 我认为 Victor 可以帮助解决这个问题。 谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Michael、

    感谢您对此问题的耐心等待。 与 MCASPn`t 处理16位数据的过程甚至在过去也很复杂、因此在我们的示例中、当我们使用16位数据时、我们将左右通道数据打包在一起、并将其传输到32位的单个插槽中、因此我们不会看到这个问题 我们的软件驱动程序。 此外、我们的 MCASP 驱动程序使用内核和 EDMA 写入器写入 AIFO、而不是写入发送寄存器、以允许处理多通道和更高的采样率。

    在8月的 E2En`t 上与您讨论此问题时、我们确实怀疑 IP 的32位访问要求是潜在的根本原因、但我们确实怀疑当配置设置为在16位时首先传输 MSB 时、用户必须移动数据 数据被移入发送缓冲区、因此当数据为16位时、它是我们在配套资料中进行通信的有用数据点。

    我们已经与 Victor 沟通过这一点、并将继续研究剩余的 NDK 问题。

    此致、
    Rahul