手上有一套TICC3200+TLV320AIC3254开发板,这个是TI官方出的一款评估板。
在官方给出的例程里面只有一个是关于音频的“wifi_audio_app”,这个例子使用两块开发板相互连接后相互传输音频并且播放的。
现在我手上只有一块开发板,而且对TI的片子还不是很熟悉,现在我想在这个例子上面做一个修改,修改为:用这个开发板采集音频,然后通过UDP上传至电脑,在电脑上使用网络助手接收开发板上传的音频。
这个程序的大概流程是:初始化(硬件初始化、引脚配置初始化、串口初始化、I2C接口初始化、创建接收和播放音频的缓冲区、初始化和配置音频芯片、初始化I2S、初始化DMA)、开始simplelink、创建网络任务、创建控制任务、创建录音任务、创建放音任务。
放音的任务暂时不用的,将其屏蔽。
【折腾了很长时间后才发现】在控制任务里面其实就是改变一些标志位,从而达到在实时的时间播放或者录音的目的,故而将这个任务也屏蔽掉。
在网络任务里面,首先是尝试自动连接网络,如果链接不上就使用智能配置链接网络。网络链接上之后是创建UDP服务器,然后执行“mDNS_Task();”任务。但是在测试的时候,程序在这个里面会报错,暂时不知道这个任务是干嘛用的,就直接注释掉了。注释掉之后发现每当链接网络成功并且创建UDP服务器成功之后,整个程序就停止了,后来又发现,这个网络任务必须要有个while(1)循环,否则整个程序会停止,然后将“mDNS_Task();”里面的代码修改成:
//*****************************************************************************
//
//! mDNS_Task function
//!
//! \param None
//!
//! \return None
//!
//*****************************************************************************
void mDNS_Task()
{
int lRetValmDNS;
unsigned int pAddr;
unsigned long usPort;
unsigned short ulTextLen = 200;
char cText[201];
//UnRegister mDNS Service if done Previously
lRetValmDNS = sl_NetAppMDNSUnRegisterService((signed char *)CC3200_MDNS_NAME,
strlen(CC3200_MDNS_NAME));
while(1)
{
/*
lRetValmDNS = 1;
//Read mDNS service.
while(lRetValmDNS)
{
ulTextLen = 200;
lRetValmDNS = sl_NetAppDnsGetHostByService((signed char *) \
CC3200_MDNS_NAME,
strlen((const char *)CC3200_MDNS_NAME),
SL_AF_INET,(unsigned long *)&pAddr,&usPort,
&ulTextLen,(signed char *)&cText[0]);
UART_PRINT("mDNS service return : %d \n\r",lRetValmDNS);
}
if(lRetValmDNS == 0 && (pAddr!=INVALID_CLIENT_ADDRESS) && \
(pAddr!=g_uiIpAddress))
{
//Speaker Detected - Add Client
g_UdpSock.Client.sin_family = AF_INET;
g_UdpSock.Client.sin_addr.s_addr = htonl(pAddr);
g_UdpSock.Client.sin_port = htons(usPort);
g_UdpSock.iClientLength = sizeof(g_UdpSock.Client);
g_loopback = 0;
}
*/
MAP_UtilsDelay(80*1000*100);
}
}
即,在这个任务里面做一个