在TMS320VC5402上实现的嵌入式TCP/IP协议栈
arp: CMPM *(databuf.ethernetpkt.protocol),#0x0608
;判断协议类型是否为ARP协议
BC ip,NTC
CALL arp_process ;调用ARP协议处理模块
ST #taskfree,*(task);设置空闲任务指针
B taskfree ;跳转到空闲任务
Ip: CMPM *(databuf.ethernet.protocol),#0x0008;判断协议类型是否为IP协议
CC ip_process,TC ;若为IP协议,调用IP协议处理模块
ST #taskfree,*(task) ;设置空闲任务指针
B taskfree ;跳转到空闲任务
arp_process:接收ARP请求后,封装好ARP数据报,调用send_packet函数完成发送。在本设计中,DSP工作复位时,ARP协议发送一个ARP请求,发送自己的IP地址和物理地址给PC机。
ip_process:接收IP数据报后,判断协议 ,协议如果为17,即是UDP协议,则调用函数udp_process,处理UDP数据报,否则丢弃该数据报。在本设计中,正确接收一帧数据报后,会给PC机一个应答信息,通知PC机已经正确接收了数据报,可以继续发送数据。应答信息的封装首先调用create_udp_packet完成对应答信息的UDP协议的封装,然后调用create_ip_packet函数,这个函数完成了把封装好的UDP数据报再封装成IP数据报。最后调用send_packet函数完成发送。
③传输层:如果IP数据报中的协议类型为17,则为UDP数据报,需要调用udp_process函数处理数据报。正确接收了数据后,给发送一个应答信息,上面已经提到了具体过程,这里不再复述了。这里介绍一下UDP协议的一个难点—UDP数据的和校验。UDP和校验要求加上UDP伪首部以后再进行校验,伪首部格式包括32位源IPjavascript:window.open(this.src);" style="cursor:pointer;"/>地址、32位目的IP地址、8位数据0、8位协议和16位UDP数据长度。作者根据接收缓冲区的内存管理特点,即接收缓冲区的成员结构共用同一块数据存储区,所以将IP协议的帧头从生存时间开始到帧头结束封装成UDP伪首部。其实这样做,只需将8位生存时间改为全0,16位首部和改为UDP数据长度即可,8位的协议、32位源IP地址和32位的目的IP地址不用改动。作UDP和校验的时候,从IP协议帧头的报文生存时间开始到IP数据报的数据部分结束作带进位的相加,最后比较对和校验就可以了。
④应用层:由于传输的是语音数据,将采集的数据经过A律压缩放到DSP数据缓冲区databuf中,应用TCP/IIP协议将其发送给PC机。将PC机发送来的语音数据A律压缩通过DSP的多通道缓冲串行口发送给声卡。对于语音数据的处理,交给PC机完成,这里只实现数据的传输。
注:TCP/IP协议源码见网站 www.dpj.com.cn 。
3.2 PC机上的应用程序设计
使用的VB编程,利用Winsock控件完成语音数据的接收。这方面有很多例子可以借鉴,所以就不作太多的介绍。
结语
目前,基于DSP的嵌入式以太网的多媒体应用越来越受到广泛的关注和应用,而且基于TCP/IP协议的嵌入式网络系统已经成功地应用到了语音传输、远程图像控制和数据传输中。其便于操作、传输速度快等优点,受到了有关专家的一致好评。本文利用数字信号处理器DSP和RTL8019AS完成了嵌入式智能设备接入以大网,成功实现了应用嵌入式网络系统完成语音数据传输的功能。