导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→帮忙看看程序:关于以太网通讯的(8019)

* 28420: 帮忙看看程序:关于以太网通讯的(8019)

   long22885528 
long22885528发表的帖子 

 帮忙看看程序:关于以太网通讯的(8019)
小弟在看下面的程序时有一些疑惑,希望大家给予指导,谢谢!~~
Q1)就是"if(len  <60)len=60;"中的LEN的值是那来的??是从TCP/IP包那得到的么??

Q2)就是"if    (txd_buffer_select)
        reg09=0x40 ;    //txdwrite highaddress
       else
                  reg09=0x46 ;      //txdwrite highaddress
             reg08=0x00 ;     //read page address low"

中的IF.....ELSE的关系;为什么会用到他呢??                if  (txd_buffer_select)又是什么意思呢??

Q3)就是"for      (ii=4;ii  <len+4;ii++)  "
中的LEN又为什么要加4,并且发送起始页也要加4呢??

有空的话能将这段程序的每一条的功能解释一下么??谢谢!~~~~~

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=4;ii  <len+4;ii++)  
    {
       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(i=0;……到free(outbuf);为发送数据
    {
        for(ii=0;ii  <1000;ii++)    //检查txp为是否为低
        {
            if ((reg00&0x04)==0) break;
        }
        if ((reg04&0x01)!=0) break;    //tsr位是否为1表示发送成功
        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);}
 


发表时间:2003年5月4日9:41:23

  
回复该帖

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

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

  28457.[详细]回答
摘要:1、以太网帧长最少60字节(不包括CRC校验),要发送的数据如没有60字节,就要填充至60字节,你要发送多少字节的数据,自己肯定是知道的。 2、在该程序里,网卡芯片发送缓冲设为12页,两个区,每区6个,发送数据时,轮流使用这两个区......(459字)
- [ahwangyadong][1081次] 2003年5月4日

  29479.[详细]谢谢!~~~能看看接收的程序么??
摘要:麻烦您了!~~我想问问它在程序中起什么用!~~为什么用CURR==0,来判断硬件是否读错??RETURN又是什么功能呢???谢谢!~~~~~ //------------------------------------------......(869字)
- [long22885528][1011次] 2003年5月10日

  29480.[详细]return 是返回, CURR接收数据标志用
摘要:......(无内容)
- [langren0468][919次] 2003年5月10日

[上一篇帖子]:我要C的原程序,可以给我一份吗?aac186@aacelectr.com
[下一篇帖子]:我要一份呀,谢谢了先!aac186@aacelectr.com