VxWorks下基于CS4281声卡的VOIP设计与实现
时间:09-16
来源:互联网
点击:
4 UDP通信
4.1 UDP协议
在以太网设施基础上,VxWorks使用因特网组件TCP/IP提供的端到端的传输能力在位于不同的主机上的任务间传输用户数据。在VxWorks中,使用Socket作为应用程序和TCP/IP协议的接口。Socket有2种基本类型:可靠的数据流SOCK_STREAM,使用TCP协议;数据报SOCK_DGRAM,使用UDP协议。
UDP相对于TCP有以下一些优点:
(1) UDP的报文短,利于减小传输时延;
(2) UDP是无连接协议,发送数据前不需要建立连接,适合于声音数据这种实时性要求高的应用;
(3) UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。
UDP的这些优点对于声音数据的实时传输非常重要,这些优点将保证传输尽可能有一个短时延、恒定的速度,因此选择UDP。
在无连接的Socket中,在通信的两端分别创建客户机端和服务器端,通信双方在整个过程中是平等的,双方直接通过Socket调用来发送或接收数据报。
UdpClient模块:创建客户端Socket;初始化服务器端地址;FOREVER{调用UDP发送模块;发送数据到服务器}。
UdpServer模块:创建本地地址;创建服务器端Sock-et;把Socket和本地地址绑定起来;FOREVER{接收数据;调用UDP接收模块)。
4.2 UDP发送
发送模块等待录音信号量。如果获得,表示一些新的数据在录音缓冲中已有效。将把新数据从录音缓冲拷入上层软件存储区,然后通过Socket把他发送到另一端主机。如果上层软件中的存储区满,丢弃旧分组存入新分组。
4.3 UDP接收
接收模块等待从Socket来的数据。如果获得播放信号量,表示播放缓冲区中的数据已被播放,将把上层软件存储区中的数据拷入播放缓冲;否则,任务将被挂起。如果上层软件中的存储区满,丢弃旧分组存入新分组。
5 遇到的主要问题
在本文所搭建的环境中,能较好地实现两块声卡之间的通话。开发过程中,主要遇到两个问题:
(1) 声卡中没有声音数据。声卡的FIFO缓冲区及DMA缓冲区中均没有数据。经分析查出:CS4297芯片中关于耳机和麦克风的寄存器没有打开和选中,耳机和麦克风一直处于“mute”状态。关掉"mute'’后,问题解决。
(2) 不能产生中断。DMA缓冲区中已有数据,根据程序设计,此时应产生中断,由上层通信模块取走声音数据,但中断一直不能产生。经分析原因为:在声卡探测程序段获得的中断级直接用作中继号来挂接中断。解决方法:通过中断级来获取中断向量,再获取中断号,用来挂接中断处理程序。
4.1 UDP协议
在以太网设施基础上,VxWorks使用因特网组件TCP/IP提供的端到端的传输能力在位于不同的主机上的任务间传输用户数据。在VxWorks中,使用Socket作为应用程序和TCP/IP协议的接口。Socket有2种基本类型:可靠的数据流SOCK_STREAM,使用TCP协议;数据报SOCK_DGRAM,使用UDP协议。
UDP相对于TCP有以下一些优点:
(1) UDP的报文短,利于减小传输时延;
(2) UDP是无连接协议,发送数据前不需要建立连接,适合于声音数据这种实时性要求高的应用;
(3) UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送速率降低。
UDP的这些优点对于声音数据的实时传输非常重要,这些优点将保证传输尽可能有一个短时延、恒定的速度,因此选择UDP。
在无连接的Socket中,在通信的两端分别创建客户机端和服务器端,通信双方在整个过程中是平等的,双方直接通过Socket调用来发送或接收数据报。
UdpClient模块:创建客户端Socket;初始化服务器端地址;FOREVER{调用UDP发送模块;发送数据到服务器}。
UdpServer模块:创建本地地址;创建服务器端Sock-et;把Socket和本地地址绑定起来;FOREVER{接收数据;调用UDP接收模块)。
4.2 UDP发送
发送模块等待录音信号量。如果获得,表示一些新的数据在录音缓冲中已有效。将把新数据从录音缓冲拷入上层软件存储区,然后通过Socket把他发送到另一端主机。如果上层软件中的存储区满,丢弃旧分组存入新分组。
4.3 UDP接收
接收模块等待从Socket来的数据。如果获得播放信号量,表示播放缓冲区中的数据已被播放,将把上层软件存储区中的数据拷入播放缓冲;否则,任务将被挂起。如果上层软件中的存储区满,丢弃旧分组存入新分组。
5 遇到的主要问题
在本文所搭建的环境中,能较好地实现两块声卡之间的通话。开发过程中,主要遇到两个问题:
(1) 声卡中没有声音数据。声卡的FIFO缓冲区及DMA缓冲区中均没有数据。经分析查出:CS4297芯片中关于耳机和麦克风的寄存器没有打开和选中,耳机和麦克风一直处于“mute”状态。关掉"mute'’后,问题解决。
(2) 不能产生中断。DMA缓冲区中已有数据,根据程序设计,此时应产生中断,由上层通信模块取走声音数据,但中断一直不能产生。经分析原因为:在声卡探测程序段获得的中断级直接用作中继号来挂接中断。解决方法:通过中断级来获取中断向量,再获取中断号,用来挂接中断处理程序。
VxWorks 嵌入式 Cirrus 解码器 总线 DAC ADC 相关文章:
- 基于VxWorks的NAND FLASH驱动程序设计(07-31)
- 空间机器人中央计算机的双机热备份(08-15)
- 风河VxWorks全新升级尽显Java嵌入式开发优势(09-10)
- 基于VxWorks实时操作系统的通信模型设计(12-03)
- 基于ARM9的VxWorks增强型网络驱动设计(04-07)
- 使用BCM56500实现板级高性能交换型路由器(06-07)
