mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-12-26 23:11:19 +01:00
drivers/kw2xrf: adpated to SPI API changes
This commit is contained in:
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…
x
Reference in New Issue
Block a user