77 lines
2.5 KiB
C
77 lines
2.5 KiB
C
|
#include "ethernet.h"
|
||
|
#include "spi.h"
|
||
|
|
||
|
|
||
|
void ethernet_spi_1_byte(uint8_t spi_cmd)
|
||
|
{
|
||
|
HAL_GPIO_WritePin(SPI_ENC_CS_GPIO_Port, SPI_ENC_CS_Pin, GPIO_PIN_RESET);
|
||
|
HAL_SPI_Transmit(&hspi1, &spi_cmd, 1, 100);
|
||
|
HAL_GPIO_WritePin(SPI_ENC_CS_GPIO_Port, SPI_ENC_CS_Pin, GPIO_PIN_SET);
|
||
|
}
|
||
|
|
||
|
void ethernet_spi_2_byte(uint8_t spi_cmd, uint8_t *spi_data)
|
||
|
{
|
||
|
ethernet_spi_n_byte_banked(ENC_SPI_READ, spi_cmd, spi_data, 1);
|
||
|
}
|
||
|
|
||
|
void ethernet_spi_3_byte(enc_spi_operate_type_t type, uint8_t spi_cmd, uint8_t *spi_data)
|
||
|
{
|
||
|
ethernet_spi_n_byte_banked(type, spi_cmd, spi_data, 2);
|
||
|
}
|
||
|
|
||
|
void ethernet_spi_n_byte_banked(enc_spi_operate_type_t type, uint8_t spi_cmd, uint8_t *spi_data, uint8_t n)
|
||
|
{
|
||
|
switch (type)
|
||
|
{
|
||
|
case ENC_SPI_WRITE:
|
||
|
HAL_GPIO_WritePin(SPI_ENC_CS_GPIO_Port, SPI_ENC_CS_Pin, GPIO_PIN_RESET);
|
||
|
HAL_SPI_Transmit(&hspi1, &spi_cmd, 1, 100);
|
||
|
HAL_SPI_Transmit(&hspi1, spi_data, n, 100);
|
||
|
HAL_GPIO_WritePin(SPI_ENC_CS_GPIO_Port, SPI_ENC_CS_Pin, GPIO_PIN_SET);
|
||
|
break;
|
||
|
|
||
|
case ENC_SPI_READ:
|
||
|
HAL_GPIO_WritePin(SPI_ENC_CS_GPIO_Port, SPI_ENC_CS_Pin, GPIO_PIN_RESET);
|
||
|
HAL_SPI_Transmit(&hspi1, &spi_cmd, 1, 100);
|
||
|
HAL_SPI_Receive(&hspi1, spi_data, n, 100);
|
||
|
HAL_GPIO_WritePin(SPI_ENC_CS_GPIO_Port, SPI_ENC_CS_Pin, GPIO_PIN_SET);
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void ethernet_init()
|
||
|
{
|
||
|
HAL_GPIO_WritePin(SPI_ENC_CS_GPIO_Port, SPI_ENC_CS_Pin, GPIO_PIN_SET);
|
||
|
uint8_t spi_dummy_data = 0x00;
|
||
|
HAL_SPI_Transmit(&hspi1, &spi_dummy_data, 1, 100); //dummy transmition to make the clock low
|
||
|
|
||
|
uint16_t spi_test_data = 0;
|
||
|
ethernet_spi_1_byte(ENC_CMD_BxSEL(0));
|
||
|
// HAL_Delay(1);
|
||
|
// ethernet_spi_2_byte(ENC_CMD_RBSEL, (uint8_t*)&spi_test_data);
|
||
|
// while(spi_test_data != 0);
|
||
|
|
||
|
spi_test_data = 1234U;
|
||
|
ethernet_spi_n_byte_banked(ENC_SPI_WRITE, ENC_CMD_WCR(0x16), (uint8_t*)&spi_test_data, sizeof(spi_test_data));
|
||
|
HAL_Delay(1);
|
||
|
spi_test_data = 0;
|
||
|
ethernet_spi_n_byte_banked(ENC_SPI_READ, ENC_CMD_RCR(0x16), (uint8_t*)&spi_test_data, sizeof(spi_test_data));
|
||
|
while(spi_test_data != 1234U);
|
||
|
|
||
|
// do
|
||
|
// {
|
||
|
// ethernet_spi_n_byte_banked(ENC_SPI_READ, ENC_CMD_WCR(0x1A), (uint8_t*)&spi_test_data, sizeof(spi_test_data));
|
||
|
// HAL_Delay(1);
|
||
|
// }
|
||
|
// while((spi_test_data & (0x0001 << 12U)) == 0x0000);
|
||
|
|
||
|
ethernet_spi_1_byte(ENC_CMD_RESET);
|
||
|
HAL_Delay(1);
|
||
|
ethernet_spi_n_byte_banked(ENC_SPI_READ, ENC_CMD_RCR(0x16), (uint8_t*)&spi_test_data, sizeof(spi_test_data));
|
||
|
while(spi_test_data != 0x0000);
|
||
|
HAL_Delay(1);
|
||
|
}
|