导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→向老古求救,我对一段tcp/ip协议栈的程序看不懂~~:(

* 90002: 向老古求救,我对一段tcp/ip协议栈的程序看不懂~~:(

   chrade 
chrade发表的帖子 

 向老古求救,我对一段tcp/ip协议栈的程序看不懂~~:(
我是即将大学毕业的学生,想自己用单片机做webserver.所以现在在研究它的程序,我看到一段程序不太理解,是在底层驱动这里的:eth.c里面有一段发送接受帧的程序:

bit txd_buffer_select=0;     //选择网卡的发送缓冲区

void send_frame(UCHAR xdata * outbuf, UINT len)/*发送一个数据包的命令,长度最小为60字节,最大1514字节*/
{
UCHAR i;
UINT ii;
 page(0);
 if(len  <60)len=60;
 txd_buffer_select=!txd_buffer_select;
   if (txd_buffer_select)
  reg09=0x40 ; //txdwrite highaddress
 else
        reg09=0x46 ; //txdwrite highaddress
 reg08=0x00;   //read page address low
 reg0b=len>  >  8;  //read count high
 reg0a=len&0xff;  //read count low;
 reg00=0x12;   //write dma, page0

 for (ii=0;ii  <len;ii++) //for (ii=4;ii  <len+4;ii++)  //是否加4有待验证
 {
    reg10=*(outbuf+ii);  
 }

 /* 以下3句为中止dma的操作,可以不要            */
 reg0b=0x00;  //read count high   中止DMA操作
 reg0a=0x00;  //read count low;
 reg00=0x22;  //complete dma page 0

 for(i=0;i  <16;i++) //最多重发16次
 {
  for(ii=0;ii  <1000;ii++) //检查txp为是否为低
  {
   if ((reg00&0x04)==0) break;
  }
  if ((reg04&0x01)!=0) break; //表示发送成功
  reg00=0x3e;
 }
 reg07=0xff;
 if(txd_buffer_select)
  reg04=0x40; //txd packet start; 
 else
  reg04=0x46; //txd packet start; 
 reg06=len>  >  8; //high byte counter
 reg05=len&0xff; //low byte counter
 reg07=0xff;
 reg00=0x3e;  //to sendpacket;  
 free(outbuf);
}

这里面的txd_buffer_select大致的功能我知道的,但是他具体是怎么来实现就有点碰不到边了,大虾来看看,指条生路,小弟感激不尽!!


发表时间:2006年3月10日14:30:23

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:大量贴片键盘处理器芯片,全新原装,N82C42PC INTEL  要货
[下一篇帖子]:定制你所需要的2410开发板,请到科因比特根据你所需要提供量身的开发平台,我们做得到!!科因比特&n