帮忙看看程序:关于以太网通讯的(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