drivers/kw2xrf: adpated to SPI API changes

pr/spi.typo
Hauke Petersen 6 years ago
parent 87534c75f0
commit e5ab3c2020

@ -130,14 +130,14 @@ typedef struct {
* @brief Initialize the given KW2XRF device
* @param[out] dev device descriptor
* @param[in] spi SPI bus the device is connected to
* @param[in] spi_speed SPI speed to use
* @param[in] spi_clk SPI bus clock speed to use
* @param[in] cs_pin GPIO pin connected to chip select
* @param[in] int_pin GPIO pin connected to the interrupt pin
*
* @return 0 on success
* @return <0 on error
*/
int kw2xrf_init(kw2xrf_t *dev, spi_t spi, spi_speed_t spi_speed,
int kw2xrf_init(kw2xrf_t *dev, spi_t spi, spi_clk_t spi_clk,
gpio_t cs_pin, gpio_t int_pin);
/**
@ -145,7 +145,7 @@ int kw2xrf_init(kw2xrf_t *dev, spi_t spi, spi_speed_t spi_speed,
*/
typedef struct kw2xrf_params {
spi_t spi; /**< SPI bus the device is connected to */
spi_speed_t spi_speed; /**< SPI speed to use */
spi_clk_t spi_speed; /**< SPI speed to use */
gpio_t cs_pin; /**< GPIO pin connected to chip select */
gpio_t int_pin; /**< GPIO pin connected to the interrupt pin */
} kw2xrf_params_t;

@ -30,14 +30,13 @@ extern "C" {
/**
* @brief SPI interface initialization
* @param[in] spi SPI bus the device is connected to
* @param[in] spi_speed SPI speed to use
* @param[in] spi_clk SPI clock speed to use
* @param[in] cs_pin GPIO pin connected to chip select
*
* @return 0 on success
* @return -1 on error
*/
int kw2xrf_spi_init(spi_t spi, spi_speed_t spi_speed,
gpio_t cs_pin);
int kw2xrf_spi_init(spi_t spi, spi_clk_t spi_clk, spi_cs_t cs_pin);
/**
* @brief Writes a byte to the kw2xrf register.

@ -383,7 +383,7 @@ int kw2xrf_set_addr_long(kw2xrf_t *dev, uint64_t addr)
return sizeof(uint64_t);
}
int kw2xrf_init(kw2xrf_t *dev, spi_t spi, spi_speed_t spi_speed,
int kw2xrf_init(kw2xrf_t *dev, spi_t spi, spi_clk_t spi_clk,
gpio_t cs_pin, gpio_t int_pin)
{
uint8_t reg = 0;
@ -405,7 +405,7 @@ int kw2xrf_init(kw2xrf_t *dev, spi_t spi, spi_speed_t spi_speed,
return -ENODEV;
}
kw2xrf_spi_init(spi, spi_speed, cs_pin);
kw2xrf_spi_init(spi, spi_clk, cs_pin);
if (kw2xrf_on(dev) != 0) {
core_panic(PANIC_GENERAL_ERROR, "Could not start MKW2XD radio transceiver");

@ -27,49 +27,36 @@
#define ENABLE_DEBUG (0)
#include "debug.h"
#define KW2XRF_IBUF_LENGTH 9
#define SPI_MODE (SPI_MODE_0)
#define KW2XRF_IBUF_LENGTH (9)
static uint8_t ibuf[KW2XRF_IBUF_LENGTH];
/** Set up in kw2xrf_spi_init during initialization */
static gpio_t kw2xrf_cs_pin;
static spi_t kw2xrf_spi;
static spi_clk_t kw2xrf_clk;
static spi_cs_t kw2xrf_cs_pin;
void kw2xrf_spi_transfer_head(void)
static inline void kw2xrf_spi_transfer_head(void)
{
#if KW2XRF_SHARED_SPI
spi_acquire(kw2xrf_spi);
gpio_clear(kw2xrf_cs_pin);
#endif
spi_acquire(kw2xrf_spi, kw2xrf_cs_pin, SPI_MODE, kw2xrf_clk);
}
void kw2xrf_spi_transfer_tail(void)
static inline void kw2xrf_spi_transfer_tail(void)
{
#if KW2XRF_SHARED_SPI
gpio_set(kw2xrf_cs_pin);
spi_release(kw2xrf_spi);
#endif
}
int kw2xrf_spi_init(spi_t spi, spi_speed_t spi_speed,
gpio_t cs_pin)
int kw2xrf_spi_init(spi_t spi, spi_clk_t spi_clk, spi_cs_t cs_pin)
{
int res;
kw2xrf_cs_pin = cs_pin; /**< for later reference */
kw2xrf_spi = spi;
kw2xrf_clk = spi_clk;
kw2xrf_cs_pin = cs_pin; /**< for later reference */
#if KW2XRF_SHARED_SPI
spi_acquire(kw2xrf_spi);
#endif
res = spi_init_master(kw2xrf_spi, SPI_CONF_FIRST_RISING, spi_speed);
#if KW2XRF_SHARED_SPI
spi_release(kw2xrf_spi);
gpio_init(kw2xrf_cs_pin, GPIO_OUT);
gpio_set(kw2xrf_cs_pin);
#endif
if (res < 0) {
DEBUG("kw2xrf_spi_init: error initializing SPI_%i device (code %i)\n",
res = spi_init_cs(kw2xrf_spi, kw2xrf_cs_pin);
if (res != SPI_OK) {
DEBUG("kw2xrf_spi_init: error initializing SPI_DEV(%i) (code %i)\n",
kw2xrf_spi, res);
return -1;
}
@ -80,7 +67,7 @@ int kw2xrf_spi_init(spi_t spi, spi_speed_t spi_speed,
void kw2xrf_write_dreg(uint8_t addr, uint8_t value)
{
kw2xrf_spi_transfer_head();
spi_transfer_reg(kw2xrf_spi, addr, value, NULL);
spi_transfer_reg(kw2xrf_spi, kw2xrf_cs_pin, addr, value);
kw2xrf_spi_transfer_tail();
return;
}
@ -89,8 +76,8 @@ uint8_t kw2xrf_read_dreg(uint8_t addr)
{
uint8_t value;
kw2xrf_spi_transfer_head();
spi_transfer_reg(kw2xrf_spi, (addr | MKW2XDRF_REG_READ),
0x0, (char *)&value);
value = spi_transfer_reg(kw2xrf_spi, kw2xrf_cs_pin,
(addr | MKW2XDRF_REG_READ), 0x0);
kw2xrf_spi_transfer_tail();
return value;
}
@ -108,8 +95,8 @@ void kw2xrf_write_iregs(uint8_t addr, uint8_t *buf, uint8_t length)
}
kw2xrf_spi_transfer_head();
spi_transfer_regs(kw2xrf_spi, MKW2XDM_IAR_INDEX,
(char *)ibuf, NULL, length + 1);
spi_transfer_regs(kw2xrf_spi, kw2xrf_cs_pin, MKW2XDM_IAR_INDEX,
ibuf, NULL, length + 1);
kw2xrf_spi_transfer_tail();
return;
@ -124,8 +111,9 @@ void kw2xrf_read_iregs(uint8_t addr, uint8_t *buf, uint8_t length)
ibuf[0] = addr;
kw2xrf_spi_transfer_head();
spi_transfer_regs(kw2xrf_spi, MKW2XDM_IAR_INDEX | MKW2XDRF_REG_READ,
(char *)ibuf, (char *)ibuf, length + 1);
spi_transfer_regs(kw2xrf_spi, kw2xrf_cs_pin,
MKW2XDM_IAR_INDEX | MKW2XDRF_REG_READ,
ibuf, ibuf, length + 1);
kw2xrf_spi_transfer_tail();
for (uint8_t i = 0; i < length; i++) {
@ -138,16 +126,15 @@ void kw2xrf_read_iregs(uint8_t addr, uint8_t *buf, uint8_t length)
void kw2xrf_write_fifo(uint8_t *data, uint8_t length)
{
kw2xrf_spi_transfer_head();
spi_transfer_regs(kw2xrf_spi, MKW2XDRF_BUF_WRITE,
(char *)data, NULL, length);
spi_transfer_regs(kw2xrf_spi, kw2xrf_cs_pin, MKW2XDRF_BUF_WRITE,
data, NULL, length);
kw2xrf_spi_transfer_tail();
}
void kw2xrf_read_fifo(uint8_t *data, uint8_t length)
{
kw2xrf_spi_transfer_head();
spi_transfer_regs(kw2xrf_spi, MKW2XDRF_BUF_READ, NULL,
(char *)data, length);
spi_transfer_regs(kw2xrf_spi, kw2xrf_cs_pin, MKW2XDRF_BUF_READ,
NULL, data, length);
kw2xrf_spi_transfer_tail();
}
/** @} */

@ -26,8 +26,8 @@ ifneq (true,$(USE_BOARD_PARAMETERS))
# set default device parameters in case they are undefined
DRIVER ?= kw2xrf
KW2XRF_SHARED_SPI ?= 1
KWRF_SPI ?= SPI_0
KWRF_SPI_SPEED ?= SPI_SPEED_5MHZ
KWRF_SPI ?= SPI_DEV\(0\)
KWRF_SPI_SPEED ?= SPI_CLK_5MHZ
KWRF_CS ?= GPIO_PIN\(0,0\)
KWRF_INT ?= GPIO_PIN\(0,1\)

@ -40,7 +40,7 @@ extern "C" {
#error "Interrupt pin not defined"
#endif
#ifndef KWRF_SPI_SPEED
#define KWRF_SPI_SPEED (SPI_SPEED_10MHZ)
#define KWRF_SPI_SPEED (SPI_CLK_10MHZ)
#endif
/**@}*/

Loading…
Cancel
Save