[ZLG-ARM] 抛砖引玉一把!本人对RTL8019AS的编程心得!

[复制链接]
4141|9
 楼主| 火光 发表于 2009-4-13 19:31 | 显示全部楼层 |阅读模式
本人花了半个多月的时间,对RTL8019AS上的控制状态寄存器进行了仔细的琢磨,终于有了点心得体会,在这里和大家共享!<br />本人是在周立功的EASYARM2200上做的实验的:<br />下面是RTL8019AS的相关源代码:<br />---------------------------------------------------------------------<br /><br />#include&nbsp;&quot;config.h&quot;<br />#include&nbsp;&quot;LPC2294.h&quot;<br />#include&nbsp;&quot;general.h&quot;<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;INT_N&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000080<br />#define&nbsp;&nbsp;&nbsp;&nbsp;NET_RST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00000040<br />#define&nbsp;&nbsp;&nbsp;&nbsp;NET_BASE_ADDR&nbsp;&nbsp;&nbsp;0x83400000<br /><br />//{0x52,0x54,0x4c,0x19,0xf7,0x44}<br /><br />#define&nbsp;&nbsp;&nbsp;&nbsp;The_PAR0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x52<br />#define&nbsp;&nbsp;&nbsp;&nbsp;The_PAR1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x54<br />#define&nbsp;&nbsp;&nbsp;&nbsp;The_PAR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x4C<br />#define&nbsp;&nbsp;&nbsp;&nbsp;The_PAR3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x19<br />#define&nbsp;&nbsp;&nbsp;&nbsp;The_PAR4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xF7<br />#define&nbsp;&nbsp;&nbsp;&nbsp;The_PAR5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x44<br /><br />uint8&nbsp;&nbsp;&nbsp;&nbsp;Tx_Buff_Page&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x46;<br /><br />void&nbsp;WriteToNet(uint8&nbsp;ADDR_16,&nbsp;uint16&nbsp;WRITEDATA)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;(*((volatile&nbsp;unsigned&nbsp;short&nbsp;*)NET_BASE_ADDR&nbsp;+&nbsp;ADDR_16))&nbsp;=&nbsp;WRITEDATA;&nbsp;&nbsp;&nbsp;&nbsp;//0x83400000<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />uint16&nbsp;ReadFromNet(uint8&nbsp;ADDR_16)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;temp_uint16;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;temp_uint16&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(*((volatile&nbsp;unsigned&nbsp;short&nbsp;*)NET_BASE_ADDR&nbsp;+&nbsp;ADDR_16));&nbsp;&nbsp;&nbsp;&nbsp;//0x83400000<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;&nbsp;temp_uint16;<br />}<br /><br />void&nbsp;SetPage(uint8&nbsp;pagenumber)&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;temp_uint8;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;temp_uint8&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//command&nbsp;register<br />&nbsp;&nbsp;&nbsp;&nbsp;temp_uint8&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;temp_uint8&nbsp;&&nbsp;0x3B;&nbsp;&nbsp;&nbsp;&nbsp;//注意txp位不能要<br />&nbsp;&nbsp;&nbsp;&nbsp;pagenumber&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;pagenumber&nbsp;&lt&lt&nbsp;6;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp_uint8&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;temp_uint8&nbsp;|&nbsp;pagenumber;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0,&nbsp;temp_uint8);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return;<br />}<br /><br />void&nbsp;InitNic(void)&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;temp_i;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;PINSEL0&nbsp;&&nbsp;~0x0000F000;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0DIR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(IO0DIR&nbsp;&&nbsp;~INT_N)&nbsp;|&nbsp;NET_RST;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NET_RST;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;40000;&nbsp;temp_i++);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NET_RST;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;40000;&nbsp;temp_i++);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;NET_RST;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;40000;&nbsp;temp_i++);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x1F,&nbsp;0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;40000;&nbsp;temp_i++);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,&nbsp;0x21);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使芯片处于停止模式,这时进行寄存器设置&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;40000;&nbsp;temp_i++);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;/////////////////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0F,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0xFF);<br />&nbsp;&nbsp;&nbsp;&nbsp;///////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0E,&nbsp;0xCB);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//DCR&nbsp;???<br />&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0E,&nbsp;0xDB);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0C,&nbsp;0xE0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RCR&nbsp;???<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0D,&nbsp;0xE0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//TCR&nbsp;???<br />&nbsp;&nbsp;&nbsp;&nbsp;///////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x01,&nbsp;0x4C);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x02,&nbsp;0x80);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x03,&nbsp;0x4C);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x09,&nbsp;0x40);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x08,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0B,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0A,&nbsp;0x00);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x04,&nbsp;0x40);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x06,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x05,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;/////////////////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;/////////////////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否错误的计数???||<br />&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x07,&nbsp;0x4D);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0x4C);<br />&nbsp;&nbsp;&nbsp;&nbsp;//||************************||<br />&nbsp;&nbsp;&nbsp;&nbsp;///////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x01,&nbsp;The_PAR0);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x02,&nbsp;The_PAR1);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x03,&nbsp;The_PAR2);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x04,&nbsp;The_PAR3);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x05,&nbsp;The_PAR4);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x06,&nbsp;The_PAR5);<br />&nbsp;&nbsp;&nbsp;&nbsp;///////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x08,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x09,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0A,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0B,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0C,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0D,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0E,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0F,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;/////////////////////////////////////////////<br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0C,&nbsp;0xC4);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RCR&nbsp;???<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0xFF);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,&nbsp;0x22);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;Tx_Buff_Page&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;0x46;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;return;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />void&nbsp;Send_Packet(uint16&nbsp;*&nbsp;buf,&nbsp;uint32&nbsp;len)&nbsp;&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;&nbsp;&nbsp;&nbsp;temp_len;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_i,&nbsp;temp_j;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(len&nbsp;&lt&nbsp;60)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len&nbsp;=&nbsp;60;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(len&nbsp;&&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;len++;<br />&nbsp;&nbsp;&nbsp;&nbsp;temp_len&nbsp;=&nbsp;len&nbsp;&gt&gt&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Tx_Buff_Page&nbsp;==&nbsp;0x40)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tx_Buff_Page&nbsp;=&nbsp;&nbsp;0x46;<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Tx_Buff_Page&nbsp;=&nbsp;&nbsp;0x40;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//切换至第0页<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x09,&nbsp;Tx_Buff_Page);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//设置发送页地址&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x08,&nbsp;0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写入RSAR0<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0b,&nbsp;len&nbsp;&gt&gt&nbsp;8);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写入RSCR1<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0a,&nbsp;len&nbsp;&&nbsp;0xFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//写入RSCR0<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,&nbsp;0x12);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动DMA写write&nbsp;dma,&nbsp;page0<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;temp_len;&nbsp;temp_i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x10,&nbsp;*buf++);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否是多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0b,&nbsp;0x00);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0a,&nbsp;0x00);<br />&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,&nbsp;0x22);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结束或放弃DMA操作<br />&nbsp;&nbsp;&nbsp;&nbsp;//||**************************||<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x04,&nbsp;Tx_Buff_Page);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//txd&nbsp;packet&nbsp;start;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x06,&nbsp;len&nbsp;&gt&gt&nbsp;8);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//high&nbsp;byte&nbsp;counter<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x05,&nbsp;len&nbsp;&&nbsp;0xFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//low&nbsp;byte&nbsp;counter<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0xFF);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//||是否有多余的位???||<br />&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,&nbsp;0x3E);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//to&nbsp;sendpacket;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,&nbsp;0x26);<br />&nbsp;&nbsp;&nbsp;&nbsp;//||********************||<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;6;&nbsp;temp_i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//最多重发6次<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_j&nbsp;=&nbsp;0;&nbsp;temp_j&nbsp;&lt&nbsp;1000;&nbsp;temp_j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((ReadFromNet(0)&nbsp;&&nbsp;0x04)&nbsp;==&nbsp;0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//检查CR寄存器的txp位是否为低,为1说明正在发送,为0说明发完或出错放弃&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(ReadFromNet(0x04)&nbsp;&&nbsp;0x01)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//表示发送成功,判断发送状态寄存器TSR,决定是否出错<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||是否有多余的位???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,0x3E);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//to&nbsp;sendpacket;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,&nbsp;0x26);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||********************||<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0xFF);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return;<br />}<br /><br />int&nbsp;&nbsp;&nbsp;&nbsp;Rec_Packet(uint16&nbsp;*&nbsp;buf)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY,&nbsp;temp_CURR;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;temp_buf0,&nbsp;temp_buf1;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;&nbsp;&nbsp;&nbsp;temp_len;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;&nbsp;&nbsp;temp_uint8;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;&nbsp;temp_uint8&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x07);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取中断状态<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp_uint8&nbsp;&&nbsp;0xAC)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitNic();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x03);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bnry&nbsp;page&nbsp;have&nbsp;read&nbsp;读页指针<br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;temp_CURR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x07);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//curr&nbsp;writepoint&nbsp;8019写页指针<br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;//temp_BNRY++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bnry++;<br />&nbsp;&nbsp;&nbsp;&nbsp;//if&nbsp;(temp_BNRY&nbsp;&gt&nbsp;0x7F)<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;=&nbsp;0x4C;<br />&nbsp;&nbsp;&nbsp;&nbsp;//||************************||<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp_BNRY&nbsp;!=&nbsp;temp_CURR)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//此时表示有新的数据包在缓冲区里<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x09,&nbsp;temp_BNRY);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSAR1写入读页地址的高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x08,&nbsp;0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSAR0写入读页地址的低字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0b,&nbsp;0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0a,&nbsp;0x04);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数低字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,&nbsp;0x0a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动Remote&nbsp;DMA读操作<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_buf0&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_buf1&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否是多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0b,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0a,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,0x22);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结束或放弃DMA操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||**************************||<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_buf1&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;temp_buf1&nbsp;-&nbsp;4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(((temp_buf0&nbsp;&&nbsp;0x0001)&nbsp;==&nbsp;0)&nbsp;||&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((temp_buf0&nbsp;&&nbsp;0xFF00)&nbsp;&lt&nbsp;&nbsp;0x4C00)&nbsp;||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((temp_buf0&nbsp;&&nbsp;0xFF00)&nbsp;&gt&nbsp;&nbsp;0x7F00)&nbsp;||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;temp_buf1&nbsp;&gt&nbsp;0x0600))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetPage(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_CURR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x07);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//page1读取CURR的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//切换回page0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;temp_CURR&nbsp;-&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//把bnry恢复为下16K中的空余部分<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if&nbsp;(temp_BNRY&nbsp;&lt&nbsp;0x4C)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;=&nbsp;0x7F;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;temp_CURR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||************************||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x03,&nbsp;temp_BNRY);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//把BNRY恢复到指向下一帧write&nbsp;to&nbsp;bnry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0x7F);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除中断标志<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//表示数据包是完好的.读取剩下的数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp_buf1&nbsp;&&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_buf1++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_len&nbsp;=&nbsp;temp_buf1&nbsp;&gt&gt&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x09,&nbsp;temp_BNRY);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSAR1写入读页地址的高字节//read&nbsp;page&nbsp;address&nbsp;high<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x08,&nbsp;0x04);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSAR0写入读页地址的低字节//read&nbsp;page&nbsp;address&nbsp;low<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0b,&nbsp;temp_buf1&nbsp;&gt&gt&nbsp;8);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节//read&nbsp;count&nbsp;high<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0a,&nbsp;temp_buf1&nbsp;&&nbsp;&nbsp;0xFF);&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数低字节//read&nbsp;count&nbsp;low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,&nbsp;0x0a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动Remote&nbsp;DMA读操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;temp_len;&nbsp;temp_i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*buf++&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否是多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0b,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节//read&nbsp;count&nbsp;high&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0a,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数高字节//read&nbsp;count&nbsp;low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,0x22);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结束或放弃DMA操作//结束或放弃DMA<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||**************************||<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否是多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(temp_buf0&nbsp;&gt&gt&nbsp;8)&nbsp;-&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if&nbsp;(temp_BNRY&nbsp;&lt&nbsp;0x4C)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;=&nbsp;0x7F;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(temp_buf0&nbsp;&gt&gt&nbsp;8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||**************************||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x03,&nbsp;temp_BNRY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0x7F);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;temp_buf1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />///////////////////////////////////////////////////////////////////////////////////////////////////////<br />int&nbsp;&nbsp;&nbsp;&nbsp;Rec_Packet_0(uint16&nbsp;*&nbsp;buf)&nbsp;<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY,&nbsp;temp_CURR;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint16&nbsp;&nbsp;&nbsp;&nbsp;temp_buf0,&nbsp;temp_buf1;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint32&nbsp;&nbsp;&nbsp;&nbsp;temp_len;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;&nbsp;&nbsp;&nbsp;temp_uint8;<br />&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_i;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;&nbsp;temp_uint8&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x07);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//读取中断状态<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp_uint8&nbsp;&&nbsp;0xAC)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitNic();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x03);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bnry&nbsp;page&nbsp;have&nbsp;read&nbsp;读页指针<br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;temp_CURR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x07);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//curr&nbsp;writepoint&nbsp;8019写页指针<br />&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;//temp_BNRY++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bnry++;<br />&nbsp;&nbsp;&nbsp;&nbsp;//if&nbsp;(temp_BNRY&nbsp;&gt&nbsp;0x7F)<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;=&nbsp;0x4C;<br />&nbsp;&nbsp;&nbsp;&nbsp;//||************************||<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp_BNRY&nbsp;!=&nbsp;temp_CURR)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//此时表示有新的数据包在缓冲区里<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0B,&nbsp;0x0F);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,&nbsp;0x1A);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x09,&nbsp;temp_BNRY);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSAR1写入读页地址的高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x08,&nbsp;0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSAR0写入读页地址的低字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0b,&nbsp;0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0a,&nbsp;0x04);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数低字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,&nbsp;0x0a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动Remote&nbsp;DMA读操作<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_buf0&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_buf1&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否是多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0b,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0a,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,0x22);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结束或放弃DMA操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||**************************||<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp_buf1&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;temp_buf1&nbsp;-&nbsp;4;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(((temp_buf0&nbsp;&&nbsp;0x0001)&nbsp;==&nbsp;0)&nbsp;||&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((temp_buf0&nbsp;&&nbsp;0xFF00)&nbsp;&lt&nbsp;&nbsp;0x4C00)&nbsp;||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((temp_buf0&nbsp;&&nbsp;0xFF00)&nbsp;&gt&nbsp;&nbsp;0x7F00)&nbsp;||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&nbsp;temp_buf1&nbsp;&gt&nbsp;0x0600))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0b,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x0a,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数高字节<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x00,0x22);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结束或放弃DMA操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetPage(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_CURR&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x07);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//page1读取CURR的值<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SetPage(0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//切换回page0<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;temp_CURR&nbsp;-&nbsp;1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//把bnry恢复为下16K中的空余部分<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if&nbsp;(temp_BNRY&nbsp;&lt&nbsp;0x4C)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;=&nbsp;0x7F;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;temp_CURR;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||************************||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x03,&nbsp;temp_BNRY);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//把BNRY恢复到指向下一帧write&nbsp;to&nbsp;bnry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0xFF);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//清除中断标志<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//表示数据包是完好的.读取剩下的数据<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(temp_buf1&nbsp;&&nbsp;1)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_buf1++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_len&nbsp;=&nbsp;temp_buf1&nbsp;&gt&gt&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x09,&nbsp;temp_BNRY);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSAR1写入读页地址的高字节//read&nbsp;page&nbsp;address&nbsp;high<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x08,&nbsp;0x04);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSAR0写入读页地址的低字节//read&nbsp;page&nbsp;address&nbsp;low<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0b,&nbsp;temp_buf1&nbsp;&gt&gt&nbsp;8);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节//read&nbsp;count&nbsp;high<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0a,&nbsp;temp_buf1&nbsp;&&nbsp;&nbsp;0xFF);&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数低字节//read&nbsp;count&nbsp;low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,&nbsp;0x0a);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//启动Remote&nbsp;DMA读操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(temp_i&nbsp;=&nbsp;0;&nbsp;temp_i&nbsp;&lt&nbsp;temp_len;&nbsp;temp_i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*buf++&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;ReadFromNet(0x10);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否是多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0b,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节//read&nbsp;count&nbsp;high&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0a,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数高字节//read&nbsp;count&nbsp;low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,0x22);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结束或放弃DMA操作//结束或放弃DMA<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||**************************||<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||判断是否是多余的操作???||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(temp_buf0&nbsp;&gt&gt&nbsp;8)&nbsp;-&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if&nbsp;(temp_BNRY&nbsp;&lt&nbsp;0x4C)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp_BNRY&nbsp;=&nbsp;0x7F;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//temp_BNRY&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(temp_buf0&nbsp;&gt&gt&nbsp;8);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//||**************************||<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x03,&nbsp;temp_BNRY);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteToNet(0x07,&nbsp;0xFF);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;temp_buf1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br /><br />///////////////////////////////////////////////////////////////////////////////////////////////////////<br /><br />---------------------------------------------------------------------
 楼主| 火光 发表于 2009-4-13 19:51 | 显示全部楼层

接着说!

上面的程序主要是对周立功的程序做了一些改进:<br /><br />一.BNRYCURR寄存器内容的理解问题<br />&nbsp;&nbsp;&nbsp;在周的程序里,对RTL8019AS进行初始化的时候,BNRY&nbsp;=&nbsp;0X4C,CURR&nbsp;=&nbsp;0X4D<br />&nbsp;&nbsp;&nbsp;在收包程序里也相应地使BNRY落后CURR一页,其实这个看来是多余的,我反复测试过,对于接收缓冲区来,BNRYCURR这二个读写指针还是和我们平时理解的一样的:当BNRY&nbsp;==&nbsp;CURR时,接收缓冲为空;当BNRY在CURR下一页的时候,接收缓冲为满.<br />二.读写REMOTE&nbsp;DMA问题<br />&nbsp;&nbsp;&nbsp;在对REMOTE&nbsp;DMA进行读写后,是没有必要进行终止DMA操作的<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0b,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR1写入读取字节计数高字节//read&nbsp;count&nbsp;high&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x0a,0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//RSCR0写入读取字节计数高字节//read&nbsp;count&nbsp;low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WriteToNet(0x00,0x22);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//结束或放弃DMA操作//结束或放弃DMA<br /><br />这样的代码完全是多余的.<br />但结束放弃DMA终究有什么用呢?<br />我认为在使用SEND&nbsp;PACKET命令的时候才是有必要的,见上面的Rec_Packet_0()函数,如果对DMA的读写命令发起后,需要中途终止,,,才是用&quot;WriteToNet(0x00,0x22);&quot;的时候,如果DMA读写过程是正常结束的,,,那是没有必要的<br /><br /><br />
 楼主| 火光 发表于 2009-4-13 19:59 | 显示全部楼层

继续...

三.发送以太包的命令<br />&nbsp;&nbsp;&nbsp;如果要NIC发送以太网包,,,&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;只要用&nbsp;WriteToNet(0x00,&nbsp;0x26);<br />&nbsp;&nbsp;&nbsp;没有必要用WriteToNet(0x00,&nbsp;0x3E);<br />&nbsp;&nbsp;&nbsp;后者中的一些位是多余的<br /><br />四.编写了一个用SEND&nbsp;PACKET实现读包的函数Rec_Packet_0;&nbsp;其实它是和Rec_Packet功能一致的.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 楼主| 火光 发表于 2009-4-13 20:14 | 显示全部楼层

困惑的地方!

虽然本人对RTL8019AS的大部分功能,但也继续不清楚的啊!<br /><br />1.当本人故意让接收缓冲区溢出,这时ISR中的OVWRST位就会置起来了,,<br />&nbsp;&nbsp;本人把接收区中的包全部读出来,使的CURR&nbsp;==&nbsp;BNRY,然后用&nbsp;ISR&nbsp;=&nbsp;0XFF的办法去清除ISR中的OVW标志,但始终不能成功,只有当网线上再来一个或者多个以太包,使得ISR的RXE标志起来,,,才能用ISR&nbsp;=&nbsp;0XFF去清除ISR中的OVW标志,无限困惑啊!!!<br /><br />2.ISR中的RST位也不会&quot;读出一个包以后自动清0&quot;的,这个和OVW情况类似的<br />&nbsp;&nbsp;反正,如果一旦OVW标志起来,你要把它清除掉,可不太容易了...<br />&nbsp;&nbsp;这实在让人不痛快啊!<br /><br />3.TSR中的OWCCDHCRS位的意义不太清楚,,,<br /><br />4.CSR中的DFR位也不太明白<br />
 楼主| 火光 发表于 2009-4-13 20:23 | 显示全部楼层

继续...

网上看了许多的**,发现对CURRBNRY寄存器的理解都是不妥当的,那样的程序,跑跑也是能跑的,但不能说精密,对不对?<br />
zcying 发表于 2009-4-14 10:43 | 显示全部楼层

单片机跑TCP/IP,一般就用这个芯片

  
 楼主| 火光 发表于 2009-4-14 15:28 | 显示全部楼层

呵呵

我说的是:DP8390的资料上讲得含糊,许多寄存器的位的含义,没有说明白.比如说ISRRSRTSR上的某些位,,,让人困惑的很!<br />&nbsp;<br />尤其是美国国立半导体的那份有关&quot;DP8390D/NS32490D&nbsp;NIC&nbsp;Network&nbsp;Interface&nbsp;Controller&quot;**,看了让人头痛的紧...<br /><br />RTL8019AS说是和NE2000兼容的,那它上面有没有美国国立半导体说的古怪特性的呢?
胡刚 发表于 2009-4-14 15:42 | 显示全部楼层

英文的

  
chen_mickey 发表于 2010-7-1 11:36 | 显示全部楼层
周立功?
hotpower 发表于 2010-7-4 00:24 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

75

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部