Merge pull request #4744 from deepikabhavnani/spi_issue_4743

Allow user to set default transfer byte for block read
pull/4768/merge
Jimmy Brisson 2017-07-24 14:45:30 -05:00 committed by GitHub
commit 1f94ede86c
51 changed files with 176 additions and 111 deletions

View File

@ -32,7 +32,8 @@ SPI::SPI(PinName mosi, PinName miso, PinName sclk, PinName ssel) :
#endif #endif
_bits(8), _bits(8),
_mode(0), _mode(0),
_hz(1000000) { _hz(1000000),
_write_fill(SPI_FILL_CHAR) {
// No lock needed in the constructor // No lock needed in the constructor
spi_init(&_spi, mosi, miso, sclk, ssel); spi_init(&_spi, mosi, miso, sclk, ssel);
@ -102,7 +103,7 @@ int SPI::write(int value) {
int SPI::write(const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int SPI::write(const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) {
lock(); lock();
_acquire(); _acquire();
int ret = spi_master_block_write(&_spi, tx_buffer, tx_length, rx_buffer, rx_length); int ret = spi_master_block_write(&_spi, tx_buffer, tx_length, rx_buffer, rx_length, _write_fill);
unlock(); unlock();
return ret; return ret;
} }
@ -115,6 +116,12 @@ void SPI::unlock() {
_mutex->unlock(); _mutex->unlock();
} }
void SPI::set_default_write_value(char data) {
lock();
_write_fill = data;
unlock();
}
#if DEVICE_SPI_ASYNCH #if DEVICE_SPI_ASYNCH
int SPI::transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t& callback, int event) int SPI::transfer(const void *tx_buffer, int tx_length, void *rx_buffer, int rx_length, unsigned char bit_width, const event_callback_t& callback, int event)

View File

@ -143,6 +143,15 @@ public:
*/ */
virtual void unlock(void); virtual void unlock(void);
/** Set default write data
* SPI requires the master to send some data during a read operation.
* Different devices may require different default byte values.
* For example: A SD Card requires default bytes to be 0xFF.
*
* @param data Default character to be transmitted while read operation
*/
void set_default_write_value(char data);
#if DEVICE_SPI_ASYNCH #if DEVICE_SPI_ASYNCH
/** Start non-blocking SPI transfer using 8bit buffers. /** Start non-blocking SPI transfer using 8bit buffers.
@ -271,6 +280,7 @@ protected:
int _bits; int _bits;
int _mode; int _mode;
int _hz; int _hz;
char _write_fill;
private: private:
/* Private acquire function without locking/unlocking /* Private acquire function without locking/unlocking

View File

@ -33,6 +33,7 @@
#define SPI_EVENT_INTERNAL_TRANSFER_COMPLETE (1 << 30) // Internal flag to report that an event occurred #define SPI_EVENT_INTERNAL_TRANSFER_COMPLETE (1 << 30) // Internal flag to report that an event occurred
#define SPI_FILL_WORD (0xFFFF) #define SPI_FILL_WORD (0xFFFF)
#define SPI_FILL_CHAR (0xFF)
#if DEVICE_SPI_ASYNCH #if DEVICE_SPI_ASYNCH
/** Asynch SPI HAL structure /** Asynch SPI HAL structure
@ -122,16 +123,17 @@ int spi_master_write(spi_t *obj, int value);
* tx_length and rx_length. The bytes written will be padded with the * tx_length and rx_length. The bytes written will be padded with the
* value 0xff. * value 0xff.
* *
* @param[in] obj The SPI peripheral to use for sending * @param[in] obj The SPI peripheral to use for sending
* @param[in] tx_buffer Pointer to the byte-array of data to write to the device * @param[in] tx_buffer Pointer to the byte-array of data to write to the device
* @param[in] tx_length Number of bytes to write, may be zero * @param[in] tx_length Number of bytes to write, may be zero
* @param[in] rx_buffer Pointer to the byte-array of data to read from the device * @param[in] rx_buffer Pointer to the byte-array of data to read from the device
* @param[in] rx_length Number of bytes to read, may be zero * @param[in] rx_length Number of bytes to read, may be zero
* @param[in] write_fill Default data transmitted while performing a read
* @returns * @returns
* The number of bytes written and read from the device. This is * The number of bytes written and read from the device. This is
* maximum of tx_length and rx_length. * maximum of tx_length and rx_length.
*/ */
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length); int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length, char write_fill);
/** Check if a value is available to read /** Check if a value is available to read
* *

View File

@ -262,11 +262,12 @@ int spi_master_write(spi_t *obj, int value) {
return data; return data;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -256,13 +256,13 @@ int spi_master_write(spi_t *obj, int value)
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length) char *rx_buffer, int rx_length, char write_fill)
{ {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
char out, in; char out, in;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
out = (i < tx_length) ? tx_buffer[i] : 0xff; out = (i < tx_length) ? tx_buffer[i] : write_fill;
in = spi_master_write(obj, out); in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -268,11 +268,12 @@ int spi_master_write(spi_t *obj, int value) {
return (ssp_read(obj)); return (ssp_read(obj));
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -268,11 +268,12 @@ int spi_master_write(spi_t *obj, int value) {
return (ssp_read(obj)); return (ssp_read(obj));
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -555,11 +555,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data; return rx_data;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -296,11 +296,12 @@ int spi_master_write(spi_t *obj, int value)
return 0; return 0;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char _write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : _write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -140,11 +140,12 @@ int spi_master_write(spi_t *obj, int value) {
return obj->spi->POPR; return obj->spi->POPR;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -141,11 +141,12 @@ int spi_master_write(spi_t *obj, int value) {
return obj->spi->D & 0xff; return obj->spi->D & 0xff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -120,11 +120,12 @@ int spi_master_write(spi_t *obj, int value) {
return obj->spi->D & 0xff; return obj->spi->D & 0xff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -199,11 +199,12 @@ int spi_master_write(spi_t *obj, int value) {
return ret; return ret;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -199,11 +199,12 @@ int spi_master_write(spi_t *obj, int value) {
return ret; return ret;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -118,11 +118,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -118,11 +118,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -115,11 +115,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -115,11 +115,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -117,11 +117,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -117,11 +117,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -117,11 +117,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -117,11 +117,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -127,11 +127,12 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -127,17 +127,17 @@ int spi_master_write(spi_t *obj, int value)
return rx_data & 0xffff; return rx_data & 0xffff;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
DSPI_MasterTransferBlocking(spi_address[obj->spi.instance], &(dspi_transfer_t){ for (int i = 0; i < total; i++) {
.txData = (uint8_t *)tx_buffer, char out = (i < tx_length) ? tx_buffer[i] : write_fill;
.rxData = (uint8_t *)rx_buffer, char in = spi_master_write(obj, out);
.dataSize = total, if (i < rx_length) {
.configFlags = kDSPI_MasterCtar0 | kDSPI_MasterPcs0 | kDSPI_MasterPcsContinuous, rx_buffer[i] = in;
}); }
}
DSPI_ClearStatusFlags(spi_address[obj->spi.instance], kDSPI_RxFifoDrainRequestFlag | kDSPI_EndOfQueueFlag);
return total; return total;
} }

View File

@ -179,11 +179,12 @@ int spi_master_write(spi_t *obj, int value)
return result; return result;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -179,11 +179,12 @@ int spi_master_write(spi_t *obj, int value)
return result; return result;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -231,11 +231,12 @@ int spi_master_write(spi_t *obj, int value)
return spi_master_transaction(obj, value, MXC_S_SPI_FIFO_DIR_BOTH); return spi_master_transaction(obj, value, MXC_S_SPI_FIFO_DIR_BOTH);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -167,11 +167,12 @@ int spi_master_write(spi_t *obj, int value)
return *req.rx_data; return *req.rx_data;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -167,11 +167,12 @@ int spi_master_write(spi_t *obj, int value)
return *req.rx_data; return *req.rx_data;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -263,11 +263,12 @@ int spi_master_write(spi_t *obj, int value)
return spi_read(obj); return spi_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -487,11 +487,12 @@ int spi_master_write(spi_t *obj, int value)
return p_spi_info->rx_buf; return p_spi_info->rx_buf;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -241,11 +241,12 @@ int spi_master_write(spi_t *obj, int value)
return value2; return value2;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -244,11 +244,12 @@ int spi_master_write(spi_t *obj, int value)
return value2; return value2;
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -190,11 +190,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -156,11 +156,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -192,11 +192,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -184,11 +184,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -248,11 +248,12 @@ int spi_master_write(spi_t *obj, int value)
return spi_read(obj); return spi_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer,
int tx_length, char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -190,11 +190,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -197,11 +197,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -177,11 +177,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -196,11 +196,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -178,11 +178,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -174,11 +174,12 @@ int spi_master_write(spi_t *obj, int value)
return spi_read(obj); return spi_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -83,11 +83,12 @@ int spi_master_write(spi_t *obj, int value)
return(fSpiWriteB(obj, value)); return(fSpiWriteB(obj, value));
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -260,11 +260,12 @@ int spi_master_write(spi_t *obj, int value) {
return spi_read(obj); return spi_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -311,11 +311,12 @@ int spi_master_write(spi_t *obj, int value) {
return spi_read(obj); return spi_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -241,12 +241,13 @@ int spi_master_write (spi_t *obj, int value)
return ssi_read(obj); return ssi_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill)
{ {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -387,12 +387,13 @@ int spi_master_write(spi_t *obj, int value)
} }
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill)
{ {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -391,11 +391,12 @@ int spi_master_write(spi_t *obj, int value)
return spi_read(obj); return spi_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;

View File

@ -183,11 +183,12 @@ int spi_master_write(spi_t *obj, int value) {
return ssp_read(obj); return ssp_read(obj);
} }
int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length, char *rx_buffer, int rx_length) { int spi_master_block_write(spi_t *obj, const char *tx_buffer, int tx_length,
char *rx_buffer, int rx_length, char write_fill) {
int total = (tx_length > rx_length) ? tx_length : rx_length; int total = (tx_length > rx_length) ? tx_length : rx_length;
for (int i = 0; i < total; i++) { for (int i = 0; i < total; i++) {
char out = (i < tx_length) ? tx_buffer[i] : 0xff; char out = (i < tx_length) ? tx_buffer[i] : write_fill;
char in = spi_master_write(obj, out); char in = spi_master_write(obj, out);
if (i < rx_length) { if (i < rx_length) {
rx_buffer[i] = in; rx_buffer[i] = in;