DIY之乐:基于PIC32的以太网音箱设计案例,硬件框图、器件选型、数据结构、软件流程
4.2以太网终端设备软件设计
4.1.1缓冲区数据结构设计
下面是一个数据单元的结构体。ucIndex为数据包序号;uiHeader该数据类型;uiSize为解码的数据个数,数据单位为字节;ucBuffer为MP3解码后的PCM码流;fiInfo为针砭信息。解码后的最大的数据长度为2304,因此将ucBuffer定义最大长度为2400。
考虑到网络的传输的可能出现一些抖动、PC软件定时器的误差和需要给MP3解码预留时间,因此需要在终端设备中缓冲一定的数据量。又由于,MP3音频要实时播放因此不需要缓冲太大的数据量。
在本次设计中,在终端设备里将上面的数据结构定义为20个缓冲区。当数据缓冲解码到数据缓冲区个数的一半时,开始播放PCM码流。
4.1.2以太网终端设备软件设计
以太网终端设备模块有三个分别是EthernetSpeaker.c、EthernetSpeakerPlayer.c和MP3Api.c。EthernetSpeaker.c的功能是负责网络通讯模块,EthernetSpeakerPlayer.c是DA驱动模块,MP3Api.c中包含MP3库载入初始化,和MP3解码函数。
图13以太网音响终端设备程序流程图
图13描述了以太网终端设备程序流程图,通过SW3按键向PC程序发送请求数据。图14中描述了以太网终端设备的SP3 TX空的中断服务程序。
图14以太网终端设备SPI TX空中断服务程序流程图
5总结
本文实现了以太网音响在现有的以太网上可以播放MP3文件,解决了传统模拟广播系统的模拟的信号的缺点。实现了PC服务器匀速发送MP3帧文件,终端设备软解码并实时播放。最后的成品可以在局域网上流畅播放、控制终端设备。设计基本达到了赛前的设计需求。当然,本次设计还是有遗憾和不足之处,遗憾的是由于PIC32不支持I2S,所以只有用SPI驱动DA,导致了只能播放单声道。
DIY机械键盘相关社区:机械键盘DIY
模拟信号相关文章:什么是模拟信号
数字通信相关文章:数字通信原理
评论