From c76b8235f40ffe7a5e124e7eed38a5d3daf85544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Th=C3=A9baudeau?= Date: Thu, 17 Nov 2016 17:50:01 +0100 Subject: [PATCH] cc2538: spi: Add support for dynamic instances MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, only constants could be used to pass SPI instances to the SPI driver. This change makes it possible to use SPI instances from variables. Signed-off-by: Benoît Thébaudeau --- cpu/cc2538/dev/ssi.h | 2 ++ cpu/cc2538/spi-arch.h | 10 +++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cpu/cc2538/dev/ssi.h b/cpu/cc2538/dev/ssi.h index ca06969ee..5f7abf0af 100644 --- a/cpu/cc2538/dev/ssi.h +++ b/cpu/cc2538/dev/ssi.h @@ -57,6 +57,8 @@ */ #define SSI0_BASE 0x40008000 /**< Base address for SSI0 */ #define SSI1_BASE 0x40009000 /**< Base address for SSI1 */ +/** Base address of the \c dev instance of the SSI */ +#define SSI_BASE(dev) (SSI0_BASE + (dev) * (SSI1_BASE - SSI0_BASE)) /** @} */ /*---------------------------------------------------------------------------*/ /** \name SSI register offsets diff --git a/cpu/cc2538/spi-arch.h b/cpu/cc2538/spi-arch.h index 137220b2f..f1283c6f5 100644 --- a/cpu/cc2538/spi-arch.h +++ b/cpu/cc2538/spi-arch.h @@ -109,17 +109,17 @@ /*---------------------------------------------------------------------------*/ /* New API macros */ #define SPIX_WAITFORTxREADY(spi) do { \ - while(!(REG(CC_CONCAT3(SSI, spi, _BASE) + SSI_SR) & SSI_SR_TNF)) ; \ + while(!(REG(SSI_BASE(spi) + SSI_SR) & SSI_SR_TNF)) ; \ } while(0) -#define SPIX_BUF(spi) REG(CC_CONCAT3(SSI, spi, _BASE) + SSI_DR) +#define SPIX_BUF(spi) REG(SSI_BASE(spi) + SSI_DR) #define SPIX_WAITFOREOTx(spi) do { \ - while(REG(CC_CONCAT3(SSI, spi, _BASE) + SSI_SR) & SSI_SR_BSY) ; \ + while(REG(SSI_BASE(spi) + SSI_SR) & SSI_SR_BSY) ; \ } while(0) #define SPIX_WAITFOREORx(spi) do { \ - while(!(REG(CC_CONCAT3(SSI, spi, _BASE) + SSI_SR) & SSI_SR_RNE)) ; \ + while(!(REG(SSI_BASE(spi) + SSI_SR) & SSI_SR_RNE)) ; \ } while(0) #define SPIX_FLUSH(spi) do { \ - while(REG(CC_CONCAT3(SSI, spi, _BASE) + SSI_SR) & SSI_SR_RNE) { \ + while(REG(SSI_BASE(spi) + SSI_SR) & SSI_SR_RNE) { \ SPIX_BUF(spi); \ } \ } while(0)