/*****************************************************/ // w5500.c // brief W5500 HAL Interface. // version 1.0.2 // date 2013/10/21 /*****************************************************/ #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include "w5500_spi.h" #include "w5500.h" #define _W5500_SPI_VDM_OP_ 0x00 #define _W5500_SPI_FDM_OP_LEN1_ 0x01 #define _W5500_SPI_FDM_OP_LEN2_ 0x02 #define _W5500_SPI_FDM_OP_LEN4_ 0x03 /* FUNCTION **********************************/ uint16_t getSn_TX_FSR (uint8_t sn) { uint16_t val = 0, val1 = 0; do { val1 = W5500_spi_read(Sn_TX_FSR(sn)); val1 = (val1 << 8) + W5500_spi_read(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); if (val1 != 0) { val = W5500_spi_read(Sn_TX_FSR(sn)); val = (val << 8) + W5500_spi_read(WIZCHIP_OFFSET_INC(Sn_TX_FSR(sn),1)); } } while (val != val1); return val; } /* --- getSn_TX_FSR --- */ /* FUNCTION **********************************/ uint16_t getSn_RX_RSR (uint8_t sn) { uint16_t val = 0, val1 = 0; do { val1 = W5500_spi_read(Sn_RX_RSR(sn)); val1 = (val1 << 8) + W5500_spi_read(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); if (val1 != 0) { val = W5500_spi_read(Sn_RX_RSR(sn)); val = (val << 8) + W5500_spi_read(WIZCHIP_OFFSET_INC(Sn_RX_RSR(sn),1)); } } while (val != val1); return val; } /* --- getSn_RX_RSR --- */ /* FUNCTION **********************************/ void wiz_send_data (uint8_t sn, uint8_t *p_data, uint16_t len) { uint16_t ptr; uint32_t addrsel; if (len == 0) return; ptr = getSn_TX_WR(sn); //M20140501 : implict type casting -> explict type casting //addrsel = (ptr << 8) + (WIZCHIP_TXBUF_BLOCK(sn) << 3); addrsel = ((uint32_t)ptr << 8) + (WIZCHIP_TXBUF_BLOCK(sn) << 3); W5500_spi_write_buf (addrsel, p_data, len); ptr += len; setSn_TX_WR(sn,ptr); } /* --- wiz_send_data --- */ /* FUNCTION **********************************/ void wiz_recv_data (uint8_t sn, uint8_t *p_data, uint16_t len) { uint16_t ptr; uint32_t addrsel; if (len == 0) return; ptr = getSn_RX_RD(sn); //M20140501 : implict type casting -> explict type casting //addrsel = ((ptr << 8) + (WIZCHIP_RXBUF_BLOCK(sn) << 3); addrsel = ((uint32_t)ptr << 8) + (WIZCHIP_RXBUF_BLOCK(sn) << 3); // W5500_spi_read_buf (addrsel, p_data, len); ptr += len; setSn_RX_RD(sn,ptr); } /* --- wiz_recv_data --- */ /* FUNCTION **********************************/ void wiz_recv_ignore (uint8_t sn, uint16_t len) { uint16_t ptr = 0; ptr = getSn_RX_RD(sn); ptr += len; setSn_RX_RD(sn, ptr); } /* --- wiz_recv_ignore --- */ /* ----------------------------------------------*/ /* ----------- End of file W5500.c ----------- */ /* ----------------------------------------------*/