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

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

   sjpu 
sjpu发表的帖子 

 请教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;都是启动传输命令,但为何要出现两次?


发表时间:2004年6月24日18:13:34

  
回复该帖

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

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

  57107.[详细]请用过此协议栈的朋友给解释一下,先谢谢了!
摘要:......(无内容)
- [sjpu][1230次] 2004年6月25日

  57621.[详细]先发送远端DMA,后发送本地DMA,所以要两次
摘要:先发送远端DMA,后发送本地DMA,所以要两次......(38字)
- [guest][1007次] 2004年7月6日

  57836.[详细]xhl告诉我,可以将后一次发送删掉,对此可以吗?
摘要:......(无内容)
- [sjpu][933次] 2004年7月9日

[上一篇帖子]:有没有用万用表量过因脚状态?再说话!
[下一篇帖子]:没人写过菜单界面吗??