WIZnet2012

单片机以太网控制芯片W7100A数据手册(三)

0
阅读(1877)

 昨天给大家介绍了有关中断、I/O端口及定时器的部分,今天继续讲解W7100A如何通过异步收发以及看门狗定时器&TCP/IP内核相关内容。 

6.   通过异步收发(UART)

W7100A的UART工作在全双工状态,允许同时接受和发送操作。因为W7100A是双数据缓冲区,接收器在第一个字节没有被读取时,仍然可以接收数据。在读操作时,从接受缓冲区SBUF读取数据。另一方面,在发送过程中,SBUF将数据装载到发送缓冲区。UART有4中不同的工作模式,一种是同步模式,3种异步模式。模式2和模式3的一些特殊的特性主要用于多机通信。通过设置SCON寄存器的SM2位可以使用该特性。主处理器首先发送地址字节以确定目标从属机。地址字节与数据字节在第9位进行区分,第9位为1则表示是地址字节,为0则标志数据字节。当SM2=1,数据字节不会使从属机产生中断,而地址字节则将使所有从属机产生中断。选中的从属机将SM2清零,准备接受即将到来的数据。而没有被选中的从属机SM2仍然为1,忽略所有接受的数据。

引脚的功能描述如下:

表6.1 UART引脚定义

注意:

SM2 – 允许多处理器通信

SM1 – 设置波特率

SM0 – 设置波特率

REN – ‘1’ : 使能串行接收

‘0’ : 禁止串行接收

TB8 – 在模式2和模式3,发送数据的第9位。根据CPU的运行情况启用这一位(奇偶校验,多机通信等)

RB8 – 在模式2和模式3,接收数据的第9位。在模式1,如果SM2=0,RB8是停止位,在模式0,该位没有使用。

UART模式如下表所示:

 

6.1         中断

与UART中断有关的位如下。中断可以由IE寄存器触发,中断优先级可以由IP寄存器配置。

图6.6 UART配置寄存器

注意:

TI – 发送中断标志,完成一次发送后由硬件自动置”1”,必须由软件清除

RI – 接收中断标志,接收一个串行数据后由硬件自动置”1”,必须由软件清除

所有可以产生中断的位都可以通过软件设置或清除,与硬件产生的效果相同。也即是说,中断可以由软件产生或清除。

表6.4 UART中断

6.2         模式0,同步模式

TXD输出同步时钟,波特率固定位1/12时钟频率(CLK)。传输的8位数据低位在前,通过设置RI=0和REN=1,即可启动接收。

6.3         模式1,8位UART,波特率可变,Timer1或Timer2作为时钟源

RXD引脚作为串行通信的输入端,TXD引脚作为串行通信的输出端。10位传输的数据顺序是:1个起始位(0)、8位数据位(低位在前)、一个停止位(1)。在接收过程中,通过起始位同步传输过程,下一步即可以通过SBUF读取到8位数据,停止位用于触发特殊功能寄存器SCON(0x98)的RB08位,根据Timer1或Timer2的模式可以改变通信波特率。要使用Timer2作为时钟源,需要设置T2CON(0xC8)寄存器的TCLK和RCLK位。

6.4         模式2,9位UART,固定波特率

模式2与模式1相同,但波特率固定为1/32或1/64时钟频率,传输的数据位11位:一个起始位(0),8位数据位(低位在前),一个可编程的第9位和一个停止位(1)。第9位可用于UART数据的其偶检验。在发送过程中,SCON寄存器的TB08位是作为数据的第9位输出的。在接收过程中,接收的第9位将保存在sCON的RB08位。

6.6         波特率设置

表6.5 波特率设置

注意:

波特率计算公式

使用Timer1 – 波特率 = ( 2SMOD / 32 ) * ( 时钟频率 / 12( 256 – TH1 ) )

使用Timer2 – 波特率 = 时钟频率 / ( 32 * ( 65536 – ( RLDH, RLDL ) ) ) 

7.   看门狗定时器

7.1         概述

看门狗定时器由系统时钟经过一系列的分频器提供时钟信号,如下图所示。分频器输出是可选择的,它决定了定时器超时的间隔。当看门狗定时器产生超时的时候,相应的中断标志将置位。如果允许的话,对系统复位。当中断允许控制位和中断总开关都开启时,中断标志将触发中断。复位和中断是完全不同的两个功能,根据应用系统的要求,可分别得到响应、或单独得到响应、或忽略之。

7.2         中断

与看门狗中断有关的位如下图所示。中断可以由IE(0xA8)和EIE(0xE8)寄存器打开或关闭。由EIP(0xF8)寄存器设置其优先级。IE中的中断总开关EA可打开(1)或关闭(0)所有中断。

 

7.3         看门狗定时器复位

看门狗定时器复位的操作如下:一旦设定溢出的时间间隔,系统首先通过RWT重新启动看门狗。然后,通过启动看门狗定时器复位(WDCON.1)位,启动复位模式。在定时器到达用户设定的定时值之前,软件可以置复位看门狗定时器(WDCON.0)位为1。如果在定时器时间溢出发生之前设置RWT,定时器将重新启动;如果在RWT置位之前发生了定时器溢出,看门狗将对CPU复位。软件对RWT设置以后,硬件将自动清除RWT。当产生一次复位,WTRF(看门狗定时的复位标志WDCON.2)将自动设置,以指示当前复位的类型。必须由软件手动清零该位。

7.4         简单定时器

看门狗定时器是一个独立运行的定时器。在定时器模式下禁止复位(EWT=0)和禁止中断(EWDI=0),定时器开始向WD[1:0]预先设置的时间计数,并将允许看门狗中断标志。对RWT复位,定时器将工作在时间溢出监测模式。WDIF位可以由软件清0或置1。看门狗中断可以用于需要长时间定时的应用系统中,中断由看门狗中断允许启动位(EIE.4)开启。那么当产生时间溢出,看门狗定时器将设置WDIF位(WDCON.3)为1。如果中断总开关开启,那么将产生中断。注意,在一个可能的看门狗复位之前,WDIF将在512个时钟之后复位。看门狗中断标志指示中断的来源,必须由软件清除。如果看门狗中断应用得当,看门狗复位将使得中断程序可以监控任何系统错误。

7.5         系统监控

如果WDCON的EWT位置位,W7100A会在一个看门狗时间超时发生后重启。用户可以使用看门狗定时器作为系统监控的功能,例如,系统在看门狗中断之前正在运行错误代码,而且也没有RWT清除进程,因为这种代码不是由用户编写的,这种情况将会导致看门狗超时发生,W7100A将会重启。用户通过这种机制可以避免不想看到的系统状态。

7.6         与看门狗有关的寄存器

看门狗定时器定时器在运行期间与多个特殊功能寄存器的位相关。这些位可用于复位源、中断源、软件检测定时器,也可以是这三者的任意组合。复位和中断都有状态标志。看门狗还有一个位是重启定时器。下表是对这些位的详细介绍。

表7.2 与Watchdog有关的”位”的总结

注意:

WTRF – 看门狗定时器复位标志。当该标志由硬件置位时,标志着已经产生了看门狗定时器复位。然而如果由软件对该标志置位,不会触发看门狗定时器复位。在复位期间,该标志会被清除,否则需要软件清除。如果EWT被清除,看门狗定时器对该位不产生影响。

EWT  – 允许看门狗定时器复位。该位控制看门狗定时器对微处理器的复位,而对看门狗中断没有影响。必须使用顺序访问才能对该位经行修改。

0 : 看门狗定时器溢出不对微处理器复位

1 : 看门狗定时器溢出对微处理器复位

RWT  – 复位看门狗定时器。对RWT置”1”将对看门狗定时器复位。在看门狗定时器溢出之前,必须按照顺序访问的过程对该位经行置位操作,否则将产生复位或中断。

未使用的位读出为1或0。

下表总结了控制看门狗的”位”及其功能

表7.3 看门狗的”位”及作用

时钟控制寄存器CKCON(0x8E)包含WD[1:0]位,用于选择看门狗定时器溢出时间。看门狗时钟直接来源于CLK引脚输入,看门狗有四种时间溢出选择(基于输入的CLK时钟),如表7.4所示。这是一个预选的时钟数。因此实际的时钟溢出时间与CLK频率是相关的。

*W7100A时钟频率=88.4736MHz

表7.4 Watchdog时间间隔

上表所示的时间间隔是产生中断事件。如果允许产生复位,那么将在512个时钟之后产生复位,而不管中断的出现。因此,实际看门狗溢出时间就是选择的看门狗定时时钟周期再加上512个时钟周期(CLK引脚信号)。

7.1         顺序访问寄存器

因为WDCON是顺序访问寄存器,用户必须用下面的步骤来设置WDCON的值。TA位于特殊功能寄存器的0xC7地址。

MOV TA, #0xAA

MOV TA, #0x55

;任何直接寻址指令对顺序访问寄存器操作

用户在设置WDCON时应该一直使用这个顺序

表7.5 顺序访问寄存器

8.   TCPIP内核

8.1         存储器映射

TCP/IP内核由通用寄存器、SOCKET寄存器、TX存储器和RX存储器组成,如下图所示:

8.2         TCP/IP内核寄存器

8.2.1   通用寄存器

8.2.2   SOCKET寄存器

 

8.3        寄存器描述

8.3.1   模式寄存器

MR (模式寄存器) [R/W] [0xFE0000] [0x00]

例:设置地址为”192.168.0.2”

0xFE000F 0xFE0010 0xFE0011 0xFE0012
192 (0xC0) 168 (0xA8) 0 (0x00) 2 (0x02)

IR (中断寄存器) [R] [0xFE0015] [0x00]

该寄存器由主机W7100A设置以确定中断产生的来源。任何中断都可以由中断屏蔽寄存器屏蔽。当寄存器中任意中断位被置位,INT5(nINT5: TCPIP内核中断) 引脚将变低电平,它将一直保持低电平直到中断寄存器中的所有位都清除。

RTR ((重发时间值寄存器) [R/W] [0xFE0017 – 0xFE0018] [0x07D0]

该寄存器用来设置时间溢出的值。每一单位数值为100us。初始化时值为200ms(0x07D0),即该值设为2000(0xFA0)。

例:设定400ms,其值为4000(0x0FA0)

0xFE0017 0xFE0018
0x0F 0xA0

如果对端没有响应或响应延迟都将产生重传。

RCR (重传计数寄存器) [R/W] [0xFE0019] [0x08]

该寄存器内的数值设定可重发的次数。如果重发的次数超过设定值,将产生超时中断(相关的端口中断寄存器中的Sn_IR超时位(TIMEOUT)置’1’。

在TCP通信模式,Sn_IR的TIMEOUT=’1’时,Sn_SR的状态改变为”SOCK_CLOSED”状态。在其它通信模式,只是Sn_IR的TIMEOUT=’1’。

W7100A超时中断可以通过RTR和RCR进行配置。其中TIMEOUT中断分为ARP超时和TCP重传超时.

对于ARP(参考RFC 826, http://www.ietf.org/rfc.html)重传超时, W7100A自动发送ARP请求到对端IP地址,以获得MAC地址信息。(用于IP,UDP,或TCP通信).在等待对端ARP响应过程中,如果在RTR设置的时间范围内都没有响应,将产生超时并重复发送ARP请求。重发上限为’RCR+1’次。

在ARP重复请求’RCR+1’次后如果没有ARP响应,那么最终将产生超时且Sn_IR(TIMEOUT)置’1’。

ARPTO = ( RTR X 0.1ms ) X ( RCR + 1 )

ARP请求超时的计算如下(ARPTO):

TCP数据包传输超时,W7100A传输TCP数据包(SYN,FIN,RST,DATA数据包)并在RTR和RCR设置的时间范围内等待响应(ACK)。如果对端没有响应将产生超时,并重复发送先前的TCP数据包。重复发送的次数为’RCR+1’。如果TCP数据包经过’RCR+1’次重复发送也没有得到对端的ACK响应,此时将产生最终的超时。在Sn_IR(TIMEOUT)=1时Sn_SR的值为’SOCKET_CLOSED’。

TCP数据包重复传输的最终超时的值计算如下:

 

例:当RTR = 2000(0x07D0), RCR = 8(0x0008),

ARPTO = 2000 X 0.1ms X 9 = 1800ms = 1.8s

TCPTO = (0x07D0 + 0x0FA0 + 0x1F40 + 0x3E80 + 0x7D00 + 0xFA00 + 0xFA00 + 0xFA00 + 0xFA00) X 0.1ms

= (2000 + 4000 + 8000 + 16000 + 32000 + ((8 - 4) X 64000)) X 0.1ms

= 318000 X 0.1ms = 31.8s

PATR (PPPoE模式下认证类型) [R] [0xFE001C-0xFE001D] [0x0000]

在与PPPoE服务器连接时该寄存器指示通过的安全认证方法。W7100A只支持两种安全类型:PAP和CHAP。

认证类型
0xC023 PAP
0xC223 CHAP

PPPALGO (PPPoE模式下认证算法)[R][0xFE001E][0x00]

该寄存器用于指示PPPoE连接时的认证算法。详细信息请参考PPPOE应用笔记。

PTIMER (PPP连接控制协议请求定时器寄存器) [R/W] [0xFE0028] [0x28]

该寄存器表示发出LCP Echo(响应请求)所需要的时间间隔。每1单位大约25ms。

例:设置PTIMER =200

200 * 25(ms) = 5000(ms) = 5 s

PMAGIC (PPP连接控制协议(LPC)幻数寄存器) [R/W] [0xFE0029][0x00]

该寄存器用于LCP握手时采用的幻数选项。参照 “How to connect ADSL”应用笔记。

VERSIONR (W7100A芯片版本寄存器)[R][0xFE001F][0x02]

该寄存器存储W7100A的版本信息。

INTLEVEL (中断低电平等待时间寄存器)[R/W][0xFE0030 – 0xFE0031][0x0000]

INTLEVEL设置中断触发等待时间(IAWT)。它配置内部中断INT5在下一个中断发生前的低电平触发等待时间。如果用户想启用TCP/IP内核中断,INTLEVEL寄存器的值必须大于0x2B00。否则TCP/IP内核中断可能被忽略。

a.对于SOCKET 0,如果中断发生(S0_IR(3) = ‘1’)且相应IR2位被置1(IR(S0_IR) = ‘1’),内部中断INT5信号将会被拉低。

b.同样的情况出现在:当socket 1出现连续中断(S1_IR(0)=‘1’)且相应位被置1(IR(S1_IR)=‘1’)。

c.当主机清掉S0_IR(S0_IR = 0x00)位及相应的IR2位(IR(S0_IR) = ‘0’),内部中断INT5信号将会从低电平(启动)重新拉高(禁止)。

d.当S1_IR清除后,因为SOCKET 1中断,对应的IR2并不为0x00,内部INT5信号应该为低电平。

然而,由于INTLEVEL值为0x000F,内部INT5信号还要持续IAWT(16 PLL_CLK)时间。

IR2 (W7100A 端口中断寄存器)[R/W][0xFE0034][0x00]

IR2寄存器用于通知主机W7100A产生端口中断。当中断产生后,在IR2的相关位置’1’.此时,INT5 (nINT5: TCPIP内核中断)引脚输出低电平信号,直到IR2的所有位都为’0’。一旦通过Sn_IR将IR2所有位都清零,INT5就变回高电平。

 

感谢阅读!

相关内容请查看:

单片机以太网控制芯片W7100A数据手册(一)

单片机以太网控制芯片W7100A数据手册(二)