1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-29 00:11:16 +01:00

drivers/at86rf2xx: adapted to SPI API changes

This commit is contained in:
Hauke Petersen 2016-11-08 18:39:59 +01:00
parent 610e671aac
commit 236f1edddd
5 changed files with 48 additions and 50 deletions

View File

@ -46,8 +46,6 @@ void at86rf2xx_setup(at86rf2xx_t *dev, const at86rf2xx_params_t *params)
dev->idle_state = AT86RF2XX_STATE_TRX_OFF;
dev->state = AT86RF2XX_STATE_SLEEP;
dev->pending_tx = 0;
/* initialise SPI */
spi_init_master(dev->params.spi, SPI_CONF_FIRST_RISING, params->spi_speed);
}
void at86rf2xx_reset(at86rf2xx_t *dev)

View File

@ -28,32 +28,35 @@
#include "at86rf2xx_internal.h"
#include "at86rf2xx_registers.h"
#define SPIDEV (dev->params.spi)
#define CSPIN (dev->params.cs_pin)
static inline void getbus(const at86rf2xx_t *dev)
{
spi_acquire(SPIDEV, CSPIN, SPI_MODE_0, dev->params.spi_clk);
}
void at86rf2xx_reg_write(const at86rf2xx_t *dev,
const uint8_t addr,
const uint8_t value)
{
spi_acquire(dev->params.spi);
gpio_clear(dev->params.cs_pin);
spi_transfer_reg(dev->params.spi,
AT86RF2XX_ACCESS_REG | AT86RF2XX_ACCESS_WRITE | addr,
value, 0);
gpio_set(dev->params.cs_pin);
spi_release(dev->params.spi);
uint8_t reg = (AT86RF2XX_ACCESS_REG | AT86RF2XX_ACCESS_WRITE | addr);
getbus(dev);
spi_transfer_reg(SPIDEV, CSPIN, reg, value);
spi_release(SPIDEV);
}
uint8_t at86rf2xx_reg_read(const at86rf2xx_t *dev, const uint8_t addr)
{
char value;
uint8_t reg = (AT86RF2XX_ACCESS_REG | AT86RF2XX_ACCESS_READ | addr);
uint8_t value;
spi_acquire(dev->params.spi);
gpio_clear(dev->params.cs_pin);
spi_transfer_reg(dev->params.spi,
AT86RF2XX_ACCESS_REG | AT86RF2XX_ACCESS_READ | addr,
0, &value);
gpio_set(dev->params.cs_pin);
spi_release(dev->params.spi);
getbus(dev);
value = spi_transfer_reg(SPIDEV, CSPIN, reg, 0);
spi_release(SPIDEV);
return (uint8_t)value;
return value;
}
void at86rf2xx_sram_read(const at86rf2xx_t *dev,
@ -61,14 +64,13 @@ void at86rf2xx_sram_read(const at86rf2xx_t *dev,
uint8_t *data,
const size_t len)
{
spi_acquire(dev->params.spi);
gpio_clear(dev->params.cs_pin);
spi_transfer_reg(dev->params.spi,
AT86RF2XX_ACCESS_SRAM | AT86RF2XX_ACCESS_READ,
(char)offset, NULL);
spi_transfer_bytes(dev->params.spi, NULL, (char *)data, len);
gpio_set(dev->params.cs_pin);
spi_release(dev->params.spi);
uint8_t reg = (AT86RF2XX_ACCESS_SRAM | AT86RF2XX_ACCESS_READ);
getbus(dev);
spi_transfer_byte(SPIDEV, CSPIN, true, reg);
spi_transfer_byte(SPIDEV, CSPIN, true, offset);
spi_transfer_bytes(SPIDEV, CSPIN, false, NULL, data, len);
spi_release(SPIDEV);
}
void at86rf2xx_sram_write(const at86rf2xx_t *dev,
@ -76,36 +78,35 @@ void at86rf2xx_sram_write(const at86rf2xx_t *dev,
const uint8_t *data,
const size_t len)
{
spi_acquire(dev->params.spi);
gpio_clear(dev->params.cs_pin);
spi_transfer_reg(dev->params.spi,
AT86RF2XX_ACCESS_SRAM | AT86RF2XX_ACCESS_WRITE,
(char)offset, NULL);
spi_transfer_bytes(dev->params.spi, (char *)data, NULL, len);
gpio_set(dev->params.cs_pin);
spi_release(dev->params.spi);
uint8_t reg = (AT86RF2XX_ACCESS_SRAM | AT86RF2XX_ACCESS_WRITE);
getbus(dev);
spi_transfer_byte(SPIDEV, CSPIN, true, reg);
spi_transfer_byte(SPIDEV, CSPIN, true, offset);
spi_transfer_bytes(SPIDEV, CSPIN, false, data, NULL, len);
spi_release(SPIDEV);
}
void at86rf2xx_fb_start(const at86rf2xx_t *dev)
{
spi_acquire(dev->params.spi);
gpio_clear(dev->params.cs_pin);
spi_transfer_byte(dev->params.spi,
AT86RF2XX_ACCESS_FB | AT86RF2XX_ACCESS_READ,
NULL);
uint8_t reg = AT86RF2XX_ACCESS_FB | AT86RF2XX_ACCESS_READ;
getbus(dev);
spi_transfer_byte(SPIDEV, CSPIN, true, reg);
}
void at86rf2xx_fb_read(const at86rf2xx_t *dev,
uint8_t *data,
const size_t len)
{
spi_transfer_bytes(dev->params.spi, NULL, (char *)data, len);
spi_transfer_bytes(SPIDEV, CSPIN, true, NULL, data, len);
}
void at86rf2xx_fb_stop(const at86rf2xx_t *dev)
{
gpio_set(dev->params.cs_pin);
spi_release(dev->params.spi);
/* transfer one byte (which we ignore) to release the chip select */
spi_transfer_byte(SPIDEV, CSPIN, false, 1);
spi_release(SPIDEV);
}
uint8_t at86rf2xx_get_status(const at86rf2xx_t *dev)

View File

@ -70,8 +70,7 @@ static int _init(netdev2_t *netdev)
at86rf2xx_t *dev = (at86rf2xx_t *)netdev;
/* initialise GPIOs */
gpio_init(dev->params.cs_pin, GPIO_OUT);
gpio_set(dev->params.cs_pin);
spi_init_cs(dev->params.spi, dev->params.cs_pin);
gpio_init(dev->params.sleep_pin, GPIO_OUT);
gpio_clear(dev->params.sleep_pin);
gpio_init(dev->params.reset_pin, GPIO_OUT);

View File

@ -32,10 +32,10 @@ extern "C" {
* @{
*/
#ifndef AT86RF2XX_PARAM_SPI
#define AT86RF2XX_PARAM_SPI (SPI_0)
#define AT86RF2XX_PARAM_SPI (SPI_DEV(0))
#endif
#ifndef AT86RF2XX_PARAM_SPI_SPEED
#define AT86RF2XX_PARAM_SPI_SPEED (SPI_SPEED_5MHZ)
#ifndef AT86RF2XX_PARAM_SPI_CLK
#define AT86RF2XX_PARAM_SPI_CLK (SPI_CLK_5MHZ)
#endif
#ifndef AT86RF2XX_PARAM_CS
#define AT86RF2XX_PARAM_CS (GPIO_PIN(0, 0))
@ -51,7 +51,7 @@ extern "C" {
#endif
#define AT86RF2XX_PARAMS_DEFAULT {.spi = AT86RF2XX_PARAM_SPI, \
.spi_speed = AT86RF2XX_PARAM_SPI_SPEED, \
.spi_clk = AT86RF2XX_PARAM_SPI_CLK, \
.cs_pin = AT86RF2XX_PARAM_CS, \
.int_pin = AT86RF2XX_PARAM_INT, \
.sleep_pin = AT86RF2XX_PARAM_SLEEP, \

View File

@ -137,8 +137,8 @@ extern "C" {
*/
typedef struct at86rf2xx_params {
spi_t spi; /**< SPI bus the device is connected to */
spi_speed_t spi_speed; /**< SPI speed to use */
gpio_t cs_pin; /**< GPIO pin connected to chip select */
spi_clk_t spi_clk; /**< SPI clock speed to use */
spi_cs_t cs_pin; /**< GPIO pin connected to chip select */
gpio_t int_pin; /**< GPIO pin connected to the interrupt pin */
gpio_t sleep_pin; /**< GPIO pin connected to the sleep pin */
gpio_t reset_pin; /**< GPIO pin connected to the reset pin */