什么是API函数以及如何使用W7100A进行初始化(TCPIPCore)?(一)

Home / 博客 / 什么是API函数以及如何使用W7100A进行初始化(TCPIPCore)?(一)

1. 简介

W7100A的全硬件TCP/IP协议栈使用户在不具备网络的知识背景下便可以轻松实现网络功能。同时,因为W7100A是一个与高性能8051单片机完全兼容的、具有TCP/IP硬件协议栈和以太网MAC/PHY的单芯片处理器,因此用户可以使用API函数轻松实现网络功能。

本文描述了API函数以及使用W7100A初始化的方法。文档中所有的参考代码都是在基于Keil编程环境下实现的。

 

2. 文档结构

TCP/IP核心API包括以下代码文件。用户在执行网络通信时所使用的函数都包含在源文件’socket.c’中。

 

3.  通用函数

‘tcpiccore.c’文件下的IINCHIP_READ()和IINCHIP_WRITE()是存取TCPIPCore的基本函数。在存取W7100A的TCPIPCore寄存器以及存储器时,这两个函数是使用最频繁的。

IINCHIP_READ:从TCPIPCore中读取数据

 

4. 初始化

初始化由两部分构成。一部分是关于MCU 寄存器的配置,另一部分是关于网络部分的配置。MCU 的配置需要定义存储器的存取时间和中断;而网络配置则用来设置基本的网络信息,例如IP地址等等。

 

4.1 MCU初始化

MCU初始化包括W7100A中TCPIPCore和MCU之间的接口寄存器的配置,以及使用TCPIPCore时的中断配置。

下面这段代码是MCU初始化的一个例子。

 

4.1.1 寄存器配置

由于在配置存储器存取时间、CKCON(0x8E)以及WTST(0x92)时要用到,所以需要设定W7100A的MCU和TCPIPCore之间的接口寄存器。CKCON寄存器用来控制MCU和TCPIPCore之间接口的速度,而WTST是用来设置MCU程序存储器存取时间的寄存器。

通过控制这两个寄存器,用户可以调整网络操作接口的速度。

-CKCON (0x8E): 嵌入式RAM等待状态寄存器。它可以控制嵌入式数据存储器的存取时间。时钟控制寄存器包括MD[2:0]这3位,用来指示专用数据存储器读/写信号的脉冲宽度。

 

MD[2:0]的用途是调整与I/O设备之间的通信速度,比如内部TCPIPCore与外部设备的通信速度。在复位之后,MD[2:0]将会恢复为默认值0x07,表示该低速设备正常工作。用户可以通过软件改变MD[2:0]的值来提高或者降低通信速度。在执行程序的任何时候(例如在MOVX指令与不同速度的设备之间)都可以改变MD[2:0]的值。为了增强网络的性能,用户可以将MD[2:0]设定为最小值(0x02)。

-WTST (0x92): 等待状态寄存器提供程序存储器存取时间的信息。它允许MCU可以在高速或低速程序存储设备之间进行操作。通过调整WTST寄存器的值,能够提高W7100A的性能。

 

4.1.2 中断配置

在网络操作时,为了能够处理来自TCPIPCore的中断,需要配置中断寄存器。整个中断寄存器可以被分为两个寄存器。一个由MCU区域来设定,另一个由TCPIPCore区域设定。如果用户不愿意使用中断,只需要禁止EINT5就可以。

 

4.1.2.1  MCU中断寄存器

为了能够使用TCPIPCore的中断,W7100A中的MCU需要设置IE、EIE、EIP、EIF等寄存器。在TCPIPCore中产生的中断信号与MCU中的nINT5(外部中断5)是内部连接的,因此为了能够处理TCPIPCore的中断事件,还需要配置中断寄存器。如果EINT5被禁止,即使TCPIPCore产生了中断,MCU也不能响应中断。

 

4.1.2.2 TCPIPCore中断寄存器

在TIPIPCore执行网络进程时,中断事件将会按照预先设定的情况发生。在TCPIPCore中,与中断进程相关的寄存器有5个。

 

CONFLICT: 如果APR请求命令中的IP地址与本地IP地址相同,这一位将会被置‘1’。可以通过向它写‘1’来清除。

UNREACH: 在发送UDP数据时,如果目标IP地址不存在,W7100A将会接收到ICMP数据包(地址不可获取),在这种情况下,IP地址和端口号将会被保存在无法到达的IP地址(UIPR)以和端口号(UPORT)中。UNREACH位将会被置‘1’。可以通过写入‘1’将此位清零。

PPPoE: 在PPPoE模式下,如果PPPoE连接被禁止,这个值将会被置‘1’。可以通过写入‘1’将此位清零。

IR2(0xFE0034) : TCPIPCore SOCKET中断寄存器. IR2寄存器的每一位都与Sn_IR寄存器相关。当中断发生时,IR2寄存器中相关的位就会被置‘1’。在这种情况下,在IR2所有的位都变成‘0’之前,EINT5会一直保持低电平。一旦IR2寄存器和Sn_IR寄存器都被清零,/INT信号会被拉高。

 

 

这是本文的部分内容,后续内容我们将在以后的博文分别介绍。欢迎大家的留言讨论。

 

更多有关W7100A的博文请看这里:

 

如何使用W7100A实现网络字符LCD 

单片机以太网控制芯片— iMCU W7100A

如何使用W7100A模拟I2C总线

如何实现W7100A程序烧录

 

也可进入我们的官方网站或博客查看更多。

如果您对WIZnet的产品或是技术感兴趣,请随时与我们联系。

可以直接留言或登录WIZnet官方网站:http://www.iwiznet.cn

公司微博是: http://weibo.com/wiznet2012

公司博客是:http://blog.iwiznet.cn/