TI中文支持网
TI专业的中文技术问题搜集分享网站

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

Viki Shi:

直接在此例程基础上修改的吗?有没有增删什么其他功能?

yuequn zhang:

回复 Viki Shi:

是在此例程的基础上修改的, 删去了控制任务以及放声任务,同时network部分只保留了板子作为STA与AP相连的功能。增加了IMU数据采集以及IMU数据发送的功能。

yuequn zhang:

回复 Viki Shi:

任务优先级如下:
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_SCLPIN02: I2C_SDAPIN63:McAFSXPIN64: McAXR0

目前可以保证独立情况下配置是没有问题。

yuequn zhang:

回复 Viki Shi:

此外应该还排除问题了与DMA有关的可能,测过过保留I2S的配置,删去DMA功能后,I2C也无法正常读取数据。

yuequn zhang:

回复 Viki Shi:

同时还在非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得到完全开启造成的影响

Viki Shi:

回复 yuequn zhang:

你好,此问题已有其他工程师跟进,请直接关注这边: e2e.ti.com/…/948297

赞(0)
未经允许不得转载:TI中文支持网 » cc3200 I2C I2S 冲突
分享到: 更多 (0)