导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→请教C8051f TCP/IP协议中发送数据包函数的一个问题[sjpu]

 *第23213篇: 请教C8051f TCP/IP协议中发送数据包函数的一个问题

  
楼 主:sjpu 2004年6月24日18:13
 请教C8051f TCP/IP协议中发送数据包函数的一个问题
来源:c8051f020 TCP/IP协议栈

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);
}
请问:在上面的函数中出现两次reg00=0x3e;都是启动传输命令,但为何要出现两次?

  
2楼:sjpu 2004年6月25日08:31
 请用过此协议栈的朋友给解释一下,先谢谢了!
  
3楼:guest 2004年7月6日16:46
 先发送远端DMA,后发送本地DMA,所以
先发送远端DMA,后发送本地DMA,所以要两次
  
4楼:sjpu 2004年7月9日18:11
 xhl告诉我,可以将后一次发送删掉,对此可以吗?

>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:那位大虾知道哪有W78E58B和W78E58的中文资料

[下一篇主题]:请哪位朋友告诉我ARM选型