diff --git a/include/i2c.h b/include/i2c.h index 4f32d0d..48c5de8 100644 --- a/include/i2c.h +++ b/include/i2c.h @@ -3,4 +3,8 @@ #define LEFT_KEYBOARD_HALF_I2C_ADDRESS_7BIT 8 +// The 7-bit I2C addresses of the IS31FL3731 LED driver range from 0x74 to 0x77 +#define LEFT_LED_DRIVER_ADDRESS_7BIT 0b1110100 +#define RIGHT_LED_DRIVER_ADDRESS_7BIT 0b1110111 + #endif diff --git a/right/include/board/pin_mux.c b/right/include/board/pin_mux.c index bb9be51..bb00488 100644 --- a/right/include/board/pin_mux.c +++ b/right/include/board/pin_mux.c @@ -36,9 +36,9 @@ void BOARD_InitPins(void) { // Ungate ports. CLOCK_EnableClock(kCLOCK_PortA); // LEDs - CLOCK_EnableClock(kCLOCK_PortB); // SW3, I2C + CLOCK_EnableClock(kCLOCK_PortB); // SW3 CLOCK_EnableClock(kCLOCK_PortC); // SW2 - CLOCK_EnableClock(kCLOCK_PortD); // LEDs + CLOCK_EnableClock(kCLOCK_PortD); // LEDs, I2C CLOCK_EnableClock(kCLOCK_PortE); // UART1 for OpenSDA // Set up UART1 for OpenSDA. @@ -78,9 +78,9 @@ void BOARD_InitPins(void) pinConfig.pullSelect = kPORT_PullUp; pinConfig.openDrainEnable = kPORT_OpenDrainEnable; - PORT_SetPinConfig(PORTB, 2, &pinConfig); - PORT_SetPinConfig(PORTB, 3, &pinConfig); + PORT_SetPinConfig(PORTD, 2, &pinConfig); + PORT_SetPinConfig(PORTD, 3, &pinConfig); - PORT_SetPinMux(PORTB, 2, kPORT_MuxAlt2); - PORT_SetPinMux(PORTB, 3, kPORT_MuxAlt2); + PORT_SetPinMux(PORTD, 2, kPORT_MuxAlt7); + PORT_SetPinMux(PORTD, 3, kPORT_MuxAlt7); } diff --git a/right/main.c b/right/main.c index d650b67..8ba0722 100644 --- a/right/main.c +++ b/right/main.c @@ -3,10 +3,63 @@ #include "include/board/board.h" #include "include/board/pin_mux.h" #include "usb_composite_device.h" +#include "i2c.h" #include "main.h" +#include "fsl_common.h" +#include "fsl_port.h" -void main(void) +void tx(uint8_t txBuffer[], uint8_t size) { + i2c_master_transfer_t masterXfer; + masterXfer.slaveAddress = LEFT_LED_DRIVER_ADDRESS_7BIT; + masterXfer.direction = kI2C_Write; + masterXfer.subaddress = 0; + masterXfer.subaddressSize = 0; + masterXfer.data = txBuffer; + masterXfer.dataSize = size; + masterXfer.flags = kI2C_TransferDefaultFlag; + I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); + masterXfer.slaveAddress = RIGHT_LED_DRIVER_ADDRESS_7BIT; + I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); +} + +void write(uint8_t reg, uint8_t val) +{ + uint8_t txBuffer[] = {0, 0}; + txBuffer[0] = reg; + txBuffer[1] = val; + tx(txBuffer, sizeof(txBuffer)); +} + +void InitLedDisplay() +{ + PORT_SetPinMux(PORTA, 2U, kPORT_MuxAsGpio); + + gpio_pin_config_t led_config = { + .pinDirection = kGPIO_DigitalOutput, + .outputLogic = 0, + }; + + GPIO_PinInit(GPIOA, 2U, &led_config); + GPIO_SetPinsOutput(GPIOA, 0 << 2U); + + write(0xfd, 0x0b); // point to page 9 + write(0x0a, 0x01); // set shutdown mode to normal + write(0xfd, 0x00); // point to page 0 + + uint8_t i; + for (i=0x00; i<=0x11; i++) { + write(i, 0xff); + } + for (i=0x12; i<=0x23; i++) { + write(i, 0x00); + } + for (i=0x24; i<=0xb3; i++) { + write(i, 0xff); + } +} + +void main() { BOARD_InitPins(); BOARD_BootClockRUN(); BOARD_InitDebugConsole(); @@ -18,6 +71,7 @@ void main(void) sourceClock = CLOCK_GetFreq(I2C_MASTER_CLK_SRC); I2C_MasterInit(EXAMPLE_I2C_MASTER_BASEADDR, &masterConfig, sourceClock); + InitLedDisplay(); InitUsb(); while (1); diff --git a/right/usb_interface_mouse.c b/right/usb_interface_mouse.c index ffc9c66..24a2c5d 100644 --- a/right/usb_interface_mouse.c +++ b/right/usb_interface_mouse.c @@ -42,7 +42,7 @@ static usb_mouse_report_t UsbMouseReport; static uint8_t scrollCounter = 0; static volatile usb_status_t UsbMouseAction(void) { - uint8_t i2cBuffer[I2C_DATA_LENGTH]; +/* uint8_t i2cBuffer[I2C_DATA_LENGTH]; i2c_master_transfer_t masterXfer; masterXfer.slaveAddress = LEFT_KEYBOARD_HALF_I2C_ADDRESS_7BIT; masterXfer.direction = kI2C_Read; @@ -52,7 +52,7 @@ static volatile usb_status_t UsbMouseAction(void) masterXfer.dataSize = I2C_DATA_LENGTH; masterXfer.flags = kI2C_TransferDefaultFlag; I2C_MasterTransferBlocking(EXAMPLE_I2C_MASTER_BASEADDR, &masterXfer); - +*/ UsbMouseReport.buttons = 0; UsbMouseReport.x = 0;//i2cBuffer[1] - i2cBuffer[0]; UsbMouseReport.y = 0;