1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #20312 from maribu/drivers/periph_common/spi/transfer_u16

drivers/periph_spi: Add `spi_transfer_u16_be()`
This commit is contained in:
Marian Buschsieweke 2024-02-12 16:24:10 +00:00 committed by GitHub
commit f68f977274
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 21 additions and 8 deletions

View File

@ -66,8 +66,8 @@
#ifndef PERIPH_SPI_H
#define PERIPH_SPI_H
#include <endian.h>
#include <errno.h>
#include <limits.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
@ -430,6 +430,25 @@ uint8_t spi_transfer_reg(spi_t bus, spi_cs_t cs, uint8_t reg, uint8_t out);
void spi_transfer_regs(spi_t bus, spi_cs_t cs, uint8_t reg,
const void *out, void *in, size_t len);
/**
* @brief Transfer a 16 bit number in big endian byte order
*
* @param[in] bus SPI device to use
* @param[in] cs chip select pin/line to use, set to
* SPI_CS_UNDEF if chip select should not be
* handled by the SPI driver
* @param[in] cont if true, keep device selected after transfer
* @param[in] host_number number to transfer in host byte order
* @return The 16 bit number received in host byte order
*/
static inline uint16_t spi_transfer_u16_be(spi_t bus, spi_cs_t cs, bool cont, uint16_t host_number)
{
const uint16_t send = htobe16(host_number);
uint16_t receive;
spi_transfer_bytes(bus, cs, cont, &send, &receive, sizeof(receive));
return be16toh(receive);
}
#ifdef __cplusplus
}
#endif

View File

@ -47,13 +47,7 @@ static const netdev_driver_t netdev_driver_w5100;
static inline void send_addr(w5100_t *dev, uint16_t addr)
{
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
spi_transfer_byte(dev->p.spi, dev->p.cs, true, (addr >> 8));
spi_transfer_byte(dev->p.spi, dev->p.cs, true, (addr & 0xff));
#else
spi_transfer_byte(dev->p.spi, dev->p.cs, true, (addr & 0xff));
spi_transfer_byte(dev->p.spi, dev->p.cs, true, (addr >> 8));
#endif
spi_transfer_u16_be(dev->p.spi, dev->p.cs, true, addr);
}
static uint8_t rreg(w5100_t *dev, uint16_t reg)