tag 标签: api函数

相关博文
  • 热度 17
    2012-8-17 09:23
    942 次阅读|
    0 个评论
      在昨天的博文里,我们介绍了API函数以及TCPIPCore初始化的部分内容,接下来,我们继续为大家介绍第二部分的内容,希望对大家有所帮助。 第一部分在这里:http://blog.iwiznet.cn/?p=426   4.2 TCPIPCore初始化 TCPIPCore初始化用来设置最基本的网络配置信息,这些配置信息都是在网络通信中需要用到的,例如MAC地址、IP地址、子网掩码、网关等等。同时,也要分配TX和RX缓存器的大小。如果这些初始化程序不能正确地执行,通信就会失败。 下面的代码是TCPIPCORE初始化的一个例子。 4.2.1设置网关、子网掩码、IP地址、MAC地址 介质访问控制地址(MAC地址)、网关地址、子网掩膜地址以及IP地址的设置将会在后面的内容中提到。 4.2.2头(Header)文件/寄存器 -GAR0:网关IP地址寄存器。偏移地址为0x0001。 -SUBR0: 子网掩码地址寄存器. 偏移地址为0x0005。 -SHAR0: 本地MAC地址寄存器.偏移地址为0x0009。 -SIPR0: IP地址寄存器. 偏移地址为0x000F。 4.2.4设置TX/RX缓存器的大小 可以通过set_MEMsize()函数为每一个通道分别设置内部TX、RX缓存器的大小。每一个TX和RX存储器可设定的最大值都是16K字节。在8个端口内,可以自由将存储器空间的大小配置为1KB、2KB、4KB和8KB。如果用户将一个16K字节的存储器全部分配给一个已经建立连接的端口,其它的端口将没有可用的存储空间来收发数据。   5.函数描述 ‘wizmemcy.c’函数会在’tcpipcore.c’下被IINCHIP_READ_BUF()和IINCHIP_WRITE_BUF()函数调用。并且当这一函数执行的时候,不允许发生中断。同时需要注意的是,例如fsrc,fdst以及len等这些参数需要根据不同的编译器来分配不同的值。所以,用户必须认真设定这些值。DPX0和DPX1用来快速复制存储器的信息。当使用INCHIP_WRITE_BUF()函数时, DPX0指示内部的存储器域,域值大小为0x00。DPX1也指示了存储器的域,但是这些域被指定给TCPIPCore,并且域值为0xFE。但是当调用IINCHIP_READ_BUF()函数时,正好相反,DPX0指示被指定给TCPIPCORE的域,域值大小为0xFE;DPX1指示了内部的存储器域,域值大小为0x00。因为这个函数是在启动ROM区域的0x0000 ~ 0x07FF用ISP代码中被定义的,wizmemcpy代码位置不是在0x0000 ~ 0x07FF中。否则,当存储器映射转换进程时,用户代码就不能从ISP路径返回到程序存储区域。如果想了解更多关于ISP代码,请参考“How to program Flash memory”.   5.3 tcpipcore.c iinchip_irq(): 当发生TCPIPCore中断时,MCU将会执行iinchip_irq()函数。在中断模式下,用变量’I_STATUS’来节省中断标志位。如果‘__DEF_IINCHIP_INT__’未被定义的话,将不能执行iinchip_irq()函数。 --IINCHIP_WRITE_BUF(): 这个函数被send()以及sendto()函数调用。它可以计算实际的物理地址,并且将数据写入到TX存储缓存器中。在计算实际的物理地址时,首先计算出dst_mak和评定dst_ptr的值。如果dst_mak的值和数据的字节数相加之和比SSIZE(s)大的话,也就是要写入的数据大小超出TX存储器的范围,则需要将TX存储器范围内的数据复制到内存中,同时复制TX存储器的基地址所对应的剩余数据。用wizmemcpy()函数来复制数据。但是由于一些特定的编译器会造成wizmemcpy函数内参数的字节顺序的变化,所以必须根据相应的编译器来改变。在基本的驱动器中wizmemcpy字节顺序跟Keil编译器相匹配。 --IINCHIP_READ_BUF():这个函数被recv()和recvfrom()函数调用。它可以计算实际的物理地址,然后从RX存储器中读取数据。在计算实际的物理地址时,首先要计算src_mask和评定src_ptr的值。如果src_mask的值和数据字节数相加之和比RSIZE(s)大的话,也就是说要读取的数据大小超出了RX存储器的范围,则要将RX存储器范围内的数据复制到内存中,同时复制RX存储器的基地址所对应的剩余的数据。   这是本文的第二部分内容,剩余部分我们将在以后的博文介绍。欢迎大家的留言讨论。   更多有关W7100A的博文请看这里:   如何使用W7100A实现网络字符LCD http://blog.iwiznet.cn/?p=168 单片机以太网控制芯片— iMCU W7100Ahttp://blog.iwiznet.cn/?p=229 如何使用W7100A模拟I2C总线 http://blog.iwiznet.cn/?p=304 如何实现W7100A程序烧录 http://blog.iwiznet.cn/?p=161   也可进入我们的官方网站或博客查看更多。 如果您对WIZnet的产品或是技术感兴趣,请随时与我们联系。 可以直接留言或登录WIZnet官方网站:http://www.iwiznet.cn 公司微博是: http://weibo.com/wiznet2012 公司博客是:http://blog.iwiznet.cn/
  • 热度 11
    2012-8-17 09:20
    916 次阅读|
    0 个评论
      在昨天的博文里,我们介绍了API函数以及TCPIPCore初始化的部分内容,接下来,我们继续为大家介绍第二部分的内容,希望对大家有所帮助。 第一部分在这里: http://blog.iwiznet.cn/?p=426   4.2 TCPIPCore初始化 TCPIPCore初始化用来设置最基本的网络配置信息,这些配置信息都是在网络通信中需要用到的,例如MAC地址、IP地址、子网掩码、网关等等。同时,也要分配TX和RX缓存器的大小。如果这些初始化程序不能正确地执行,通信就会失败。 下面的代码是TCPIPCORE初始化的一个例子。 4.2.1设置网关、子网掩码、IP地址、MAC地址 介质访问控制地址(MAC地址)、网关地址、子网掩膜地址以及IP地址的设置将会在后面的内容中提到。 4.2.2头(Header)文件/寄存器 -GAR0:网关IP地址寄存器。偏移地址为0x0001。 -SUBR0: 子网掩码地址寄存器. 偏移地址为0x0005。 -SHAR0: 本地MAC地址寄存器.偏移地址为0x0009。 -SIPR0: IP地址寄存器. 偏移地址为0x000F。 4.2.4设置TX/RX缓存器的大小 可以通过set_MEMsize()函数为每一个通道分别设置内部TX、RX缓存器的大小。每一个TX和RX存储器可设定的最大值都是16K字节。在8个端口内,可以自由将存储器空间的大小配置为1KB、2KB、4KB和8KB。如果用户将一个16K字节的存储器全部分配给一个已经建立连接的端口,其它的端口将没有可用的存储空间来收发数据。   5.函数描述 ‘wizmemcy.c’函数会在’tcpipcore.c’下被IINCHIP_READ_BUF()和IINCHIP_WRITE_BUF()函数调用。并且当这一函数执行的时候,不允许发生中断。同时需要注意的是,例如fsrc,fdst以及len等这些参数需要根据不同的编译器来分配不同的值。所以,用户必须认真设定这些值。DPX0和DPX1用来快速复制存储器的信息。当使用INCHIP_WRITE_BUF()函数时, DPX0指示内部的存储器域,域值大小为0x00。DPX1也指示了存储器的域,但是这些域被指定给TCPIPCore,并且域值为0xFE。但是当调用IINCHIP_READ_BUF()函数时,正好相反,DPX0指示被指定给TCPIPCORE的域,域值大小为0xFE;DPX1指示了内部的存储器域,域值大小为0x00。因为这个函数是在启动ROM区域的0x0000 ~ 0x07FF用ISP代码中被定义的,wizmemcpy代码位置不是在0x0000 ~ 0x07FF中。否则,当存储器映射转换进程时,用户代码就不能从ISP路径返回到程序存储区域。如果想了解更多关于ISP代码,请参考“How to program Flash memory”.   5.3 tcpipcore.c iinchip_irq(): 当发生TCPIPCore中断时,MCU将会执行iinchip_irq()函数。在中断模式下,用变量’I_STATUS’来节省中断标志位。如果‘__DEF_IINCHIP_INT__’未被定义的话,将不能执行iinchip_irq()函数。 --IINCHIP_WRITE_BUF(): 这个函数被send()以及sendto()函数调用。它可以计算实际的物理地址,并且将数据写入到TX存储缓存器中。在计算实际的物理地址时,首先计算出dst_mak和评定dst_ptr的值。如果dst_mak的值和数据的字节数相加之和比SSIZE(s)大的话,也就是要写入的数据大小超出TX存储器的范围,则需要将TX存储器范围内的数据复制到内存中,同时复制TX存储器的基地址所对应的剩余数据。用wizmemcpy()函数来复制数据。但是由于一些特定的编译器会造成wizmemcpy函数内参数的字节顺序的变化,所以必须根据相应的编译器来改变。在基本的驱动器中wizmemcpy字节顺序跟Keil编译器相匹配。 --IINCHIP_READ_BUF():这个函数被recv()和recvfrom()函数调用。它可以计算实际的物理地址,然后从RX存储器中读取数据。在计算实际的物理地址时,首先要计算src_mask和评定src_ptr的值。如果src_mask的值和数据字节数相加之和比RSIZE(s)大的话,也就是说要读取的数据大小超出了RX存储器的范围,则要将RX存储器范围内的数据复制到内存中,同时复制RX存储器的基地址所对应的剩余的数据。   这是本文的第二部分内容,剩余部分我们将在以后的博文介绍。欢迎大家的留言讨论。   更多有关W7100A的博文请看这里:   如何使用W7100A实现网络字符LCD  http://blog.iwiznet.cn/?p=168 单片机以太网控制芯片— iMCU W7100A http://blog.iwiznet.cn/?p=229 如何使用W7100A模拟I2C总线   http://blog.iwiznet.cn/?p=304 如何实现W7100A程序烧录   http://blog.iwiznet.cn/?p=161   也可进入我们的官方网站或博客查看更多。 如果您对WIZnet的产品或是技术感兴趣,请随时与我们联系。 可以直接留言或登录WIZnet官方网站: http://www.iwiznet.cn 公司微博是:  http://weibo.com/wiznet2012 公司博客是: http://blog.iwiznet.cn/
  • 热度 24
    2012-8-16 09:52
    1027 次阅读|
    0 个评论
      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 这3位,用来指示专用数据存储器读/写信号的脉冲宽度。   MD 的用途是调整与I/O设备之间的通信速度,比如内部TCPIPCore与外部设备的通信速度。在复位之后,MD 将会恢复为默认值0x07,表示该低速设备正常工作。用户可以通过软件改变MD 的值来提高或者降低通信速度。在执行程序的任何时候(例如在MOVX指令与不同速度的设备之间)都可以改变MD 的值。为了增强网络的性能,用户可以将MD 设定为最小值(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 http://blog.iwiznet.cn/?p=168 单片机以太网控制芯片— iMCU W7100A http://blog.iwiznet.cn/?p=229 如何使用W7100A模拟I2C总线 http://blog.iwiznet.cn/?p=304 如何实现W7100A程序烧录 http://blog.iwiznet.cn/?p=161   也可进入我们的官方网站或博客查看更多。 如果您对WIZnet的产品或是技术感兴趣,请随时与我们联系。 可以直接留言或登录WIZnet官方网站:http://www.iwiznet.cn 公司微博是: http://weibo.com/wiznet2012 公司博客是:http://blog.iwiznet.cn/
  • 热度 14
    2012-8-16 09:52
    1085 次阅读|
    0 个评论
      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 这3位,用来指示专用数据存储器读/写信号的脉冲宽度。   MD 的用途是调整与I/O设备之间的通信速度,比如内部TCPIPCore与外部设备的通信速度。在复位之后,MD 将会恢复为默认值0x07,表示该低速设备正常工作。用户可以通过软件改变MD 的值来提高或者降低通信速度。在执行程序的任何时候(例如在MOVX指令与不同速度的设备之间)都可以改变MD 的值。为了增强网络的性能,用户可以将MD 设定为最小值(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/