在线时间24 小时
UID2035889
注册时间2015-4-29
NXP金币0
该用户从未签到
注册会员

- 积分
- 192
- 最后登录
- 2018-5-7
|
调试在K30上面调试W5500时总是接收到乱码。发现写函数没问题,可是每次读都错误。我往寄存器写数据之后硬件做出了相应的变化,但是读出来确实错误的寄存器数据。版主帮忙看看这一串的读函数有没有问题。【附上工程keil4.5 IAR FOR ARM】
另;:项目完成之后写一下K30的CAN,UART,SDHC,SLCD,按键等的学习过程和例程。如果spi解决的话再加上联调W5500的例程(K系列似乎没有过和W5500的联调教程。)
offset=Read_W5500_SOCK_2Byte(s,Sn_TX_WR); 调用读函数
/*******************************************************************************
* 函数名 : Read_W5500_SOCK_2Byte
* 描述 : 读W5500指定端口寄存器的2个字节数据
* 输入 : s:端口号,reg:16位寄存器地址
* 输出 : 无
* 返回值 : 读取到寄存器的2个字节数据(16位)
* 说明 : 无
*******************************************************************************/
unsigned short Read_W5500_SOCK_2Byte(SOCKET s, unsigned short reg)
{
INT16U i;
SPI_CS_LOW();//置W5500的SCS为低电平
SPI1_Send_Short(reg);//通过SPI1写16位寄存器地址
Send_Byte(FDM2|RWB_READ|(s*0x20+0x08));//通过SPI1写控制字节,2个字节数据长度,读数据,选择端口s的寄存器
// i=Get_Byte();
Send_Byte(0x00);//发送一个哑数据
i=Get_Byte();//读取高位数据
Send_Byte(0x00);//发送一个哑数据
i*=256;
i+=Get_Byte();//读取低位数据
SPI_CS_HIGH();//置W5500的SCS为高电平
return i;//返回读取到的寄存器数据
}
最后是Get_Byte函数
/*********************************************************************************************************
** Function name: Get_Byte
** Descriptions: SPI获取一个字节
** Returned value: 读取的数据
*********************************************************************************************************/
INT32U Get_Byte (void)
{
INT32U ulTemp = 0;
Send_Byte(0x00); /* 发送数据,以启动时钟 */
/*
* 接收数据
*/
while (!(SPI0_SR & SPI_SR_RFDF_MASK)) {
}
ulTemp = SPI0_POPR;
SPI0_SR |= SPI_SR_RFDF_MASK;
return ulTemp; /* 返回接收到的数据 */
}
|
评分
-
查看全部评分
|