diff --git a/left/src/init_peripherials.c b/left/src/init_peripherials.c index 7674253..ac48953 100644 --- a/left/src/init_peripherials.c +++ b/left/src/init_peripherials.c @@ -7,20 +7,54 @@ #include "fsl_clock.h" #include "i2c.h" #include "led_pwm.h" +#include "bridge_protocol_handler.h" + +static void i2cSlaveCallback(I2C_Type *base, i2c_slave_transfer_t *xfer, void *userData) +{ + switch (xfer->event) + { + case kI2C_SlaveTransmitEvent: + BridgeProtocolHandler(); + xfer->data = BridgeTxBuffer; + xfer->dataSize = BridgeTxSize; + break; + case kI2C_SlaveReceiveEvent: + BridgeProtocolHandler(); + xfer->data = BridgeRxBuffer; + xfer->dataSize = BRIDGE_RX_BUFFER_SIZE; + break; + case kI2C_SlaveCompletionEvent: + xfer->data = NULL; + xfer->dataSize = 0; + break; + case kI2C_SlaveTransmitAckEvent: + break; + default: + break; + } +} void InitI2c() { port_pin_config_t pinConfig = { .pullSelect = kPORT_PullUp, }; - // Initialize main bus - CLOCK_EnableClock(I2C_BUS_SDA_CLOCK); CLOCK_EnableClock(I2C_BUS_SCL_CLOCK); pinConfig.mux = I2C_BUS_MUX; PORT_SetPinConfig(I2C_BUS_SDA_PORT, I2C_BUS_SDA_PIN, &pinConfig); PORT_SetPinConfig(I2C_BUS_SCL_PORT, I2C_BUS_SCL_PIN, &pinConfig); + + i2c_slave_config_t slaveConfig; + i2c_slave_handle_t slaveHandle; + + I2C_SlaveGetDefaultConfig(&slaveConfig); + slaveConfig.slaveAddress = I2C_ADDRESS_LEFT_KEYBOARD_HALF; + 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); } void InitLedDriver() { diff --git a/left/src/main.c b/left/src/main.c index f53e2e2..7233af1 100644 --- a/left/src/main.c +++ b/left/src/main.c @@ -1,14 +1,6 @@ -#include "fsl_gpio.h" -#include "init_clock.h" -#include "fsl_port.h" -#include "fsl_i2c.h" #include "main.h" -#include "key_matrix.h" -#include "test_led.h" -#include "i2c_addresses.h" -#include "i2c.h" +#include "init_clock.h" #include "init_peripherials.h" -#include "bridge_protocol_handler.h" key_matrix_t keyMatrix = { .colNum = KEYBOARD_MATRIX_COLS_NUM, @@ -49,49 +41,13 @@ key_matrix_t keyMatrix = { } #endif }; -uint8_t IsoJumperState; - -i2c_slave_config_t slaveConfig; -i2c_slave_handle_t slaveHandle; - -static void i2c_slave_callback(I2C_Type *base, i2c_slave_transfer_t *xfer, void *userData) -{ - switch (xfer->event) - { - case kI2C_SlaveTransmitEvent: - BridgeProtocolHandler(); - xfer->data = BridgeTxBuffer; - xfer->dataSize = BridgeTxSize; - break; - case kI2C_SlaveReceiveEvent: - BridgeProtocolHandler(); - xfer->data = BridgeRxBuffer; - xfer->dataSize = BRIDGE_RX_BUFFER_SIZE; - break; - case kI2C_SlaveCompletionEvent: - xfer->data = NULL; - xfer->dataSize = 0; - break; - case kI2C_SlaveTransmitAckEvent: - break; - default: - break; - } -} int main(void) { InitClock(); InitPeripherials(); - - I2C_SlaveGetDefaultConfig(&slaveConfig); - slaveConfig.slaveAddress = I2C_ADDRESS_LEFT_KEYBOARD_HALF; - I2C_SlaveInit(I2C_BUS_BASEADDR, &slaveConfig); - I2C_SlaveTransferCreateHandle(I2C_BUS_BASEADDR, &slaveHandle, i2c_slave_callback, NULL); - slaveHandle.eventMask |= kI2C_SlaveCompletionEvent; - I2C_SlaveTransferNonBlocking(I2C_BUS_BASEADDR, &slaveHandle, kI2C_SlaveCompletionEvent); - KeyMatrix_Init(&keyMatrix); + while (1) { KeyMatrix_Scan(&keyMatrix); asm("wfi"); diff --git a/left/src/main.h b/left/src/main.h index abc3bcb..7df0c8c 100644 --- a/left/src/main.h +++ b/left/src/main.h @@ -13,6 +13,5 @@ // Variables: extern key_matrix_t keyMatrix; - extern uint8_t IsoJumperState; #endif