您当前的位置:五五电子网电子知识单片机-工控设备DSP/FPGA技术基于PPP的TMS320C6x嵌入式网络接口设计(二) 正文
基于PPP的TMS320C6x嵌入式网络接口设计(二)

基于PPP的TMS320C6x嵌入式网络接口设计(二)

点击数:7509 次   录入时间:03-04 11:45:20   整理:http://www.55dianzi.com   DSP/FPGA技术

PPP 通常在三类情况下调用该回调函数,即:
  ① SI_MSG_CALLSTATUS PPP 的连接状态已经改变;
  ② SI_MSG_SENDPACKET PPP 正在请求一将数据帧编码和传输;
  ③ SI_MSG_PEERCMAP LCP 已经收到对等的 32 位异步字符映射。

3 编程举例

  下面给出两段代码,说明在PPP低层驱动程序中如何接收和发送数据。
  接收数据通过ppPINput函数实现,核心代码如下:
HANDLE hPkt;
HANDLE hFrag;
uint Offset,ValidSize;
UINT8 *pb;
// 生成1500字节payload包
if( !(hPkt = IFCreatePacket( 1500, 0, 0 )) ) return( 0 );
hFrag = PktGetFrag( hPkt ); //得到此包的存储器碎片
pb = FragGetBuFParams( hFrag, 0, 0, 0 ); // 得到包头指针
Offset = PktGetSizeLLC( hPkt );
if( Offset <= 2 ) Offset = 0;
else Offset-=2;
pb += Offset; // 置pb指针到写数据开始处
// 利用指针“pb”向数据包中填充数据;hFrag是向PPP传
//递的句柄
FragSetBufParams( hFrag, PACKETSIZE, Offset );
return( hPkt );

  发送数据的情况要复杂一些,需要使用回调函数。回调函数的结构如下:

void SIControl ( HANDLE hSI, uint Msg, UINT32 Aux, HANDLE hPkt )
{…switch( Msg )
{
case SI_MSG_CALLSTATUS:
if( Aux >= SI_CSTATUS_DISCONNECT )
{ // Close PPP
if( hSI→hPPP )
{
hTmp = hSI→hPPP;
hSI→hPPP = 0;
pppFree( hTmp );
}
break;
case SI_MSG_PEERCMAP:
break;
case SI_MSG_SENDPACKET:
// 确认数据包有效
// 取数据缓冲区参数
// 计算“净荷”(payload)的起始地址
// 发送数据
// 释放数据包
break;
}
}

结 语

  自1994年PRECISE公司在TMS320C3x上推出TCP/IP开发包以来,如何在以DSP为硬件环境的嵌入式系统中支持TCP/IP就一直引人关注。随着硬件水平的提高和应用的深入,基于DSP的TCP/IP应用日渐增多。由于嵌入式系统的特殊应用环境,它的链路层情况非常复杂,所以开发方法与常规的网络开发方式有稍许不同,NDK自身已体现出了这种差异。目前,将PPP应用在嵌入式系统中仍是一种新的、积极的尝试。在NDK中,提供了多种方式支持PPP通信。我们认为,在操作系统层面开发基于PPP的应用时,应该采用低层 PPP API,这样可以适应更多的应用需求和嵌入式应用环境。
 
 
本文摘自《单片机与嵌入式系统应用》




本文关键字:嵌入式  网络  接口  DSP/FPGA技术单片机-工控设备 - DSP/FPGA技术