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.

cc3200 I2C I2S 冲突

E2E china,

你们好。最近在仿照sdk中的wifi_audio_app开发项目,其中同时用到了I2C和I2S分别采集IMU和麦克风的数据(没有使用audioboost扩展板)。在调试的过程中,现发现出现了IMU数据时不时不能正常读取(I2C_IF_Read返回值为-1),甚至是只有开始几次采样点能正常读取的问题。在i2C与I2S模块分开调试的过程中,均能正常工作,并且现可以排除不是RTOS的问题。在逐语句的排查后,最后发现,要且只要注释掉HWREG(ulBase + MCASP_O_TXFMCTL) = 0x113; //Configure Tx FSync generator in I2S mode (i2s.c),便能正常经由I2C读取IMU中的数据,但此时I2S模块便不能正常工作。 但现在只需要使用I2S模块Rx的部分,为何仅不配置Tx部分的帧同步generator不行呢? 同时想问,为何会发生这样的冲突呢? 有什么解决办法吗??

希望尽快回复。

yuequn

  • 直接在此例程基础上修改的吗?有没有增删什么其他功能?
  • 是在此例程的基础上修改的, 删去了控制任务以及放声任务,同时network部分只保留了板子作为STA与AP相连的功能。 增加了IMU数据采集以及IMU数据发送的功能。
  • 任务优先级如下:
    IMUcollect: 9 (MPU6050数据采集,通过I2C_IF读取数据(16bytes),填充至一个CIRC_BUF,读取完osi_Sleep(10)挂起10毫秒)
    VStartSimpleLinkSpawnTask: 8
    Network:3 (完成与AP的连接后任务即结束)
    IMUcollect:2 (MPU6050数据发送,循环判断缓冲区填充情况,超过两个包就发送一个包(256bytes),每次循环后挂起100毫秒osi_Sleep(100))
    Microphone: 2 (基本未作修改,删去了Loop back功能,保留了UDP发送功能,即不断读取buffer填充大小,超过2个包的大小就发送一个包)

    麦克风数据的采集过程未作修改,使用DM。
    I2S部分仅做了引脚的修改,讲PIN64改为了RX,同时修改了SerializerConfig保证一致性MAP_I2SSerializerConfig(I2S_BASE,I2S_DATA_LINE_0,I2S_SER_MODE_RX,I2S_INACT_LOW_LEVEL);
    引脚配置方面: PIN01: I2C_SCL PIN02: I2C_SDA PIN63:McAFSX PIN64: McAXR0

    目前可以保证独立情况下配置是没有问题。
  • 此外应该还排除问题了与DMA有关的可能,测过过保留I2S的配置,删去DMA功能后,I2C也无法正常读取数据。
  • 同时还在非RTOS场景下进行了测试,只要I2S完全开启,即执行了
    MAP_PRCMI2SClockFreqSet(30720000);
    MAP_I2SConfigSetExpClk(I2S_BASE,3072000,307200,I2S_SLOT_SIZE_32|I2S_PORT_DMA); //32位 48K 双声道
    MAP_I2SSerializerConfig(I2S_BASE,I2S_DATA_LINE_0,I2S_SER_MODE_RX,I2S_INACT_LOW_LEVEL);
    后,就会发生问题,注释掉MAP_I2SSerializerConfig,问题仍然存在,注释掉MAP_I2SConfigSetExpClk问题消失,同时帧同步信号消失/异常,时钟信号仍存在,因而初步考虑是帧同步或帧同步后I2S得到完全开启造成的影响
  • 你好,此问题已有其他工程师跟进,请直接关注这边: e2e.ti.com/.../948297