W5500驱动函数库

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=0;i<size;i++)//循环将缓冲区的 size 个字节数据写入 W5500 {
SPI_Send_Byte(*dat_ptr++);//写一个字节数据 }
W5500_SCS=1; //置 W5500 的 SCS 为高电平 }
/****************************************************************************** * * 函数名 : Write_W5500_SOCK_1Byte * 描述 : 通过 SPI 向指定端口寄存器写 1 个字节数据 * 输入 : s:端口号,reg:16 位寄存器地址,dat:待写入的数据 * 输出 : 无 * 返回值 : 无 * 说明 : 无 ******************************************************************************* / void Write_W5500_SOCK_1Byte(SOCKET s, unsigned short reg, unsigned char dat) {
unsigned char i,rByte=0;
W5500_SCLK=0; for(i=0;i<8;i++) {
W5500_SCLK=1; rByte<<=1; rByte|=W5500_MISO; W5500_SCLK=0; } return rByte; }
/****************************************************************************** * * 函数名 : SPI_SendByte * 描述 : SPI 发送一个字节数据 * 输入 : dt:待发送的数据 * 输出 : 无 * 返回值 : 无 * 说明 : 无 ******************************************************************************* / void SPI_Send_Byte(unsigned char dt) {
W5500_SCS=1; //置 W5500 的 SCS 为高电平 }
/****************************************************************************** * * 函数名 : Write_W5500_2Byte * 描述 : 通过 SPI 向指定地址寄存器写 2 个字节数据 * 输入 : reg:16 位寄存器地址,dat:16 位待写入的数据(2 个字节) * 输出 : 无 * 返回值 : 无 * 说明 : 无 ******************************************************************************* / void Write_W5500_2Byte(unsigned short reg, unsigned short dat) {
W5500 驱动函数库 /****************************************************************************** ****
* 文件名 :W5500.c * 描述 :W5500 驱动函数库 ******************************************************************************* ***/
W5500_SCS=1; //置 W5500 的 SCS 为高电平 }
/****************************************************************************** * * 函数名 : Write_W5500_nByte * 描述 : 通过 SPI 向指定地址寄存器写 n 个字节数据 * 输入 : reg:16 位寄存器地址,*dat_ptr:待写入数据缓冲区指针,size:待写入的数据长度 * 输出 : 无 * 返回值 : 无 * 说明 : 无 ******************************************************************************* / void Write_W5500_nByte(unsigned short reg, unsigned char *dat_ptr, unsigned short size) {
unsigned short i;
W5500_SCS=0;//置 W5500 的 SCS 为低电平
SPI_Send_Short(reg);//通过 SPI 写 16 位寄存器地址 SPI_Send_Byte(VDM|RWB_WRITE|COMMON_R);//通过 SPI 写控制字节,N 个字节数据长度, 写数据,选择通用寄存器
Baidu Nhomakorabea
/***************----- 端口的运行模式 -----***************/ unsigned char S0_Mode =3; // 端 口 0 的 运 行 模 式 ,0:TCP 服 务 器 模 式 ,1:TCP 客 户 端 模 式,2:UDP(广播)模式
#define TCP_SERVER #define TCP_CLIENT #define UDP_MODE
W5500_SCS=0;//置 W5500 的 SCS 为低电平
SPI_Send_Short(reg);//通过 SPI 写 16 位寄存器地址 SPI_Send_Byte(FDM1|RWB_WRITE|(s*0x20+0x08));//通过 SPI 写控制字节,1 个字节数据长 度,写数据,选择端口 s 的寄存器 SPI_Send_Byte(dat);//写 1 个字节数据
*
* 函数名 : SPI_Send_Short
* 描述 : SPI 发送 2 个字节数据(16 位)
* 输入 : dat:待发送的 16 位数据
* 输出 : 无
* 返回值 : 无
* 说明 : 无
*******************************************************************************
0x00//TCP 服务器模式 0x01//TCP 客户端模式 0x02//UDP(广播)模式
/***************----- 端口的运行状态 -----***************/
unsigned char S0_State =0; //端口 0 状态记录,1:端口完成初始化,2 端口完成连接(可以正常
unsigned char S0_Port[2]; //端口 0 的端口号 unsigned char S0_DIP[4]; //端口 0 目的 IP 地址 unsigned char S0_DPort[2]; //端口 0 目的端口号
unsigned char UDP_DIPR[4]; //UDP(广播)模式,目的主机 IP 地址 unsigned char UDP_DPORT[2]; //UDP(广播)模式,目的主机端口号
#include "W5500.h" #include"delay.h" #include"usart.h" #include"stdio.h" /***************----- 网络参数变量定义 -----***************/ unsigned char Gateway_IP[4];//网关 IP 地址 unsigned char Sub_Mask[4]; //子网掩码 unsigned char Phy_Addr[6]; //物理地址(MAC) unsigned char IP_Addr[4]; //本机 IP 地址
unsigned char W5500_Interrupt; //W5500 中断标志(0:无中断,1:有中断)
/****************************************************************************** * * 函数名 : SPI_ReadByte * 描述 : 读取一个字节 SPI 返回的数据 * 输入 : 无 * 输出 : 无 * 返回值 : 读取到的寄存器数据 * 说明 : 无 ******************************************************************************* / unsigned char SPI_Read_Byte(void) {
unsigned char i;
for(i=0;i<8;i++) {
W5500_SCLK=0; if((dt<<i)&0x80)
W5500_MOSI=1; else
W5500_MOSI=0; W5500_SCLK=1; } W5500_SCLK=0; }
/******************************************************************************
传输数据)
#define S_INIT 0x01//端口完成初始化
#define S_CONN
0x02//端口完成连接,可以正常传输数据
/***************----- 端口收发数据的状态 -----***************/
unsigned char S0_Data;
//端口 0 接收和发送数据的状态,1:端口接收到数据,2:端口发送
数据完成
#define S_RECEIVE 0x01 //端口接收到一个数据包
#define S_TRANSMITOK 0x02 //端口发送一个数据包完成
/***************----- 端口数据缓冲区 -----***************/ unsigned char idata Rx_Buffer[30]; //端口接收数据缓冲区 unsigned char idata Tx_Buffer[30];//端口发送数据缓冲区
W5500_SCS=0;//置 W5500 的 SCS 为低电平
SPI_Send_Short(reg);//通过 SPI 写 16 位寄存器地址 SPI_Send_Byte(FDM1|RWB_WRITE|COMMON_R);//通过 SPI 写控制字节,1 个字节数据长 度,写数据,选择通用寄存器 SPI_Send_Byte(dat);//写 1 个字节数据
/
void SPI_Send_Short(unsigned short dt)
{
SPI_Send_Byte((unsigned char)(dt/256)); //写数据高位
SPI_Send_Byte(dt);
//写数据低位
}
/****************************************************************************** * * 函数名 : Write_W5500_1Byte * 描述 : 通过 SPI 向指定地址寄存器写 1 个字节数据 * 输入 : reg:16 位寄存器地址,dat:待写入的数据 * 输出 : 无 * 返回值 : 无 * 说明 : 无 ******************************************************************************* / void Write_W5500_1Byte(unsigned short reg, unsigned char dat) {
W5500_SCS=0;//置 W5500 的 SCS 为低电平
SPI_Send_Short(reg);//通过 SPI 写 16 位寄存器地址 SPI_Send_Byte(FDM2|RWB_WRITE|COMMON_R);//通过 SPI 写控制字节,2 个字节数据长 度,写数据,选择通用寄存器 SPI_Send_Short(dat);//写 16 位数据
相关文档
最新文档