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.

[参考译文] CC3200MOD:TIDrivers CC3200 I2S、从 FS 播放声音时出现问题

Guru**** 2558250 points
Other Parts Discussed in Thread: TLV320AIC3254, CC3200, CC3200SDK, SYSBIOS

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/565267/cc3200mod-tidrivers-cc3200-i2s-issue-playing-sound-from-fs

器件型号:CC3200MOD
主题中讨论的其他器件:TLV320AIC3254CC3200CC3200SDKSYSBIOS

您好!
 我们在 CC3200上遇到 I2S 问题。 我们正在尝试播放来自 SimpleLink 文件系统的声音文件(16位、立体声、16kHz 采样)。 该文件似乎从文件系统中读出正常、但 TLV320AIC3254 DAC 没有声音、我们在完成后遇到 DMAERR 中断。 在使用 TIDriver 库进行测试之前、我们已经让它正常工作。 我知道 DAC 设置正确、因为我们使用与原始测试平台相同的寄存器配置和代码(使用 I2C_Open、I2C_transfer 等)。 我附上了以下代码

TIRTOS:2.16.00.08
TIDrivers CC32xx:2.16.00.08
CC3200SDK:1.2.0
SYSBIOS 版本:v6.45.01.29
CC3200 SDK 版本:1.2.0
CC3200服务包: 1.0.1.6-2.7.0.0
unsigned short fileBuffer[30*1024];
_u8 tBuffer[3072];

int playSound (char * filename)
{
intoffset= 0;
长 DeviceFileHandle;
长 lRetVal =-1; //负值为错误
SlfsFileInfo_t pFsFileInfo;
I2S_BufDesc bufDesc[3];
I2S_BufDesc *pDesc =空;
char fil[]="ding.wav";

Semaphore_pend (slSemaphore、BIOS_wait_forever);//等待 NWP 访问 FS
Semaphore_pend (semWaterWal Handle、BIOS_WAIT_Forever);//等待 I2S 句柄被打开

System_printf ("sound:Playing");

/DeviceName

(s_Open)、'FileName (\n'sle_unsigned


文件名);//系统文件名(\null_unsigned (1);//文件名:
返回-1;
}
//从文件中读取并丢弃 wav 头
//获取有关文件
的信息 lRetVal = sl_FsGetInfo ((unsigned char *)&fil、NULL、&pFsFileInfo);
if (lRetVal < 0)
{
CloseSoundFile (DeviceFileHandle);
//System_Handf ("sound:&ppseFileInfo);'n
、从


文件中读取%tsL 文件时失败;%tFileName = 0;//从文件中返回
if (lRetVal < 0)
{
CloseSoundFile (DeviceFileHandle);
//System_printf ("声音:无法读取文件%s\n"、文件名);
返回-1;
}
//丢弃 wav 头
//读取头
//检查文件是否为 wav 文件
,如果((tBuffer[0]!='R'
|| tBuffer[1]!='I'
|| tBuffer[2]!='F'
|| tBuffer[3]!='F')
{
System_printf ("error:not Devicefile\n"};
“SoundHandle"文件
名:%wav 文件格式:%wav 文件失败;
返回文件名

system_printf ("声音:声音是 RIFF wave\n");

偏移量+= sizeof (waveHeaderType);

_u8 * ptr = fileBuffer;

bufDesc[0]。bufPtr = ptr;
bufDesc[0]。bufSize = 3072;

ptr += 1536;
bufDesc[1];bufPtr = ptr;bufPtr = ptr =
bufDesc[1].bufSize = 3072;

ptr += 1536;
bufDesc[2].bufPtr = ptr;
bufDesc[2].bufSize = 3072;

ptr = fileBuffer;
System_printf ("ptr:%x\n"、ptr);

sl_FsRead (DeviceFileHandle、offset、tBuffer、 3072);
memcpy (bufDesc[0].bufPtr、tBuffer、3072);
sl_FsRead (DeviceFileHandle、 偏移、tBuffer、3072);
memcpy (bufDesc[1].bufPtr、tBuffer、 3072);
sl_FsRead (DeviceFileHandle、偏移量、tBuffer、3072);
memcpy (bufDesc[2]。bufPtr、tBuffer、3072);

I2S_writeIssue (i2sHandle、&bufDesc[0]);
I2S_writeIssue (i2sHandle、&bufDesc[1]);
I2S_writeIssue (i2sHandle、 &bufDesc[2]);

同步读取= 0;
内部 I = 2;
while (!donesReading){
i++;
ptr += 1536;
if (i=10){
ptr = fileBuffer;
i = 0;
}
I2S_writeReclaim (i2sHandle、&pDesc);
if (pVal ==

NULL);while (DeviceReset1)、FileReclaim (i2sHandle = NULL);if (文件缓冲区1);(文件交换)
if (lRetVal < 0)
{
CloseSoundFile (DeviceFileHandle);
System_printf ("声音:无法读取文件%s\n"、文件名);
}
否则(lRetVal < 3072)
{
Reading = 1;
}
//System_printf ("ptr:%x\n"、ptr);
cpy、memBuffer (ptr) lSoundVal);

pDESC->bufPtr = ptr;
pDESC->bufSize = lRetVal<3072?lRetVal:3072;
I2S_writeIssue (i2sHandle、pDesc);
offset+=lRetVal;
}

System_printf ("声音:完成播放。\n");
CloseFileHandle

返回

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

    我看不到您提供的代码有任何明显的问题。 这可能是器件的引脚多路复用。

    如果您查看器件的已知问题(processors.wiki.ti.com/.../CC32xx_Summary_of_Known_Issues)、默认引脚多路复用可能会干扰您的 I2C 通信。 我建议使用 dev.ti.com 上的 PinMuxTool 来生成您的 pinmux.c 文件、因为它会自动将所有未使用的引脚设置为模式0。

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

    您好、Sarah、

    我们确实使用了最新的 PinMux 工具来生成我们的文件。 我可以确认 I2C 是否正常工作、因为我们可以与链上的其他器件进行通信、而不会出现任何问题。

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

    我看到您还在 TI 驱动程序论坛(e2e.ti.com/.../565264)上发布了此内容。 您是否能够测试他们的解决方案?

    此致、
    Sarah