请教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