昨天给大家介绍了有关中断、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数据手册(一)(http://blog.iwiznet.cn/?p=4157)
单片机以太网控制芯片W7100A数据手册(二)(http://blog.iwiznet.cn/?p=4160)