多方会议技术在DSP中的实现
扫描二维码
随时随地手机看文章
随着企业对现代化通信系统的要求越来越高,电话会议系统在企业电话系统中的应用越来越多,它可以极大地提高企业工作效率,改善企业的管理,提升企业的竞争力。一般传统电话会议的实现均利用企业内部交换机(pbx)的多方通话功能,但有很大的局限性,特别是参加会议的人数有限,一般交换机不能超过8方,并且操作烦琐,在使用中有很多不便。基于传统电话会议系统的这一局限性,本文采用ti公司的tms320c54x芯片来实现传统交换机中的多方通话功能。
tms320c54x系列tms320c54x是ti公司于1996年推出的新一代定点数字信号处理器。它采用先进的修正哈佛结构,片内有8条总线(1条程序存储器总线、3条数据存储器总线和4条地址总线)、cpu、在片存储器和在片外围电路等硬件,加上高度专业化的指令系统,使"c54x具有功耗小、高度并行等优点,可以满足实时处理的要求,目前已经广泛地应用在电信领域中。c54x提供高速双向多通道带缓冲串口mcbsp。它可以与其它c54x器件、编码器、或其它串口器件通讯。c54x芯片中只有三款有mcbsp串口功能,分别是c5402有2个、c5410有3个、c5420有6个。每个mcbsp有128个通道,可以通过相关寄存器进行配置。c54x还提供一个主机接口(hpi)。hpi是一个8位并行口,用来与主设备或主处理器接口。外部主机是hpi的主控者,它可以通过hpi直接访问cpu的存储空间,包括存储器映象寄存器。hpi支持主设备与 c54x之间的高速传送数据。
dsp所在单板dsp所在单板的总体结构如图1所示,mpc860作为单板的主处理器,用来管理单板的运行,控制各外设的操作。dsp作为单板的协处理器,负责多方通话程序的运行,也可以同时实现双音多频、fsk等功能。第一片fpga主要实现单板的一些控制逻辑,如hpi接口控制逻辑、双断口总线仲裁逻辑、中断定时逻辑等。第二片fpga(dx1000)主要实现单板与背板的pcm链路交换,同时产生单板所需2m时钟和帧同步信号。单板通过双端口与背板进行数据交换,通过dx1000与背板进行链路交换。另外,单板还提供调试串口和网口。基本的工作流程为:背板信号通过隔离器进入双口ram,通过共享信箱的方式与主cpu通信。上电后,在boot flash的引导下完成系统的初始化。工作中,cpu从共享信箱接受命令后,发出指令,经fpga作处理后到达dsp模块,dsp模块对数据进行处理,处理后数据经dx1000做交换后,送给背板。
多方会议的实现 在本文中仅使用多通道串口0和hpi来实现最多32方通话。首先要在dsp中开辟一个系统信箱,用于存放dsp与mpc860的握手联络字,以及对话音进行叠加或比大处理的控制字n,n=0表示对所有与会通道进行叠加处理,n≠0表示对所有与会通道进行比大处理。所谓的多方会议功能就是通过把多个输入话音通道叠加到一个输出话音通道上来实现的。因此,每个输出通道可以用两个字(32比特)来控制相应的32个输入通道是否要叠加到该通道上来,1表示叠加(即参加会议),0表示不叠加(即不参加会议)。32个通道共64个字。如果相叠加的话音通道较多时,dsp也可以选择音量最大的发送。所以,用户既可以听到所有与会人员的话音,也可以选择听到话音最大成员,方便又灵活。 多方会议的数据来源为dsp的多通道串口0的接收寄存器drr10。每次数据到来时,就会产生中断rint0,因此,程序可以把从串口drr10读出的数据存到缓冲区drr buf里面,每帧数据到来,读取一下命令信箱,从而对该帧数据进行处理。当接收完一帧数据时,主程序会自动把数据送去处理,根据命令信箱所包含的时隙数,完成对该语音信号的处理。依据多方会议中包含的成员所对应的时隙数,将一个会议中所包含的语音数据提取出来。如果控制字n为0,就把所有成员的话音叠加起来发送,如果控制字n不为0, 对它们进行比大处理,把话音最大的发送。也就是说,一个用户应该听到其他成员中话音最大的那一个。将处理后的数据填入发送数据缓冲区中。语音数据的发送采用与接收相同的方法。每次把准备好的数据放到数据发送缓冲区dxr buf,每产生一次接收中断xint0,就从缓冲区取出准备好的数据,送到dxr10,完成对pcm话音链路的数据发送。主要的处理流程如图2:该处理流程首先对dsp及其串口进行初始化,然后和通过hpi和主机握手,判断是否接收完一帧数据。如果没有接收完,返回继续等待。如果接收完一帧数据,则dsp查看命令信箱,调用process按照主机的命令字n对语音信号进行处理。处理完以后返回等待,重复上一过程,直到32路都处理完。process的处理流程如图3。
附 process的源程序:process:
stm #82h,ar4 ;地址82h中存放
命令控制字n
ld *ar4,a
bc add_process,aeq
cmp_process:
dld *ar1+,a ;ar1指向通道控
制字,加载控制字
nop
nop
xc 2,aeq
st #0,*ar3+%
nop
bc one_over,aeq
ld r_ptr,b ;r_ptr为接收数
据块头指针