diff options
Diffstat (limited to 'tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex')
-rw-r--r-- | tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex/SPIHalfDuplex.cpp | 43 | ||||
-rw-r--r-- | tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex/SPIHalfDuplex.h | 85 |
2 files changed, 128 insertions, 0 deletions
diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex/SPIHalfDuplex.cpp b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex/SPIHalfDuplex.cpp new file mode 100644 index 0000000000..5fc6e8568e --- /dev/null +++ b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex/SPIHalfDuplex.cpp @@ -0,0 +1,43 @@ +/* mbed Microcontroller Library - SPIHalfDuplex + * Copyright (c) 2010-2011 ARM Limited. All rights reserved. + */ +#include "SPIHalfDuplex.h" + +#if DEVICE_SPI + +#include "spi_api.h" +#include "pinmap.h" + +#define GPIO_MODE 0 +#define SPI_MODE 2 + +namespace mbed { + +SPIHalfDuplex::SPIHalfDuplex(PinName mosi, PinName miso, PinName sclk) : SPI(mosi, miso, sclk) { + _mosi = mosi; + _miso = miso; + _sbits = _bits; +} + +void SPIHalfDuplex::slave_format(int sbits) { + _sbits = sbits; +} + +int SPIHalfDuplex::write(int value) { + int t_bits = _bits; + pin_function(_mosi, SPI_MODE); + int ret_val = SPI::write(value); + if (ret_val != value) { + return -1; + } + format(_sbits, _mode); + pin_function(_mosi, GPIO_MODE); + ret_val = SPI::write(0x55); + format(t_bits, _mode); + pin_function(_mosi, SPI_MODE); + return ret_val; +} + +} // end namespace mbed + +#endif diff --git a/tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex/SPIHalfDuplex.h b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex/SPIHalfDuplex.h new file mode 100644 index 0000000000..14633b8555 --- /dev/null +++ b/tmk_core/tool/mbed/mbed-sdk/libraries/tests/libs/SPIHalfDuplex/SPIHalfDuplex.h @@ -0,0 +1,85 @@ +/* mbed Microcontroller Library - SPIHalfDuplex + * Copyright (c) 2010-2011 ARM Limited. All rights reserved. + */ +#ifndef MBED_SPIHALFDUPLEX_H +#define MBED_SPIHALFDUPLEX_H + +#include "platform.h" + +#if DEVICE_SPI + +#include "SPI.h" + +namespace mbed { + +/** A SPI half-duplex master, used for communicating with SPI slave devices + * over a shared data line. + * + * The default format is set to 8-bits for both master and slave, and a + * clock frequency of 1MHz + * + * Most SPI devies will also require Chip Select and Reset signals. These + * can be controlled using <DigitalOut> pins. + * + * Although this is for a shared data line, both MISO and MOSI are defined, + * and should be tied together externally to the mbed. This class handles + * the tri-stating of the MOSI pin. + * + * Example: + * @code + * // Send a byte to a SPI half-duplex slave, and record the response + * + * #include "mbed.h" + * + * SPIHalfDuplex device(p5, p6, p7) // mosi, miso, sclk + * + * int main() { + * int respone = device.write(0xAA); + * } + * @endcode + */ + +class SPIHalfDuplex : public SPI { + +public: + + /** Create a SPI half-duplex master connected to the specified pins + * + * Pin Options: + * (5, 6, 7) or (11, 12, 13) + * + * mosi or miso can be specfied as NC if not used + * + * @param mosi SPI Master Out, Slave In pin + * @param miso SPI Master In, Slave Out pin + * @param sclk SPI Clock pin + * @param name (optional) A string to identify the object + */ + SPIHalfDuplex(PinName mosi, PinName miso, PinName sclk); + + /** Write to the SPI Slave and return the response + * + * @param value Data to be sent to the SPI slave + * + * @returns + * Response from the SPI slave + */ + virtual int write(int value); + + /** Set the number of databits expected from the slave, from 4-16 + * + * @param sbits Number of expected bits in the slave response + */ + void slave_format(int sbits); + +protected: + PinName _mosi; + PinName _miso; + int _sbits; +}; // End of class + +} // End of namespace mbed + +#endif + +#endif |