by victoraf031 » Wed Sep 03, 2008 12:39 pm
My write function code using SPI Interface:
/*******************************************************************************
* Function Name : WriteWizNet2
* Description : Write wiznet's register.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void WriteWizNet2( u16 Addr, u8 Data){
u16 In[4];
GPIO_ResetBits(GPIOC,GPIO_Pin_12);
GPIO_ResetBits(GPIOC,GPIO_Pin_6); //Seleciona Wiznet
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, 0xF0);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI2 received data */
In[0] = SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, (u8)((Addr & 0xFF00) >> 8));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI2 received data */
In[1] = SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2,(u8)(Addr & 0x00FF));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI2 received data */
In[2] = SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, Data);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI2 received data */
In[3] = SPI_I2S_ReceiveData(SPI2);
debug_printf("\nWrite: %d %d %d %d",In[0],In[1],In[2],In[3]);
GPIO_SetBits(GPIOC,GPIO_Pin_6); //Deseleciona Wiznet
GPIO_SetBits(GPIOC,GPIO_Pin_12);
}
And read function code:
/*******************************************************************************
* Function Name : ReadWizNet2
* Description : Read wiznet's register.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
u16 ReadWizNet2(u16 Addr )
{
u16 In[4];
GPIO_ResetBits(GPIOC,GPIO_Pin_6); //Seleciona Wiznet
GPIO_ResetBits(GPIOC,GPIO_Pin_12);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, 0x0F);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI2 received data */
In[0] = SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, ((u8)(Addr & 0xFF00) >> 8));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI2 received data */
In[1] = SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, (u8)(Addr & 0x00FF));
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI2 received data */
In[2] = SPI_I2S_ReceiveData(SPI2);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI2, 0x00);
while (SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET);
/* Read SPI2 received data */
In[3] = SPI_I2S_ReceiveData(SPI2);
GPIO_SetBits(GPIOC,GPIO_Pin_6); //Deseleciona Wiznet
debug_printf("\nRead: %d %d %d %d",In[0],In[1],In[2],In[3]);
GPIO_SetBits(GPIOC,GPIO_Pin_12);
return In[3]; //Return SPI Rx buffer data
}