From 8ebd4d8e5fbfdc612ad5dd8ec212c76bd8cf4ed6 Mon Sep 17 00:00:00 2001 From: Martin Braun Date: Thu, 11 May 2017 16:18:24 -0700 Subject: mpm: spi: Added 16-bit access to SPI regs --- mpm/lib/spi/spi_regs_iface.cpp | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'mpm/lib/spi') diff --git a/mpm/lib/spi/spi_regs_iface.cpp b/mpm/lib/spi/spi_regs_iface.cpp index ab9e089f8..40b376ee1 100644 --- a/mpm/lib/spi/spi_regs_iface.cpp +++ b/mpm/lib/spi/spi_regs_iface.cpp @@ -58,7 +58,7 @@ public: throw mpm::runtime_error("SPI read returned too much data"); } - return uint8_t(data & 0xFF); + return data; } void poke8( @@ -74,6 +74,35 @@ public: _spi_iface->transfer24_8(transaction); } + uint16_t peek16( + const uint32_t addr + ) { + uint32_t transaction = 0 + | (addr << _addr_shift) + | _read_flags + ; + + uint32_t data = _spi_iface->transfer24_8(transaction); + if ((data & 0xFFFF0000) != 0) { + throw mpm::runtime_error("SPI read returned too much data"); + } + + return data; + } + + void poke16( + const uint32_t addr, + const uint16_t data + ) { + uint32_t transaction = 0 + | _write_flags + | (addr << _addr_shift) + | (data << _data_shift) + ; + + _spi_iface->transfer24_8(transaction); + } + private: mpm::spi::spi_iface::sptr _spi_iface; -- cgit v1.2.3