DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2167|回复: 0
打印 上一主题 下一主题

[待整理] iEthernet W5200数据手册(版本1.2.4)之:寄存器说明

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-27 23:57:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
4  寄存器说明
          4.1  通用寄存器
          MR (模式寄存器) [R/W] [0x0000] [0x00]
          该寄存器用于  S/W 复位',ping block模式和PPPoE模式。.
         
           
          GAR (网关IP地址寄存器) [R/W] [0x0001 – 0x0004] [0x00]
          该寄存器用来设置默认网关地址。
          例) “192.168.0.1”
         
           
          SUBR (子网掩码寄存器) [R/W] [0x0005 – 0x0008] [0x00]
          该寄存器用来设置子网掩码地址。
          例) “255.255.255.0”
         
           
          SHAR (源MAC地址寄存器) [R/W] [0x0009 – 0x000E] [0x00]
          该寄存器用来设置源MAC地址。
          Ex) 例如: “00.08.DC.01.02.03”
         
                  
          SIPR (源IP地址寄存器) [R/W] [0x000F – 0x0012] [0x00]
          该寄存器用来设置源IP地址。
          例) “192.168.0.2”
         
               
          IR (中断寄存器) [R] [0x0015] [0x00]
          CPU通过访问该寄存器获得产生中断的来源。任何中断源都可以被中断屏蔽寄存器(IMR)进
          行位屏蔽。当任何一个未屏蔽的中断位为“1”,/INT的信号将保持低电平。只有当所有未屏蔽
          的中断位为0,/INT才恢复高电平。(也就是说,/INT为低电平意味着W5200有中断产生,
          高电平意味着无中断产生或者中断被屏蔽了)
         
         
           
          IMR (中断掩码寄存器) [R/W] [0x0036] [0x00]
          中断屏蔽寄存器(IMR)用来屏蔽中断源。每个中断屏蔽位对应中断寄存器(IR)中的一个位。
          如果中断屏蔽位被置“1”时,无论何时IR对应的位也置”1”,中断即会产生。而当IMR中屏蔽
          位被清“0”,即使对应的IR中断位置“1”,也不会产生中断。(简单来讲,IMR中“1”就是允许
          中断的意思,“0”就是屏蔽中断的意思。)
         
         
          RTR (重试时间值寄存器) [R/W] [0x0017 – 0x0018] [0x07D0]
          该寄存器用来设置溢出的时间值。每一单位数值为100 微秒。初始化时值设为2000(0x07D
          0),即相当于200 毫秒
          例) 当超时周期被设置为400ms时,RTR = 400ms /100us = 4000(0x0FA0)
           
                
           
          如果没有来自远程对等连接点的CONNECT、DISCON、CLOSE、SEND、SEND_MAC和
          SEND_KEEP命令回应,或回应的命令被延迟时,重新传送就会发生。
           
          RCR(重试计数寄存器) (Retry Count Register) [R/W] [0xFE0019] [0x08]
          该寄存器是设置重新传送的次数。当重新传送发生超过‘RCR+1’次,超时中断就会置‘1’。
          (中断寄存器(Sn_IR)的  ‘中断’位(‘TIMEOUT’ bit)设置为'1')。
           
          假如在TCP通讯中,Sn_SR(Socket n-th的状态寄存器)的数值会变为'SOCK_CLOSED'与此同时
          Sn_IR(Socket n-th的中断寄存器)(TIMEOUT)会置'1'。如果不是TCP通讯,就只有Sn_IR
          (TIMEOUT)会置  ‘1’。 例) RCR = 0x0007  
         
           
          W5200的超时可以用RTR和RCR来配置。W5200的超时包括地址解析协议(ARP)和TCP重新传
          送超时。
          在ARP的重新传送超时(请参阅  RFC 826  http://www.ietf.org/rfc.html),W5200会自动发
          送ARP请求去对方(peer)的IP地址,从而获取MAC地址信息(IP、UDP或TCP用于通信)。至
          于等待对方(peer)的ARP 响应方面,如在RTR中设置了重新传送时间时,对方(peer)的ARP没
          有响应,超时发生和ARP将会请求重新传送。一直重复此步骤达'RCR+1'次。
           
          如果在ARP重复请求重新传送次数达到'RCR+1'次时,仍然没有得到ARP响应,就会触发最终
          超时中断,Sn_IR(TIMEOUT)会变为'1'。
          ARP请求的最终超时值(ARPTO)如下:
         
           
          在RTR和RCR设置了的时间期间,发生TCP数据包重新传送超时,W5200就会发送  TCP 数据
          包(SYN、  FIN、RST、数据包)和等待确认(ACK)。如果没有对方(peer)的ACK响应,就会
          触发超时且TCP数据包(较早前传送的)会重新传送。直到重新传送'RCR+1'次。即使TCP数
          据包重新传送'RCR+1'次,如果对方(peer)仍然没有的ACK回应,就会触发最终超时,Sn_SR会
          变为  'SOCK_CLOSED,且同一时间Sn_IR(TIMEOUT)='1'。
           
          TCP数据包重新传送的最终超时(TCPTO)可以用以下公式计算:
         
           
          例) 当  RTR = 2000(0x07D0),RCR = 8(0x0008),
            ARPTO = 2000 X 0.1ms X 9 = 1800ms = 1.8s
            TCPTO  = (0x07D0 + 0x0FA0 + 0x1F40 + 0x3E80 + 0x7D00 + 0xFA00 + 0xFA00                  
          + 0xFA0 + 0xFA00) X 0.1ms
                  = (2000 + 4000 + 8000 + 16000 + 32000 + ((8 - 4) X 64000)) X 0.1ms
                  = 318000 X 0.1ms = 31.8s
           
          PART(PPPoE模式的身份验证模式) [R] [0x001C-0x001D] [0x0000]
          该寄存器显示已经被PPPoE 服务器识别的身份认证类型。W5200支持PAP和CHAP两种类型的
          身份验证方法。
         
           
          PPPALGO(PPPoE模式的认证算法)[R][0x001E][0x00]
          该寄存器通知认证算法于PPPoE模式。如需详细信息,请参阅PPPoE的应用说明。
           
          VERSIONR (W5200芯片版本寄存器)[R][0x001F][0x03]
          该寄存器是W5200芯片版本寄存器。
           
          PTIMER(PPP 连接控制协议请求定时寄存器)[R/W][0x0028]
          该寄存器是指示发送LCP Echo请求的期限。PTIMER的值为1时,大约是25毫秒(ms) 。   
          例) 如果  PTIMER是  200,
                 200 * 25(ms) = 5000(ms) = 5 seconds
           
          PMAGIC(PPP 连接控制协议幻数寄存器)[R/W] [0x0029][0x00]
          该寄存器用于选择LCP协商的幻数(Magic number)。请参考应用笔记中的“如何连接ADSL”。
         
          INTLEVEL(低电平中断定时器寄存器)  [R/W][0x0030 – 0x0031][0x0000]
          该寄存器用于设置中断生效等待的时间(IAWT)。它配置nINT低等待时间直到下一个中断生效。
           
       

        图 6  INTLEVEL的时序

           
          A.  对Socket0而言,当触发接收中断(即:S0_IR(3) = ‘1’),那么相应的IR2位就会被置1(即:IR(S0_IR) = ‘1’).一旦IR2的某位被置1了,nINT就将变为低电平。B,C同理。
          B. 在Socket 1中,触发连接中断(S1_IR(0)='1')和相应的位(bit)设置为'1' (IR(S1_IR)='1')。
          C.主机清零S0_IR(S0_IR=0x00)则相应的IR位(bit)也会自动被清零(IR(S0_IR) =  ‘0’)。nINT信号变为高电平。
          D.虽然S0_IR被清零了,但是由于socket1的中断还存在,所以IR2的值不为0.既然IR2的值不为
           
          0,那么nINT引脚就应该变为低电平。那么nINT从高电平变为低电平需要多长时间呢?这就
          要看INTLEVEL register的设置情况了。如果INTLEVEL register的值是0x000F的话,nINT将在IAWT(16 PLL_CLK)后变为低电平。
           
          IR2(W5200 SOCKET中斷寄存器)[R/W][0x0034][0x00]
          IR2这个寄存器用来通知主机W5200中socket发生中断。如果任何中断发生时,IR2相关的位(bit)会被设置为‘1’。当相关的掩码位(bit)被设置为‘1’时,nINT信号为低电平。nINT会保持低电平直到所有Sn_IR的位(bit) 被设置为‘0’时,它才会变为高电平。  
          1  
           
          PHYSTATUS(W5200物理层状态寄存器)[R/W][0x17]
          PHYSTATUS是用来指示W5200物理层状态的寄存器。
           
           
          IMR2(中断掩码寄存器2)[R/W][0x0016][0x00]
          该中断掩码寄存器是用来掩码中断。每个中断掩码位(bit)对应于中断寄存器2(IR2)。当中断掩码位被设置为“1”且中断寄存器2的相关位也置1时,中断发生。如果任何位(bit)在中断掩码寄存器(IMR)设置为’0'时,就不会发生中断。
         
         
         
          4.2  Socket 寄存器
          Sn1_MR (Socket n-th 模式寄存器) [R/W] [0x4000+0x0n00] [0x00]
          2
           该寄存器用于配置所有SOCKET的选项或协议类型
         
                                                           
          1n是  Socket  n-th  的数目  (0, 1, 2, 3, 4, 5, 6, 7).
          2[读/写] [socket 0地址, socket 1地址, socket 2地址, socket 3地址, socket 4地址, socket 5地址,socket 6
          地址, socket 7地址] [复位数值]  
         
            
          Sn_CR (Socket n-th 命令寄存器) [R/W] [0x4001+0x0n00] [0x00]
          这是用来设置Socket  n-th的命令如OPEN、CLOSE、CONNECT、LISTEN、END和RECEIVE。
          经W5200识别这一命令后,Sn_CR寄存器会自动清零为  0x00。尽管Sn_CR被清零为  0x00,
          但命令仍在处理中。为了验证该命令是否完成,请检查Sn_IR或Sn_SR寄存器。
         
         
         
          以下命令只适用于SOCKET 0 和  S0_MR(P3:P0) = S0_MR_PPPoE。更多细节请参考“如何使用ADSL”。
         
           
          Sn_IR (Socket n-th中断寄存器) [R] [0x4002+0x0n00] [0x00]
           
          Sn_IR寄存器用于提供给Socket n-th中断类型信息,如建立(Establishment)、终止(Termination)、接收数据(Receiving data)和超时(Timeout)。当触发一个中断即Sn_IMR的掩码位是'1'的时候,Sn_IR的中断位将会变成‘1’。
          如果想把Sn_IR位清零的话,主机应该将该位置‘1’。以当所有Sn_IR的位被清零后(‘0’),IR(n)
          将会自动清零。
         
           
          Sn_SR (Socket n-th状态寄存器) [R] [0x4003+0x0n00] [0x00]
          该寄存器提供Socket n-th的状态。 当使用Sn_CR寄存器或在传输/接收数据包时,Socket
          的状态将会更改。下表描述了不同 Socket n-th的状态。
           
         
         
           
          以下是转换状态的过程。
         
           
          数值  代号  说明
         
           
       

        图 7   Socket的状态转换图

           
          Sn_PORT (Socket n-th源端口寄存器) [R/W] [0x4004+0x0n00-0x4005+0x0n00] [0x0000]
           
          当使用TCP或UDP模式时,该寄存器会为每个SOCKET设置一个源端口号,而这个设置需要在
          执行OPEN命令之前完成。
          例) 如SOCKET 0 的端口=5000(0x1388),配置应如下,
         
          Sn_DHAR (Socket n-th目标MAC地址寄存器) [R/W] [0x4006+0x0n00-0x400B+0x0n00] [0xFFFFFFFFFFFF]
          该寄存器会为Socket n-th  设定目标MAC地址。此外,如果Socket0已用于PPPoE模式,那S0_DHAR会为 PPPoE服务器硬件设置一个已知的地址。
           
          当在UDP或IPRAW模式下使用SEND_MAC的命令时,它会为Socket n-th 设定目标MAC地址。而在TCP、UDP和IPRAW模式时,Sn_DHAR会根据定CONNECT或SEND命令中的ARP程序取得的目标MAC地址作出设定。当成功执行CONNECT或SEND命令后,主机可以通过 Sn_DHAR取得目标MAC地址。
           
          当使用W5200中的PPPoE程序,PPPoE服务器MAC地址并不需要进行设置。然而,即使不使用W5200中的PPPoE程序,仍须自行实施MACRAW模式。如想要发送或接收PPPoE的数据包的话,那PPPoE服务器MAC地址(从PPPoE程序中取得)、PPPoE服务器的IP地址、 和PPP session ID就应须被设置。此外,MR(PPPoE)也应设置为'1'。
           
          S0_DHAR会在OPEN命令之前设置 PPPoE服务器MAC地址。 PPPoE服务器MAC地址是由S0_DHAR执行OPEN命令后,在 PDHAR里应用。而已经配置的PPPoE信息,即使是在CLOSE命令后,对于内部运作依然是有效的。
           
          例)如Socket 0的目标MAC地址  = 08.DC.00.01.02.10,配置应如下,
         
           
          Sn_DIPR (Socket n-th目标IP地址寄存器)[R/W][0x400C+0x0n00 0x400F+0x0n00]
          [0x00000000]
           
          该寄存器会为Socket n-th  设定目标IP地址。如果Socket0已用于PPPoE模式,那S0_DIPR会为 PPPoE服务器IP设置一个已知的地址。它只有在TCP、UDP、IPRAW或PPPoE模式下才有效,但是会在MACRAW模式下被忽略。
           
          在TCP模式下,当作为“TCP客户端”的时候,它会在执行CONNECT命令之前,为“TCP服务器“设置IP地址。而当作为“TCP服务器”的时候,它会在成功建立连接之后,在内部为“TCP客户端”设置 IP地址。
           
          在UDP或IPRAW模式下,Sn_DIPR会在执行SEND或SEND_MAC命令之前,设置为目标IP地址,用作传输UDP或IPRAW数据包。
          例) 如Socket 0的目标IP地址= 192.168.0.11,配置应如下,
         
           
          Sn_DPORT (Socket n-th目标端口寄存器)[R/W][0x4010+0x0n00-0x4011+0x0n00] [0x00] 目标端口号是在Socket n-th  的Sn_DPORT设置。如果Socket0已用于PPPoE模式,那S0_DPORT0会为 PPP session ID设置一个已知的号码。它只有在TCP、UDP、或PPPoE模式下才有效,而在其他模式下会被忽略。  
          在TCP模式下,当作为“TCP客户端”的时候,它会在执行CONNECT命令之前,监听“TCP服务器”的端口号。
          在UDP模式下,在执行SEND或SEND_MAC命令之前,在Sn_DPORT中设置目标端口号用作于传输 UDP数据包。
          在PPPoE模式下,已知的PPP session ID是在S0_DPORT中设置。 在执行OPEN命令之前,PPP session ID(由S0_DPORT0设置)会被用于PSIDR。
          例)如Socket 0的目标端口号= 5000(0x1388),配置应如下,
         
         
          Sn_MSS (Socket n-th最大分段寄存器)[R/W][0x4012+0x0n00-0x4013+0x0n00] [0x0000] 该寄存器用于TCP的MSS  - Maximum Segment Size(最大报文长度) 。当TCP是在被动模式下被启动,该寄存器会显示MSS的设置。而它只是支持TCP或UDP模式。当使用PPPoE(MR(PPPoE)='1')的时候,TCP或UDP模式的MTU将被分配在PPPoE的MTU范围。
         
           
          在IPRAW或MACRAW模式下,MTU(最大传输单元-maximum transmission unit)并不是在内部处理的,但会使用预设的MTU。因此,当传输的数据大于默认的MTU时,主机应该以手动方式将数据划分成默认MTU的单元大小。
           
          在TCP或UDP模式下,如果传输的数据大于MTU时,W5200会自动将数据划分成MTU的单元大小。在TCP模式下,MTU会被称为MSS。MSS是从主机的最大读写长度和对方的最大报文长度中取较小者作为TCP通信过程中的最大报文长度。
           
          例)如Socket 0的MSS = 1460(0x05B4),配置应如下,
         
          Sn_PROTO (Socket n-th IP协议寄存器) [R/W] [0x4014+0x0n00] [0x00]
          这是一个1字节的寄存器。它用于设置在IP层里IP报头(IP header)的协议号码字段。它只会在 IPRAW模式下才有效,而在其他模式下会被忽略。 Sn_PROTO需在执行OPEN命令之前设置。
           
          当Socket n-th在IPRAW模式下开启,它会发送和接收在Sn_PROTO中设置的协议号码数据。Sn_PROTO是可以被分配在由0x000xFF的范围,但W5200不支持TCP(0x06)  和UDP(0x11) 的协议号码。
           
          协议号码已在IANA(互联网地址编码分配机构)里定义。如想阅读细节,请参考在线文檔
          Uhttp://www.iana.org/assignments/protocol-numbersU.
          例) Internet Control Message Protocol (ICMP  - 互联网控制信息协议) = 0x01, Internet Group Management Protocol (互联网组群管理协议) = 0x02
           
          Sn_TOS (Socket n-th IP服务类型寄存器) [R/W] [0x4015+0x0n00] [0x00]
          该寄存器设置在IP层里IP header的TOS(Type of Service - 服务类型) 字段。它应在执行OPEN命令之前设置。请参考Uhttp://www.iana.org/assignments/ip-parametersU.
           
          Sn_TTL (Socket n-th IP生存时间寄存器) [R/W] [0x4016+0x0n00] [0x80]
          该寄存器设置在IP层里IP header的TTL(Time-To-Live  - 生存时间) 字段。它应在执行OPEN命令之前设置。请参考Uhttp://www.iana.org/assignments/ip-parametersU.
          Sn_RXMEM_SIZE (Socket n-th 接收內存大小寄存器) [R/W] [0x401E+0x0n00] [0x02]
          该寄存器为每个SOCKET配置接收内存的大小。每个SOCKET的接收内存大小是可以配置为  1、2、4、8和16K字节。 当每次系统复位(Reset)时,它将被分配为2K字节。 而每个SOCKET的Sn_RXMEM_SIZE的总和(Sn_RXMEM_SIZESUM) 应是16KB。
          Sn_TXMEM_SIZE (Socket n-th 传输内存大小寄存器) [R/W] [0x401E+0x0n00] [0x02]
           
          该寄存器为每个SOCKET配置传输内存的大小。每个SOCKET的传输内存大小是可以配置为  1、2、4、8和16K字节。 当每次系统复位(Reset)时,它将被分配为2K字节。 而每个SOCKET的Sn_TXMEM_SIZE的总和(Sn_TXMEM_SIZESUM) 应是16KB。
         
          Sn_TX_FSR (Socket n-th 传输空间大小寄存[R][0x4020+0x0n00-0x4021+0x0n00]
          [0x0800]
         
          该寄存器提供Socket n-th传输内存的可用大小空间(可供传输数据的字节大小)。请留意,主机不能编写大于Sn_TX_FSR的数据。因此,在发送数据之前,切记检查 Sn_TX_FSR。如果你的数据大小小于或等于 Sn_TX_FSR时,在复制数据后,可执行SEND或SEND_MAC命令来传输数据。
           
          在TCP模式下,当W5200通过DATA/ACK机制确认已成功发送了某SIZE的data,那么FSR寄存器将自动增加SIZE大小的空间。 在其他模式下,当 Sn_IR(SENDOK)是‘1’ 时,Sn_TX_FSR会自动增加已传输的数据大小。
           
          当检查该寄存器时,用户应先阅读高字节(0x4020,0x4120,0x4220,0x4320,0x4420,0x4520,0x4620,0x4720),然后阅读低字节(0x4021,0x4121,0x4221,0x4321,0x4421,0x4521,0x4621,0x4721) 才会得到正确的数值。
          例) 如2048(0x0800) 在S0_TX_FSR时,
         
           
          Sn_TX_RD (Socket n-th 传输读指针寄存器)[R][0x4022+0x0n00-0x4023+0x0n00]
          [0x0000]
           
          该寄存器显示传输内存里最后一个传输的地址。它可使用Socket n-th的命令寄存器中的SEND命令,把数据从目前 的Sn_TX_RD传输到Sn_TX_WR,并在传送完成后自动更新。
           
          因此,在传输完成后,Sn_TX_RD和Sn_TX_WR将具有相同的数值。 当检查该寄存器时,用户应先阅读高字节(0x4022, 0x4122, 0x4222, 0x4322, 0x4422,
          0x4522,0x4622, 0x4722),然后阅读低字节  (0x4023, 0x4123, 0x4223, 0x4323, 0x4423, 0x4523, 0x4623, 0x4723)才会得到正确的数值。
           
          Sn_TX_WR (Socket n-th 传输写指针寄器)[R/W][0x4024+0x0n00-0x4025+0x0n00]
          [0x0000] 该寄存器提供位置的信息用作编写传输数据。
           
          当检查该寄存器时,用户应先阅读高字节(0x4024,0x4124, 0x4224, 0x4324, 0x4424, 0x4524, 0x4624, 0x4724),然后阅读低字节(0x4025, 0x4125, 0x4225, 0x4325, 0x4425, 0x4525, 0x4625, 0x4725) 才会得到正确的数值。
           
          注意:此寄存器的数值会在成功执行SEND命令到Sn_CR后被改变。
          例) 如2048(0x0800) 在S0_TX_WR时,
         
           
       

        图 8 物理地址的计算

           
          但这读取的数值本身并不是物理地址。因此,物理地址的计算方法如下。
          1.  Socket n-th传输基址地址(此后会称为gSn_TX_BASE) 和Socket n-th传输掩码地址(此后会称为gSn_TX_MASK)将会以TMSR数值计算。如有需要,请参考psedo的初始化代码。
          2.  将Sn_TX_WR和gSn_TX_MASK进行位与运算(bitwise-AND operation),将得到的结果赋予Socket的传输内存中的偏移地址(此后会称为 get_offset)。
          3.  把get_offset和gSn_TX_BASE的数值相加起来,然后将结果赋予物理地址(此后会称为get_start_address)。
           
          现在,编写一个任何大小的传输数据到get_start_address。 (*如在编写的时候超过了Socket传输内存的上界,在这种情况下,先把传输数据编写到上界和把物理地址转到gSn_TX_BASE,然后再编写其余部分的传输数据。) 之后,切记要把Sn_TX_WR的数值增加到跟编写数据的大小相同。最后,提供一个SEND命令给Sn_CR (Socket n-th 命令寄存器)。 如果有需要,请参考TCP服务器模式下传输部分的 psedo代码 。
           
          Sn_RX_RSR (已接收大小寄存器) [R] [0x4026+0x0n00-0x4027+0x0n00] [0x0000]
          该寄存器向用户提供在Socket n-th接收内存里已接收数据的字节大小。由于这是以Sn_RX_RD和Sn_RX_WR的数值进行内部计算,它会因Sn_CR (Socket n-th 命令寄存器)中的RECV命令和从远程节点接收数据而自动改变。
          当检查该寄存器时,用户应先阅读高字节(0x4026, 0x4126, 0x4226, 0x4326, 0x4426, 0x4526, 0x4626, 0x4726),然后阅读低字节(0x4027, 0x4127, 0x4227, 0x4327, 0x4427, 0x4527, 0x4627, 0x4727)才会得到正确的数值。
           
          例) 如2048(0x0800) 在S0_RX_RSR时,
         
          这个数值的总大小可以根据接收内存大小寄存器的数值来决定。
           
          Sn_RX_RD (Socket n-th 接收读指针寄器)[R/W][0x4028+0x0n00-0x4028+0x0n00]
          [0x0000]
          该寄存器提供的位置信息读取接收数据。当检查该寄存器时,用户应先阅读高字节  (0x4028, 0x4128, 0x4228, 0x4328, 0x4428, 0x4528, 0x4628, 0x4728),然后阅读低字节(0x4029, 0x4129, 0x4229, 0x4329, 0x4429, 0x4529, 0x4629, 0x4729) 才会得到正确的数值。
          注意:此寄存器的数值会在成功执行SEND命令到Sn_CR后被改变。
           
          例) 如2048(0x0800) 在S0_RX_RD时,
         
           
          但阅读这数值本身并不是物理地址。因此,物理地址的计算方法如下。
          1.  Socket n-th接收基址地址(此后会称为gSn_RX_BASE) 和Socket n-th接收掩码地址
          (此后会称为gSn_RX_MASK)将会以RMSR数值计算。如有需要,请参考 psedo的5.1
          初始化代码。
          2.  将Sn_RX_WR和gSn_RX_MASK进行位与运算(bitwise-AND operation),将得到的结
          果赋予Socket的传输内存中的偏移地址(此后会称为 get_offset)。
          3.  把get_offset和gSn_RX_BASE的数值相加起来,然后将结果赋予物理地址(此后会称为get_start_address)。
          Sn_RX_WR (Socket n-th 接收写指针寄存器)[R/W][(0xFE402A + 0xn00)  –  (0xFE402B + 0xn00)][0x0000]
           
          该寄存器提供位置信息以供编写接收数据。当检查该寄存器时,用户应先阅读高字节(0x402A, 0x412A, 0x422A, 0x432A, 0x442A, 0x452A, 0x462A, 0x472A),然后阅读低字节(0x402B, 0x412B,0x422B, 0x432B, 0x442B, 0x452B, 0x462B, 0x472B)才会得到正确的数值。
         
          例) 如2048(0x0800) 在S0_RX_WR时,
         
           
          Sn_IMR (Socket n-th 中断掩码寄存器)[R/W][0x402C+0x0n00][0xFF]
          该寄存器配置Socket n-th的中断,以及通知到主机。Sn_IMR的中断掩码位跟Sn_IR的中断位是对应的。如果中断发生在任何Socket时,该位会设置为‘1’,而与其对应的Sn_IR位也会设置为‘1’。当Sn_IMR和Sn_IR的位同时是‘1’'时,IR(n)将成为‘1’。在这个时候,如果IMR(n) 是‘1’,中断将会被发送到主机。 (‘nINT'’信号为低电平)
           
          Sn_FRAG (Socket n-th分段器)[R/W][0x402D+0x0n00-0x402E+0x0n100][0x4000]
           
          它设置了IP 层中IP 报头的分段字段。W5200并不支持在IP层的分段数据包。尽管Sn_FRAG已配置,但IP数据并没有分段,同时也不建议在此分段。它应该在执行OPEN命令之前被配置。
          例) Sn_FRAG0 = 0x4000 (不要分段)
         
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-24 21:42 , 耗时 0.102125 秒, 21 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表