Make the two keyboard halves communicate with each other via I2C.
This commit is contained in:
3
include/README.md
Normal file
3
include/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Include files
|
||||||
|
|
||||||
|
These files are shared between multiple projects of this repository.
|
||||||
6
include/i2c.h
Normal file
6
include/i2c.h
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#ifndef __I2C_H__
|
||||||
|
#define __I2C_H__
|
||||||
|
|
||||||
|
#define LEFT_KEYBOARD_HALF_I2C_ADDRESS_7BIT 8
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -19,7 +19,8 @@ SET(CMAKE_EXECUTABLE_LIBRARY_SUFFIX)
|
|||||||
|
|
||||||
# CURRENT DIRECTORY
|
# CURRENT DIRECTORY
|
||||||
SET(SrcDir "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
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
|
# 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")
|
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)
|
||||||
INCLUDE_DIRECTORIES(${KsdkDir}/examples/frdmkl03z)
|
INCLUDE_DIRECTORIES(${KsdkDir}/examples/frdmkl03z)
|
||||||
INCLUDE_DIRECTORIES(${KsdkDir})
|
INCLUDE_DIRECTORIES(${KsdkDir})
|
||||||
|
INCLUDE_DIRECTORIES(${IncludeDir})
|
||||||
ELSEIF(CMAKE_BUILD_TYPE MATCHES Release)
|
ELSEIF(CMAKE_BUILD_TYPE MATCHES Release)
|
||||||
INCLUDE_DIRECTORIES(${KsdkDir}/platform/osa/inc)
|
INCLUDE_DIRECTORIES(${KsdkDir}/platform/osa/inc)
|
||||||
INCLUDE_DIRECTORIES(${KsdkDir}/platform/utilities/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)
|
||||||
INCLUDE_DIRECTORIES(${KsdkDir}/examples/frdmkl03z)
|
INCLUDE_DIRECTORIES(${KsdkDir}/examples/frdmkl03z)
|
||||||
INCLUDE_DIRECTORIES(${KsdkDir})
|
INCLUDE_DIRECTORIES(${KsdkDir})
|
||||||
|
INCLUDE_DIRECTORIES(${IncludeDir})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
# ADD_EXECUTABLE
|
# 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"/>
|
||||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_1.3_FRDM-KL03Z/examples/frdmkl03z"/>
|
<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="../../../../lib/KSDK_1.3_FRDM-KL03Z"/>
|
||||||
|
<listOptionValue builtIn="false" value="../../../../include"/>
|
||||||
</option>
|
</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.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">
|
<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"/>
|
||||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_1.3_FRDM-KL03Z/examples/frdmkl03z"/>
|
<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="../../../../lib/KSDK_1.3_FRDM-KL03Z"/>
|
||||||
|
<listOptionValue builtIn="false" value="../../../../include"/>
|
||||||
</option>
|
</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.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">
|
<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>
|
<type>1</type>
|
||||||
<locationURI>PARENT-3-PROJECT_LOC/lib/KSDK_1.3_FRDM-KL03Z/examples/frdmkl03z/pin_mux.h</locationURI>
|
<locationURI>PARENT-3-PROJECT_LOC/lib/KSDK_1.3_FRDM-KL03Z/examples/frdmkl03z/pin_mux.h</locationURI>
|
||||||
</link>
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>source/i2c.h</name>
|
||||||
|
<type>1</type>
|
||||||
|
<locationURI>PARENT-3-PROJECT_LOC/include/i2c.h</locationURI>
|
||||||
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>source/main.c</name>
|
<name>source/main.c</name>
|
||||||
<type>1</type>
|
<type>1</type>
|
||||||
<locationURI>PARENT-2-PROJECT_LOC/main.c</locationURI>
|
<locationURI>PARENT-2-PROJECT_LOC/main.c</locationURI>
|
||||||
</link>
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>source/main.h</name>
|
||||||
|
<type>1</type>
|
||||||
|
<locationURI>PARENT-2-PROJECT_LOC/main.h</locationURI>
|
||||||
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>startup/startup.c</name>
|
<name>startup/startup.c</name>
|
||||||
<type>1</type>
|
<type>1</type>
|
||||||
|
|||||||
70
left/main.c
70
left/main.c
@@ -1,8 +1,52 @@
|
|||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "fsl_clock_manager.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)
|
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[] =
|
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);
|
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) {
|
while (1) {
|
||||||
uint8_t isSw2Pressed = GPIO_DRV_ReadPinInput(kGpioSW2);
|
isSw2Pressed = GPIO_DRV_ReadPinInput(kGpioSW2);
|
||||||
uint8_t isSw3Pressed = GPIO_DRV_ReadPinInput(kGpioSW3);
|
isSw3Pressed = GPIO_DRV_ReadPinInput(kGpioSW3);
|
||||||
GPIO_DRV_WritePinOutput(kGpioLED1, isSw2Pressed);
|
GPIO_DRV_WritePinOutput(kGpioLED1, isSw2Pressed);
|
||||||
GPIO_DRV_WritePinOutput(kGpioLED3, isSw3Pressed);
|
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
|
||||||
@@ -20,6 +20,7 @@ SET(CMAKE_EXECUTABLE_LIBRARY_SUFFIX)
|
|||||||
# CURRENT DIRECTORY
|
# CURRENT DIRECTORY
|
||||||
SET(SrcDir "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
SET(SrcDir "${CMAKE_CURRENT_SOURCE_DIR}/../..")
|
||||||
SET(KsdkDir "${SrcDir}/../lib/KSDK_2.0_FRDM-K22F/")
|
SET(KsdkDir "${SrcDir}/../lib/KSDK_2.0_FRDM-K22F/")
|
||||||
|
SET(IncludeDir "${SrcDir}/../include")
|
||||||
|
|
||||||
SET(CMAKE_ASM_FLAGS_DEBUG "${CMAKE_ASM_FLAGS_DEBUG} -DDEBUG")
|
SET(CMAKE_ASM_FLAGS_DEBUG "${CMAKE_ASM_FLAGS_DEBUG} -DDEBUG")
|
||||||
SET(CMAKE_ASM_FLAGS_DEBUG "${CMAKE_ASM_FLAGS_DEBUG} -D__STARTUP_CLEAR_BSS")
|
SET(CMAKE_ASM_FLAGS_DEBUG "${CMAKE_ASM_FLAGS_DEBUG} -D__STARTUP_CLEAR_BSS")
|
||||||
@@ -149,11 +150,14 @@ include_directories(${KsdkDir}/CMSIS/Include)
|
|||||||
include_directories(${KsdkDir}/boards/frdmk22f)
|
include_directories(${KsdkDir}/boards/frdmk22f)
|
||||||
include_directories(${KsdkDir}/devices/MK22F51212/drivers)
|
include_directories(${KsdkDir}/devices/MK22F51212/drivers)
|
||||||
include_directories(${KsdkDir}/devices/MK22F51212)
|
include_directories(${KsdkDir}/devices/MK22F51212)
|
||||||
|
include_directories(${IncludeDir})
|
||||||
|
|
||||||
add_executable(dev_composite_hid_mouse_hid_keyboard_bm.elf
|
add_executable(dev_composite_hid_mouse_hid_keyboard_bm.elf
|
||||||
"${KsdkDir}/devices/MK22F51212/gcc/startup_MK22F51212.S"
|
"${KsdkDir}/devices/MK22F51212/gcc/startup_MK22F51212.S"
|
||||||
"${KsdkDir}/middleware/usb_1.0.0/device/usb_device_khci.c"
|
"${KsdkDir}/middleware/usb_1.0.0/device/usb_device_khci.c"
|
||||||
"${KsdkDir}/middleware/usb_1.0.0/device/usb_device_khci.h"
|
"${KsdkDir}/middleware/usb_1.0.0/device/usb_device_khci.h"
|
||||||
|
"${KsdkDir}/devices/MK22F51212/drivers/fsl_i2c.h"
|
||||||
|
"${KsdkDir}/devices/MK22F51212/drivers/fsl_i2c.c"
|
||||||
"${KsdkDir}/devices/MK22F51212/drivers/fsl_lpuart.h"
|
"${KsdkDir}/devices/MK22F51212/drivers/fsl_lpuart.h"
|
||||||
"${KsdkDir}/devices/MK22F51212/drivers/fsl_lpuart.c"
|
"${KsdkDir}/devices/MK22F51212/drivers/fsl_lpuart.c"
|
||||||
"${KsdkDir}/devices/MK22F51212/drivers/fsl_uart.h"
|
"${KsdkDir}/devices/MK22F51212/drivers/fsl_uart.h"
|
||||||
|
|||||||
@@ -81,6 +81,7 @@
|
|||||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/CMSIS/Include"/>
|
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/CMSIS/Include"/>
|
||||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212/drivers"/>
|
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212/drivers"/>
|
||||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212"/>
|
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212"/>
|
||||||
|
<listOptionValue builtIn="false" value="../../../../include"/>
|
||||||
</option>
|
</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.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.62587551" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="false" valueType="definedSymbols">
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.62587551" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
@@ -220,6 +221,7 @@
|
|||||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/CMSIS/Include"/>
|
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/CMSIS/Include"/>
|
||||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212/drivers"/>
|
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212/drivers"/>
|
||||||
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212"/>
|
<listOptionValue builtIn="false" value="../../../../lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212"/>
|
||||||
|
<listOptionValue builtIn="false" value="../../../../include"/>
|
||||||
</option>
|
</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.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.9752018572" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="false" valueType="definedSymbols">
|
<option id="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs.9752018572" name="Defined symbols (-D)" superClass="ilg.gnuarmeclipse.managedbuild.cross.option.c.compiler.defs" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
|
|||||||
@@ -125,6 +125,16 @@
|
|||||||
<type>1</type>
|
<type>1</type>
|
||||||
<locationURI>$%7BPARENT-3-PROJECT_LOC%7D/lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212/drivers/fsl_gpio.h</locationURI>
|
<locationURI>$%7BPARENT-3-PROJECT_LOC%7D/lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212/drivers/fsl_gpio.h</locationURI>
|
||||||
</link>
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>drivers/fsl_i2c.c</name>
|
||||||
|
<type>1</type>
|
||||||
|
<locationURI>$%7BPARENT-3-PROJECT_LOC%7D/lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212/drivers/fsl_i2c.c</locationURI>
|
||||||
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>drivers/fsl_i2c.h</name>
|
||||||
|
<type>1</type>
|
||||||
|
<locationURI>$%7BPARENT-3-PROJECT_LOC%7D/lib/KSDK_2.0_FRDM-K22F/devices/MK22F51212/drivers/fsl_i2c.h</locationURI>
|
||||||
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>drivers/fsl_lpuart.c</name>
|
<name>drivers/fsl_lpuart.c</name>
|
||||||
<type>1</type>
|
<type>1</type>
|
||||||
@@ -180,11 +190,21 @@
|
|||||||
<type>1</type>
|
<type>1</type>
|
||||||
<locationURI>$%7BPARENT-3-PROJECT_LOC%7D/lib/KSDK_2.0_FRDM-K22F/middleware/usb_1.0.0/osa/usb_osa_bm.h</locationURI>
|
<locationURI>$%7BPARENT-3-PROJECT_LOC%7D/lib/KSDK_2.0_FRDM-K22F/middleware/usb_1.0.0/osa/usb_osa_bm.h</locationURI>
|
||||||
</link>
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>sources/i2c.h</name>
|
||||||
|
<type>1</type>
|
||||||
|
<locationURI>PARENT-3-PROJECT_LOC/include/i2c.h</locationURI>
|
||||||
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>sources/main.c</name>
|
<name>sources/main.c</name>
|
||||||
<type>1</type>
|
<type>1</type>
|
||||||
<locationURI>PARENT-2-PROJECT_LOC/main.c</locationURI>
|
<locationURI>PARENT-2-PROJECT_LOC/main.c</locationURI>
|
||||||
</link>
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>sources/main.h</name>
|
||||||
|
<type>1</type>
|
||||||
|
<locationURI>PARENT-2-PROJECT_LOC/main.h</locationURI>
|
||||||
|
</link>
|
||||||
<link>
|
<link>
|
||||||
<name>sources/usb_api.h</name>
|
<name>sources/usb_api.h</name>
|
||||||
<type>1</type>
|
<type>1</type>
|
||||||
|
|||||||
@@ -34,8 +34,14 @@
|
|||||||
|
|
||||||
void BOARD_InitPins(void)
|
void BOARD_InitPins(void)
|
||||||
{
|
{
|
||||||
|
// Ungate ports.
|
||||||
|
CLOCK_EnableClock(kCLOCK_PortA); // LEDs
|
||||||
|
CLOCK_EnableClock(kCLOCK_PortB); // SW3, I2C
|
||||||
|
CLOCK_EnableClock(kCLOCK_PortC); // SW2
|
||||||
|
CLOCK_EnableClock(kCLOCK_PortD); // LEDs
|
||||||
|
CLOCK_EnableClock(kCLOCK_PortE); // UART1 for OpenSDA
|
||||||
|
|
||||||
// Set up UART1 for OpenSDA.
|
// Set up UART1 for OpenSDA.
|
||||||
CLOCK_EnableClock(kCLOCK_PortE);
|
|
||||||
PORT_SetPinMux(PORTE, 0u, kPORT_MuxAlt3);
|
PORT_SetPinMux(PORTE, 0u, kPORT_MuxAlt3);
|
||||||
PORT_SetPinMux(PORTE, 1u, kPORT_MuxAlt3);
|
PORT_SetPinMux(PORTE, 1u, kPORT_MuxAlt3);
|
||||||
|
|
||||||
@@ -43,17 +49,12 @@ void BOARD_InitPins(void)
|
|||||||
port_pin_config_t switchConfig = {0};
|
port_pin_config_t switchConfig = {0};
|
||||||
switchConfig.pullSelect = kPORT_PullUp;
|
switchConfig.pullSelect = kPORT_PullUp;
|
||||||
switchConfig.mux = kPORT_MuxAsGpio;
|
switchConfig.mux = kPORT_MuxAsGpio;
|
||||||
CLOCK_EnableClock(kCLOCK_PortC);
|
|
||||||
PORT_SetPinConfig(BOARD_SW2_PORT, BOARD_SW2_GPIO_PIN, &switchConfig);
|
PORT_SetPinConfig(BOARD_SW2_PORT, BOARD_SW2_GPIO_PIN, &switchConfig);
|
||||||
|
|
||||||
// Set up SW3.
|
// Set up SW3.
|
||||||
CLOCK_EnableClock(kCLOCK_PortB);
|
|
||||||
PORT_SetPinConfig(BOARD_SW3_PORT, BOARD_SW3_GPIO_PIN, &switchConfig);
|
PORT_SetPinConfig(BOARD_SW3_PORT, BOARD_SW3_GPIO_PIN, &switchConfig);
|
||||||
|
|
||||||
// Init LEDs.
|
// Initialize LEDs.
|
||||||
|
|
||||||
CLOCK_EnableClock(kCLOCK_PortA);
|
|
||||||
CLOCK_EnableClock(kCLOCK_PortD);
|
|
||||||
|
|
||||||
PORT_SetPinMux(BOARD_LED_RED_GPIO_PORT, BOARD_LED_RED_GPIO_PIN, kPORT_MuxAsGpio);
|
PORT_SetPinMux(BOARD_LED_RED_GPIO_PORT, BOARD_LED_RED_GPIO_PIN, kPORT_MuxAsGpio);
|
||||||
PORT_SetPinMux(BOARD_LED_GREEN_GPIO_PORT, BOARD_LED_GREEN_GPIO_PIN, kPORT_MuxAsGpio);
|
PORT_SetPinMux(BOARD_LED_GREEN_GPIO_PORT, BOARD_LED_GREEN_GPIO_PIN, kPORT_MuxAsGpio);
|
||||||
@@ -67,7 +68,19 @@ void BOARD_InitPins(void)
|
|||||||
GPIO_PinInit(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, &led_config);
|
GPIO_PinInit(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, &led_config);
|
||||||
GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &led_config);
|
GPIO_PinInit(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, &led_config);
|
||||||
|
|
||||||
GPIO_SetPinsOutput(BOARD_LED_RED_GPIO, 1U << BOARD_LED_RED_GPIO_PIN);
|
GPIO_SetPinsOutput(BOARD_LED_RED_GPIO, 1 << BOARD_LED_RED_GPIO_PIN);
|
||||||
GPIO_SetPinsOutput(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN);
|
GPIO_SetPinsOutput(BOARD_LED_GREEN_GPIO, 1 << BOARD_LED_GREEN_GPIO_PIN);
|
||||||
GPIO_SetPinsOutput(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN);
|
GPIO_SetPinsOutput(BOARD_LED_BLUE_GPIO, 1 << BOARD_LED_BLUE_GPIO_PIN);
|
||||||
|
|
||||||
|
// Initialize I2C.
|
||||||
|
|
||||||
|
port_pin_config_t pinConfig = {0};
|
||||||
|
pinConfig.pullSelect = kPORT_PullUp;
|
||||||
|
pinConfig.openDrainEnable = kPORT_OpenDrainEnable;
|
||||||
|
|
||||||
|
PORT_SetPinConfig(PORTB, 2, &pinConfig);
|
||||||
|
PORT_SetPinConfig(PORTB, 3, &pinConfig);
|
||||||
|
|
||||||
|
PORT_SetPinMux(PORTB, 2, kPORT_MuxAlt2);
|
||||||
|
PORT_SetPinMux(PORTB, 3, kPORT_MuxAlt2);
|
||||||
}
|
}
|
||||||
|
|||||||
14
right/main.c
14
right/main.c
@@ -1,7 +1,9 @@
|
|||||||
|
#include "fsl_i2c.h"
|
||||||
#include "include/board/clock_config.h"
|
#include "include/board/clock_config.h"
|
||||||
#include "include/board/board.h"
|
#include "include/board/board.h"
|
||||||
#include "include/board/pin_mux.h"
|
#include "include/board/pin_mux.h"
|
||||||
#include "usb_composite_device.h"
|
#include "usb_composite_device.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
void main(void)
|
void main(void)
|
||||||
{
|
{
|
||||||
@@ -9,8 +11,14 @@ void main(void)
|
|||||||
BOARD_BootClockHSRUN();
|
BOARD_BootClockHSRUN();
|
||||||
BOARD_InitDebugConsole();
|
BOARD_InitDebugConsole();
|
||||||
|
|
||||||
USB_DeviceApplicationInit();
|
i2c_master_config_t masterConfig;
|
||||||
|
uint32_t sourceClock;
|
||||||
|
I2C_MasterGetDefaultConfig(&masterConfig);
|
||||||
|
masterConfig.baudRate_Bps = I2C_BAUD_RATE;
|
||||||
|
sourceClock = CLOCK_GetFreq(I2C_MASTER_CLK_SRC);
|
||||||
|
I2C_MasterInit(EXAMPLE_I2C_MASTER_BASEADDR, &masterConfig, sourceClock);
|
||||||
|
|
||||||
while (1) {
|
InitUsb();
|
||||||
}
|
|
||||||
|
while (1);
|
||||||
}
|
}
|
||||||
|
|||||||
9
right/main.h
Normal file
9
right/main.h
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#ifndef __MAIN_H__
|
||||||
|
#define __MAIN_H__
|
||||||
|
|
||||||
|
#define EXAMPLE_I2C_MASTER_BASEADDR I2C0
|
||||||
|
#define I2C_BAUD_RATE 100000
|
||||||
|
#define I2C_MASTER_CLK_SRC I2C0_CLK_SRC
|
||||||
|
#define I2C_DATA_LENGTH 2
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -96,7 +96,7 @@ void USB0_IRQHandler()
|
|||||||
USB_DeviceKhciIsrFunction(UsbCompositeDevice.deviceHandle);
|
USB_DeviceKhciIsrFunction(UsbCompositeDevice.deviceHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
void USB_DeviceApplicationInit()
|
void InitUsb()
|
||||||
{
|
{
|
||||||
uint8_t usbDeviceKhciIrq[] = USB_IRQS;
|
uint8_t usbDeviceKhciIrq[] = USB_IRQS;
|
||||||
uint8_t irqNumber = usbDeviceKhciIrq[CONTROLLER_ID - kUSB_ControllerKhci0];
|
uint8_t irqNumber = usbDeviceKhciIrq[CONTROLLER_ID - kUSB_ControllerKhci0];
|
||||||
|
|||||||
@@ -28,6 +28,6 @@
|
|||||||
|
|
||||||
//Functions:
|
//Functions:
|
||||||
|
|
||||||
extern void USB_DeviceApplicationInit();
|
extern void InitUsb();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
#include "include/board/board.h"
|
#include "include/board/board.h"
|
||||||
#include "usb_composite_device.h"
|
#include "usb_composite_device.h"
|
||||||
#include "usb_interface_mouse.h"
|
#include "usb_interface_mouse.h"
|
||||||
|
#include "fsl_i2c.h"
|
||||||
|
#include "i2c.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
static usb_device_endpoint_struct_t UsbMouseEndpoints[USB_MOUSE_ENDPOINT_COUNT] = {{
|
static usb_device_endpoint_struct_t UsbMouseEndpoints[USB_MOUSE_ENDPOINT_COUNT] = {{
|
||||||
USB_MOUSE_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
|
USB_MOUSE_ENDPOINT_INDEX | (USB_IN << USB_DESCRIPTOR_ENDPOINT_ADDRESS_DIRECTION_SHIFT),
|
||||||
@@ -39,8 +42,19 @@ static usb_mouse_report_t UsbMouseReport;
|
|||||||
static uint8_t scrollCounter = 0;
|
static uint8_t scrollCounter = 0;
|
||||||
static volatile usb_status_t UsbMouseAction(void)
|
static volatile usb_status_t UsbMouseAction(void)
|
||||||
{
|
{
|
||||||
|
uint8_t i2cBuffer[I2C_DATA_LENGTH];
|
||||||
|
i2c_master_transfer_t masterXfer;
|
||||||
|
masterXfer.slaveAddress = LEFT_KEYBOARD_HALF_I2C_ADDRESS_7BIT;
|
||||||
|
masterXfer.direction = kI2C_Read;
|
||||||
|
masterXfer.subaddress = 0;
|
||||||
|
masterXfer.subaddressSize = 0;
|
||||||
|
masterXfer.data = i2cBuffer;
|
||||||
|
masterXfer.dataSize = I2C_DATA_LENGTH;
|
||||||
|
masterXfer.flags = kI2C_TransferDefaultFlag;
|
||||||
|
I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer);
|
||||||
|
|
||||||
UsbMouseReport.buttons = 0;
|
UsbMouseReport.buttons = 0;
|
||||||
UsbMouseReport.x = 0;
|
UsbMouseReport.x = i2cBuffer[1] - i2cBuffer[0];
|
||||||
UsbMouseReport.y = 0;
|
UsbMouseReport.y = 0;
|
||||||
UsbMouseReport.wheelX = 0;
|
UsbMouseReport.wheelX = 0;
|
||||||
UsbMouseReport.wheelY = 0;
|
UsbMouseReport.wheelY = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user