diff --git a/left/src/config.h b/left/src/config.h index fb65ff0..83e512b 100644 --- a/left/src/config.h +++ b/left/src/config.h @@ -3,6 +3,6 @@ // Macros: - #define DEBUG_OVER_SPI +// #define DEBUG_OVER_SPI #endif diff --git a/left/src/debug_over_spi.c b/left/src/debug_over_spi.c index b161f6a..28752ed 100644 --- a/left/src/debug_over_spi.c +++ b/left/src/debug_over_spi.c @@ -14,7 +14,7 @@ static spi_transfer_t xfer = {0}; static spi_master_config_t userConfig; spi_master_handle_t handle; -static volatile bool masterFinished = false; +static volatile bool masterFinished = true; #endif @@ -51,12 +51,12 @@ void DebugOverSpi_Init(void) void DebugOverSpi_Send(uint8_t *tx, uint8_t len) { #ifdef DEBUG_OVER_SPI -// if (masterFinished) { + if (masterFinished) { masterFinished = false; memcpy(srcBuff, tx, MIN(BUFFER_SIZE, len)); xfer.txData = srcBuff; xfer.dataSize = len; SPI_MasterTransferNonBlocking(EXAMPLE_SPI_MASTER, &handle, &xfer); -// } + } #endif } diff --git a/left/src/init_peripherals.c b/left/src/init_peripherals.c index f03562f..91172c0 100644 --- a/left/src/init_peripherals.c +++ b/left/src/init_peripherals.c @@ -14,16 +14,14 @@ i2c_slave_config_t slaveConfig; i2c_slave_handle_t slaveHandle; -uint8_t byteIn; +uint8_t userData; uint8_t rxMessagePos; -i2c_slave_transfer_event_t prevEvent; - uint8_t dosBuffer[2]; -static void i2cSlaveCallback(I2C_Type *base, i2c_slave_transfer_t *xfer, void *userData) +static void i2cSlaveCallback(I2C_Type *base, i2c_slave_transfer_t *xfer, void *userDataArg) { dosBuffer[0] = xfer->event; - dosBuffer[1] = byteIn; + dosBuffer[1] = userData; DebugOverSpi_Send(dosBuffer, 2); switch (xfer->event) { @@ -32,29 +30,18 @@ static void i2cSlaveCallback(I2C_Type *base, i2c_slave_transfer_t *xfer, void *u xfer->data = (uint8_t*)&TxMessage; xfer->dataSize = TxMessage.length + I2C_MESSAGE_HEADER_LENGTH; break; - case kI2C_SlaveReceiveEvent: - if (prevEvent == kI2C_SlaveReceiveEvent) { - ((uint8_t*)&RxMessage)[rxMessagePos++] = byteIn; - } else { - rxMessagePos = 0; - memset(&RxMessage, 0, I2C_MESSAGE_MAX_TOTAL_LENGTH); - } - - xfer->data = (uint8_t*)&byteIn; - xfer->dataSize = 1; + case kI2C_SlaveAddressMatchEvent: + rxMessagePos = 0; break; - case kI2C_SlaveCompletionEvent: - if (prevEvent == kI2C_SlaveReceiveEvent) { - ((uint8_t*)&RxMessage)[rxMessagePos] = byteIn; - RxMessage.length = rxMessagePos - I2C_MESSAGE_HEADER_LENGTH; + case kI2C_SlaveReceiveEvent: + ((uint8_t*)&RxMessage)[rxMessagePos++] = userData; + if (RxMessage.length == rxMessagePos-I2C_MESSAGE_HEADER_LENGTH) { SlaveRxHandler(); } break; default: break; } - - prevEvent = xfer->event; } void InitInterruptPriorities(void) @@ -80,9 +67,8 @@ void InitI2c(void) I2C_SlaveGetDefaultConfig(&slaveConfig); slaveConfig.slaveAddress = I2C_ADDRESS_LEFT_KEYBOARD_HALF_FIRMWARE; I2C_SlaveInit(I2C_BUS_BASEADDR, &slaveConfig); - I2C_SlaveTransferCreateHandle(I2C_BUS_BASEADDR, &slaveHandle, i2cSlaveCallback, NULL); - slaveHandle.eventMask |= kI2C_SlaveCompletionEvent; - I2C_SlaveTransferNonBlocking(I2C_BUS_BASEADDR, &slaveHandle, kI2C_SlaveCompletionEvent); + I2C_SlaveTransferCreateHandle(I2C_BUS_BASEADDR, &slaveHandle, i2cSlaveCallback, &userData); + I2C_SlaveTransferNonBlocking(I2C_BUS_BASEADDR, &slaveHandle, kI2C_SlaveAddressMatchEvent); } void InitLedDriver(void) diff --git a/lib/KSDK_2.0_MKL03Z8xxx4 b/lib/KSDK_2.0_MKL03Z8xxx4 index ac55fc2..49e20a5 160000 --- a/lib/KSDK_2.0_MKL03Z8xxx4 +++ b/lib/KSDK_2.0_MKL03Z8xxx4 @@ -1 +1 @@ -Subproject commit ac55fc28ee6aa68cddcac00f6b76398cd8c0b541 +Subproject commit 49e20a57988572156b1df1c73c783c8e5e0dbb49