From 6f6ab261e6bf44c49efedee7ebb769746ca70df7 Mon Sep 17 00:00:00 2001 From: MechMerlin <30334081+mechmerlin@users.noreply.github.com> Date: Thu, 28 Mar 2019 12:52:57 -0700 Subject: [PATCH] [Keyboard] revert back to the old custom i2c code for bmc (#5501) --- keyboards/exclusive/e6v2/bmc/bmc.c | 4 +- keyboards/exclusive/e6v2/bmc/i2c.c | 106 ++++++++++++++++++++++++++ keyboards/exclusive/e6v2/bmc/i2c.h | 24 ++++++ keyboards/exclusive/e6v2/bmc/rules.mk | 2 +- 4 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 keyboards/exclusive/e6v2/bmc/i2c.c create mode 100644 keyboards/exclusive/e6v2/bmc/i2c.h diff --git a/keyboards/exclusive/e6v2/bmc/bmc.c b/keyboards/exclusive/e6v2/bmc/bmc.c index 257b68b8b4..e3dd244c51 100644 --- a/keyboards/exclusive/e6v2/bmc/bmc.c +++ b/keyboards/exclusive/e6v2/bmc/bmc.c @@ -15,7 +15,7 @@ */ #include "bmc.h" #include "rgblight.h" -#include "i2c_master.h" +#include "i2c.h" void matrix_init_kb(void) { // put your keyboard start-up code here @@ -57,7 +57,7 @@ void rgblight_set(void) { } i2c_init(); - i2c_transmit(0xb0, (uint8_t*)led, 3 * RGBLED_NUM, 100); + i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM); } #endif diff --git a/keyboards/exclusive/e6v2/bmc/i2c.c b/keyboards/exclusive/e6v2/bmc/i2c.c new file mode 100644 index 0000000000..801242e0d0 --- /dev/null +++ b/keyboards/exclusive/e6v2/bmc/i2c.c @@ -0,0 +1,106 @@ +/* +Copyright 2016 Luiz Ribeiro + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +// Please do not modify this file + +#include +#include + +#include "i2c.h" + +void i2c_set_bitrate(uint16_t bitrate_khz) { + uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz); + if (bitrate_div >= 16) { + bitrate_div = (bitrate_div - 16) / 2; + } + TWBR = bitrate_div; +} + +void i2c_init(void) { + // set pull-up resistors on I2C bus pins + PORTC |= 0b11; + + i2c_set_bitrate(400); + + // enable TWI (two-wire interface) + TWCR |= (1 << TWEN); + + // enable TWI interrupt and slave address ACK + TWCR |= (1 << TWIE); + TWCR |= (1 << TWEA); +} + +uint8_t i2c_start(uint8_t address) { + // reset TWI control register + TWCR = 0; + + // begin transmission and wait for it to end + TWCR = (1< + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +// Please do not modify this file + +#pragma once + +void i2c_init(void); +void i2c_set_bitrate(uint16_t bitrate_khz); +uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length); \ No newline at end of file diff --git a/keyboards/exclusive/e6v2/bmc/rules.mk b/keyboards/exclusive/e6v2/bmc/rules.mk index 59f98e6f4b..7c3e16b154 100644 --- a/keyboards/exclusive/e6v2/bmc/rules.mk +++ b/keyboards/exclusive/e6v2/bmc/rules.mk @@ -85,6 +85,6 @@ AUDIO_ENABLE = no # Audio output on port C6 FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) -SRC += i2c_master.c +SRC += i2c.c PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex