diff options
author | Joel Challis <git@zvecr.com> | 2020-07-25 22:50:56 +0100 |
---|---|---|
committer | Drashna Jael're <drashna@live.com> | 2020-08-08 22:52:26 -0700 |
commit | cd0523e7d4b6d6252762cf834d7e7ded88f20da5 (patch) | |
tree | 90d5e6b0f49335f142cf3002234bd80bf4d7a051 /drivers | |
parent | 215fdc39fdf465f51844dbda25c9b1f3b41486b7 (diff) |
Enable OLED support for Teensy 3.2/LC (#7591)
* I2C_TIMEOUT is not defined on arm teensy
* Work round teensy having different ChibiOS config options
* Stash OLED conf files
* update comment
* update comment
* Remove stm32 alias to allow teensy alt mode
format code according to conventions [skip ci]
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/chibios/i2c_master.c | 8 | ||||
-rw-r--r-- | drivers/chibios/i2c_master.h | 9 | ||||
-rw-r--r-- | drivers/oled/oled_driver.c | 10 | ||||
-rw-r--r-- | drivers/oled/oled_driver.h | 4 |
4 files changed, 21 insertions, 10 deletions
diff --git a/drivers/chibios/i2c_master.c b/drivers/chibios/i2c_master.c index ede915fa4a..4bd8e2af76 100644 --- a/drivers/chibios/i2c_master.c +++ b/drivers/chibios/i2c_master.c @@ -32,7 +32,9 @@ static uint8_t i2c_address; static const I2CConfig i2cconfig = { -#ifdef USE_I2CV1 +#if defined(USE_I2CV1_CONTRIB) + I2C1_CLOCK_SPEED, +#elif defined(USE_I2CV1) I2C1_OPMODE, I2C1_CLOCK_SPEED, I2C1_DUTY_CYCLE, @@ -62,8 +64,8 @@ __attribute__((weak)) void i2c_init(void) { chThdSleepMilliseconds(10); #if defined(USE_GPIOV1) - palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN); - palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN); + palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, I2C1_SCL_PAL_MODE); + palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, I2C1_SDA_PAL_MODE); #else palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN); diff --git a/drivers/chibios/i2c_master.h b/drivers/chibios/i2c_master.h index ec36b31eb7..1b08d33ee6 100644 --- a/drivers/chibios/i2c_master.h +++ b/drivers/chibios/i2c_master.h @@ -81,7 +81,14 @@ # define I2C_DRIVER I2CD1 #endif -#ifndef USE_GPIOV1 +#ifdef USE_GPIOV1 +# ifndef I2C1_SCL_PAL_MODE +# define I2C1_SCL_PAL_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN +# endif +# ifndef I2C1_SDA_PAL_MODE +# define I2C1_SDA_PAL_MODE PAL_MODE_STM32_ALTERNATE_OPENDRAIN +# endif +#else // The default PAL alternate modes are used to signal that the pins are used for I2C # ifndef I2C1_SCL_PAL_MODE # define I2C1_SCL_PAL_MODE 4 diff --git a/drivers/oled/oled_driver.c b/drivers/oled/oled_driver.c index 977b701783..f1990567f7 100644 --- a/drivers/oled/oled_driver.c +++ b/drivers/oled/oled_driver.c @@ -82,14 +82,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #define I2C_CMD 0x00 #define I2C_DATA 0x40 #if defined(__AVR__) -// already defined on ARM -# define I2C_TIMEOUT 100 -# define I2C_TRANSMIT_P(data) i2c_transmit_P((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT) +# define I2C_TRANSMIT_P(data) i2c_transmit_P((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT) #else // defined(__AVR__) -# define I2C_TRANSMIT_P(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT) +# define I2C_TRANSMIT_P(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT) #endif // defined(__AVR__) -#define I2C_TRANSMIT(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), I2C_TIMEOUT) -#define I2C_WRITE_REG(mode, data, size) i2c_writeReg((OLED_DISPLAY_ADDRESS << 1), mode, data, size, I2C_TIMEOUT) +#define I2C_TRANSMIT(data) i2c_transmit((OLED_DISPLAY_ADDRESS << 1), &data[0], sizeof(data), OLED_I2C_TIMEOUT) +#define I2C_WRITE_REG(mode, data, size) i2c_writeReg((OLED_DISPLAY_ADDRESS << 1), mode, data, size, OLED_I2C_TIMEOUT) #define HAS_FLAGS(bits, flags) ((bits & flags) == flags) diff --git a/drivers/oled/oled_driver.h b/drivers/oled/oled_driver.h index 5d0184c55d..4e69f8845c 100644 --- a/drivers/oled/oled_driver.h +++ b/drivers/oled/oled_driver.h @@ -150,6 +150,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. # endif #endif +#if !defined(OLED_I2C_TIMEOUT) +# define OLED_I2C_TIMEOUT 100 +#endif + // OLED Rotation enum values are flags typedef enum { OLED_ROTATION_0 = 0, |