Make the two keyboard halves communicate with each other via I2C.
This commit is contained in:
@@ -19,7 +19,8 @@ SET(CMAKE_EXECUTABLE_LIBRARY_SUFFIX)
|
||||
|
||||
# CURRENT DIRECTORY
|
||||
SET(SrcDir "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
||||
SET(KsdkDir "${SrcDir}/../lib/KSDK_1.3_FRDM-KL03Z/")
|
||||
SET(KsdkDir "${SrcDir}/../lib/KSDK_1.3_FRDM-KL03Z")
|
||||
SET(IncludeDir "${SrcDir}/../include")
|
||||
|
||||
# DEBUG LINK FILE
|
||||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -T${KsdkDir}/platform/devices/MKL03Z4/linker/gcc/MKL03Z32xxx4_flash.ld -static")
|
||||
@@ -75,6 +76,7 @@ IF(CMAKE_BUILD_TYPE MATCHES Debug)
|
||||
INCLUDE_DIRECTORIES(${KsdkDir}/examples)
|
||||
INCLUDE_DIRECTORIES(${KsdkDir}/examples/frdmkl03z)
|
||||
INCLUDE_DIRECTORIES(${KsdkDir})
|
||||
INCLUDE_DIRECTORIES(${IncludeDir})
|
||||
ELSEIF(CMAKE_BUILD_TYPE MATCHES Release)
|
||||
INCLUDE_DIRECTORIES(${KsdkDir}/platform/osa/inc)
|
||||
INCLUDE_DIRECTORIES(${KsdkDir}/platform/utilities/inc)
|
||||
@@ -89,6 +91,7 @@ ELSEIF(CMAKE_BUILD_TYPE MATCHES Release)
|
||||
INCLUDE_DIRECTORIES(${KsdkDir}/examples)
|
||||
INCLUDE_DIRECTORIES(${KsdkDir}/examples/frdmkl03z)
|
||||
INCLUDE_DIRECTORIES(${KsdkDir})
|
||||
INCLUDE_DIRECTORIES(${IncludeDir})
|
||||
ENDIF()
|
||||
|
||||
# ADD_EXECUTABLE
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_1.3_FRDM-KL03Z/examples"/>
|
||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_1.3_FRDM-KL03Z/examples/frdmkl03z"/>
|
||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_1.3_FRDM-KL03Z"/>
|
||||
<listOptionValue builtIn="false" value="../../../../include"/>
|
||||
</option>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.933718024" name="Language standard" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.gnu99" valueType="enumerated"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.4702060583" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
@@ -227,6 +228,7 @@
|
||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_1.3_FRDM-KL03Z/examples"/>
|
||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_1.3_FRDM-KL03Z/examples/frdmkl03z"/>
|
||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_1.3_FRDM-KL03Z"/>
|
||||
<listOptionValue builtIn="false" value="../../../../include"/>
|
||||
</option>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.997197032" name="Language standard" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std" useByScannerDiscovery="true" value="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.std.gnu99" valueType="enumerated"/>
|
||||
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.9999202301" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||
|
||||
@@ -80,11 +80,21 @@
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-3-PROJECT_LOC/lib/KSDK_1.3_FRDM-KL03Z/examples/frdmkl03z/pin_mux.h</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>source/i2c.h</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-3-PROJECT_LOC/include/i2c.h</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>source/main.c</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-2-PROJECT_LOC/main.c</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>source/main.h</name>
|
||||
<type>1</type>
|
||||
<locationURI>PARENT-2-PROJECT_LOC/main.h</locationURI>
|
||||
</link>
|
||||
<link>
|
||||
<name>startup/startup.c</name>
|
||||
<type>1</type>
|
||||
|
||||
70
left/main.c
70
left/main.c
@@ -1,8 +1,52 @@
|
||||
#include "board.h"
|
||||
#include "fsl_clock_manager.h"
|
||||
#include "fsl_i2c_slave_driver.h"
|
||||
#include "fsl_i2c_shared_function.h"
|
||||
#include "i2c.h"
|
||||
#include "main.h"
|
||||
|
||||
uint8_t isSw2Pressed;
|
||||
uint8_t isSw3Pressed;
|
||||
uint8_t buffer[I2C_DATA_LENGTH];
|
||||
|
||||
void I2C0_IRQHandler(void)
|
||||
{
|
||||
I2C_DRV_IRQHandler(I2C0_IDX);
|
||||
}
|
||||
|
||||
static void i2c_slave_callback(uint8_t instance, i2c_slave_event_t i2cEvent, void *param)
|
||||
{
|
||||
i2c_slave_state_t *slaveState = I2C_DRV_SlaveGetHandler(instance);
|
||||
|
||||
switch (i2cEvent) {
|
||||
case kI2CSlaveTxReq:
|
||||
slaveState->txSize = I2C_DATA_LENGTH;
|
||||
slaveState ->txBuff = buffer;
|
||||
slaveState ->isTxBusy = true;
|
||||
buffer[0] = isSw2Pressed;
|
||||
buffer[1] = isSw3Pressed;
|
||||
break;
|
||||
|
||||
case kI2CSlaveTxEmpty:
|
||||
slaveState->isTxBusy = false;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
// Initialize clock.
|
||||
|
||||
CLOCK_SYS_EnablePortClock(PORTA_IDX);
|
||||
CLOCK_SYS_EnablePortClock(PORTB_IDX);
|
||||
|
||||
BOARD_ClockInit();
|
||||
|
||||
// Initialize GPIO.
|
||||
|
||||
gpio_input_pin_user_config_t inputPin[] =
|
||||
{
|
||||
{
|
||||
@@ -43,16 +87,28 @@ int main(void)
|
||||
}
|
||||
};
|
||||
|
||||
CLOCK_SYS_EnablePortClock(PORTA_IDX);
|
||||
CLOCK_SYS_EnablePortClock(PORTB_IDX);
|
||||
|
||||
BOARD_ClockInit();
|
||||
|
||||
GPIO_DRV_Init(inputPin, outputPin);
|
||||
|
||||
// Initialize I2C.
|
||||
|
||||
i2c_slave_state_t slave;
|
||||
|
||||
i2c_slave_user_config_t userConfig = {
|
||||
.address = LEFT_KEYBOARD_HALF_I2C_ADDRESS_7BIT,
|
||||
.slaveCallback = i2c_slave_callback,
|
||||
.callbackParam = NULL,
|
||||
.slaveListening = true,
|
||||
.startStopDetect = true,
|
||||
};
|
||||
|
||||
configure_i2c_pins(0);
|
||||
I2C_DRV_SlaveInit(BOARD_I2C_INSTANCE, &userConfig, &slave);
|
||||
|
||||
// Update switch states and toggle LEDs accordingly.
|
||||
|
||||
while (1) {
|
||||
uint8_t isSw2Pressed = GPIO_DRV_ReadPinInput(kGpioSW2);
|
||||
uint8_t isSw3Pressed = GPIO_DRV_ReadPinInput(kGpioSW3);
|
||||
isSw2Pressed = GPIO_DRV_ReadPinInput(kGpioSW2);
|
||||
isSw3Pressed = GPIO_DRV_ReadPinInput(kGpioSW3);
|
||||
GPIO_DRV_WritePinOutput(kGpioLED1, isSw2Pressed);
|
||||
GPIO_DRV_WritePinOutput(kGpioLED3, isSw3Pressed);
|
||||
}
|
||||
|
||||
6
left/main.h
Normal file
6
left/main.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef __MAIN_H__
|
||||
#define __MAIN_H__
|
||||
|
||||
#define I2C_DATA_LENGTH 2
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user