drivers/encx24j600: adapted to SPI API changes
This commit is contained in:
parent
dc3e78d521
commit
87534c75f0
@ -37,18 +37,19 @@
|
|||||||
#define ENABLE_DEBUG (0)
|
#define ENABLE_DEBUG (0)
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
#define ENCX24J600_SPI_SPEED SPI_SPEED_1MHZ
|
#define SPI_CLK SPI_CLK_1MHZ
|
||||||
|
#define SPI_MODE SPI_MODE_0
|
||||||
|
|
||||||
#define ENCX24J600_INIT_DELAY 100000U
|
#define ENCX24J600_INIT_DELAY (100000U)
|
||||||
|
|
||||||
#define ENC_BUFFER_START 0x0000
|
#define ENC_BUFFER_START (0x0000)
|
||||||
#define ENC_BUFFER_SIZE 0x6000
|
#define ENC_BUFFER_SIZE (0x6000)
|
||||||
#define ENC_BUFFER_END 0x5FFF
|
#define ENC_BUFFER_END (0x5FFF)
|
||||||
#define RX_BUFFER_START (0x5340) /* Default value */
|
#define RX_BUFFER_START (0x5340) /* Default value */
|
||||||
#define RX_BUFFER_END (ENC_BUFFER_END)
|
#define RX_BUFFER_END (ENC_BUFFER_END)
|
||||||
#define TX_BUFFER_LEN (0x2000)
|
#define TX_BUFFER_LEN (0x2000)
|
||||||
#define TX_BUFFER_END (RX_BUFFER_START)
|
#define TX_BUFFER_END (RX_BUFFER_START)
|
||||||
#define TX_BUFFER_START (TX_BUFFER_END - TX_BUFFER_LEN)
|
#define TX_BUFFER_START (TX_BUFFER_END - TX_BUFFER_LEN)
|
||||||
|
|
||||||
static void cmd(encx24j600_t *dev, char cmd);
|
static void cmd(encx24j600_t *dev, char cmd);
|
||||||
static void reg_set(encx24j600_t *dev, uint8_t reg, uint16_t value);
|
static void reg_set(encx24j600_t *dev, uint8_t reg, uint16_t value);
|
||||||
@ -75,11 +76,11 @@ const static netdev2_driver_t netdev2_driver_encx24j600 = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static inline void lock(encx24j600_t *dev) {
|
static inline void lock(encx24j600_t *dev) {
|
||||||
mutex_lock(&dev->mutex);
|
spi_acquire(dev->spi, dev->cs, SPI_MODE, SPI_CLK);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void unlock(encx24j600_t *dev) {
|
static inline void unlock(encx24j600_t *dev) {
|
||||||
mutex_unlock(&dev->mutex);
|
spi_release(dev->spi);
|
||||||
}
|
}
|
||||||
|
|
||||||
void encx24j600_setup(encx24j600_t *dev, const encx24j600_params_t *params)
|
void encx24j600_setup(encx24j600_t *dev, const encx24j600_params_t *params)
|
||||||
@ -89,8 +90,6 @@ void encx24j600_setup(encx24j600_t *dev, const encx24j600_params_t *params)
|
|||||||
dev->cs = params->cs_pin;
|
dev->cs = params->cs_pin;
|
||||||
dev->int_pin = params->int_pin;
|
dev->int_pin = params->int_pin;
|
||||||
dev->rx_next_ptr = RX_BUFFER_START;
|
dev->rx_next_ptr = RX_BUFFER_START;
|
||||||
|
|
||||||
mutex_init(&dev->mutex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void encx24j600_isr(void *arg)
|
static void encx24j600_isr(void *arg)
|
||||||
@ -147,11 +146,7 @@ static void _isr(netdev2_t *netdev)
|
|||||||
|
|
||||||
static inline void enc_spi_transfer(encx24j600_t *dev, char *out, char *in, int len)
|
static inline void enc_spi_transfer(encx24j600_t *dev, char *out, char *in, int len)
|
||||||
{
|
{
|
||||||
spi_acquire(dev->spi);
|
spi_transfer_bytes(dev->spi, dev->cs, false, out, in, len);
|
||||||
gpio_clear(dev->cs);
|
|
||||||
spi_transfer_bytes(dev->spi, out, in, len);
|
|
||||||
gpio_set(dev->cs);
|
|
||||||
spi_release(dev->spi);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint16_t reg_get(encx24j600_t *dev, uint8_t reg)
|
static inline uint16_t reg_get(encx24j600_t *dev, uint8_t reg)
|
||||||
@ -170,20 +165,12 @@ static void phy_reg_set(encx24j600_t *dev, uint8_t reg, uint16_t value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void cmd(encx24j600_t *dev, char cmd) {
|
static void cmd(encx24j600_t *dev, char cmd) {
|
||||||
spi_acquire(dev->spi);
|
spi_transfer_byte(dev->spi, dev->cs, false, (uint8_t)cmd);
|
||||||
gpio_clear(dev->cs);
|
|
||||||
spi_transfer_byte(dev->spi, cmd, NULL);
|
|
||||||
gpio_set(dev->cs);
|
|
||||||
spi_release(dev->spi);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cmdn(encx24j600_t *dev, uint8_t cmd, char *out, char *in, int len) {
|
static void cmdn(encx24j600_t *dev, uint8_t cmd, char *out, char *in, int len) {
|
||||||
spi_acquire(dev->spi);
|
spi_transfer_byte(dev->spi, dev->cs, true, cmd);
|
||||||
gpio_clear(dev->cs);
|
spi_transfer_bytes(dev->spi, dev->cs, false, out, in, len);
|
||||||
spi_transfer_byte(dev->spi, cmd, NULL);
|
|
||||||
spi_transfer_bytes(dev->spi, out, in, len);
|
|
||||||
gpio_set(dev->cs);
|
|
||||||
spi_release(dev->spi);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reg_set(encx24j600_t *dev, uint8_t reg, uint16_t value)
|
static void reg_set(encx24j600_t *dev, uint8_t reg, uint16_t value)
|
||||||
@ -249,13 +236,10 @@ static int _init(netdev2_t *encdev)
|
|||||||
DEBUG("encx24j600: starting initialization...\n");
|
DEBUG("encx24j600: starting initialization...\n");
|
||||||
|
|
||||||
/* setup IO */
|
/* setup IO */
|
||||||
gpio_init(dev->cs, GPIO_OUT);
|
if (spi_init_cs(dev->spi, dev->cs) != SPI_OK) {
|
||||||
gpio_set(dev->cs);
|
|
||||||
gpio_init_int(dev->int_pin, GPIO_IN_PU, GPIO_FALLING, encx24j600_isr, (void*)dev);
|
|
||||||
|
|
||||||
if (spi_init_master(dev->spi, SPI_CONF_FIRST_RISING, ENCX24J600_SPI_SPEED) < 0) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
gpio_init_int(dev->int_pin, GPIO_IN_PU, GPIO_FALLING, encx24j600_isr, (void*)dev);
|
||||||
|
|
||||||
lock(dev);
|
lock(dev);
|
||||||
|
|
||||||
|
|||||||
@ -41,7 +41,6 @@ typedef struct {
|
|||||||
gpio_t cs; /**< SPI chip select pin */
|
gpio_t cs; /**< SPI chip select pin */
|
||||||
gpio_t int_pin; /**< SPI interrupt pin */
|
gpio_t int_pin; /**< SPI interrupt pin */
|
||||||
uint16_t rx_next_ptr; /**< ptr to next packet whithin devices memory */
|
uint16_t rx_next_ptr; /**< ptr to next packet whithin devices memory */
|
||||||
mutex_t mutex; /**< mutex used to lock device access */
|
|
||||||
} encx24j600_t;
|
} encx24j600_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -22,13 +22,13 @@ CFLAGS += -DGNRC_PKTBUF_SIZE=2048
|
|||||||
ifneq (,$(filter nucleo-f334,$(BOARD)))
|
ifneq (,$(filter nucleo-f334,$(BOARD)))
|
||||||
# these settings are probably valid for PoEll-i on most nucelo boards, but
|
# these settings are probably valid for PoEll-i on most nucelo boards, but
|
||||||
# tested only on nucleo-f334
|
# tested only on nucleo-f334
|
||||||
ENC_SPI ?= SPI_0
|
ENC_SPI ?= SPI_DEV\(0\)
|
||||||
ENC_CS ?= GPIO_PIN\(PORT_C,10\)
|
ENC_CS ?= GPIO_PIN\(PORT_C,10\)
|
||||||
ENC_INT ?= GPIO_PIN\(PORT_D,2\)
|
ENC_INT ?= GPIO_PIN\(PORT_D,2\)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# fallback: set SPI bus and pins to default values
|
# fallback: set SPI bus and pins to default values
|
||||||
ENC_SPI ?= SPI_0
|
ENC_SPI ?= SPI_DEV\(0\)
|
||||||
ENC_CS ?= GPIO_PIN\(0,0\)
|
ENC_CS ?= GPIO_PIN\(0,0\)
|
||||||
ENC_INT ?= GPIO_PIN\(0,1\)
|
ENC_INT ?= GPIO_PIN\(0,1\)
|
||||||
# export SPI and pins
|
# export SPI and pins
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user