Add ARM I2Cv1 support to i2c_master (#6262)
* Add ARM I2Cv1 support to i2c_master * Add I2Cv1 docs
This commit is contained in:
committed by
Florian Didron
parent
c7dcc83e5e
commit
c08ddb41a6
@@ -33,11 +33,17 @@
|
|||||||
static uint8_t i2c_address;
|
static uint8_t i2c_address;
|
||||||
|
|
||||||
static const I2CConfig i2cconfig = {
|
static const I2CConfig i2cconfig = {
|
||||||
|
#ifdef USE_I2CV1
|
||||||
|
I2C1_OPMODE,
|
||||||
|
I2C1_CLOCK_SPEED,
|
||||||
|
I2C1_DUTY_CYCLE,
|
||||||
|
#else
|
||||||
STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) |
|
STM32_TIMINGR_PRESC(I2C1_TIMINGR_PRESC) |
|
||||||
STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) |
|
STM32_TIMINGR_SCLDEL(I2C1_TIMINGR_SCLDEL) | STM32_TIMINGR_SDADEL(I2C1_TIMINGR_SDADEL) |
|
||||||
STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL),
|
STM32_TIMINGR_SCLH(I2C1_TIMINGR_SCLH) | STM32_TIMINGR_SCLL(I2C1_TIMINGR_SCLL),
|
||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static i2c_status_t chibios_to_qmk(const msg_t* status) {
|
static i2c_status_t chibios_to_qmk(const msg_t* status) {
|
||||||
@@ -61,8 +67,13 @@ void i2c_init(void)
|
|||||||
|
|
||||||
chThdSleepMilliseconds(10);
|
chThdSleepMilliseconds(10);
|
||||||
|
|
||||||
|
#ifdef USE_I2CV1
|
||||||
|
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||||
|
#else
|
||||||
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_ALTERNATE(I2C1_SCL_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
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);
|
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_ALTERNATE(I2C1_SDA_PAL_MODE) | PAL_STM32_OTYPE_OPENDRAIN);
|
||||||
|
#endif
|
||||||
|
|
||||||
//i2cInit(); //This is invoked by halInit() so no need to redo it.
|
//i2cInit(); //This is invoked by halInit() so no need to redo it.
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,10 +22,16 @@
|
|||||||
* Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
|
* Please ensure that HAL_USE_I2C is TRUE in the halconf.h file and that
|
||||||
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file.
|
* STM32_I2C_USE_I2C1 is TRUE in the mcuconf.h file.
|
||||||
*/
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include <hal.h>
|
#include <hal.h>
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L0xx) || defined(STM32L1xx)
|
||||||
|
#define USE_I2CV1
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef I2C1_BANK
|
#ifdef I2C1_BANK
|
||||||
#define I2C1_SCL_BANK I2C1_BANK
|
#define I2C1_SCL_BANK I2C1_BANK
|
||||||
#define I2C1_SDA_BANK I2C1_BANK
|
#define I2C1_SDA_BANK I2C1_BANK
|
||||||
@@ -46,6 +52,17 @@
|
|||||||
#define I2C1_SDA 7
|
#define I2C1_SDA 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_I2CV1
|
||||||
|
#ifndef I2C1_OPMODE
|
||||||
|
#define I2C1_OPMODE OPMODE_I2C
|
||||||
|
#endif
|
||||||
|
#ifndef I2C1_CLOCK_SPEED
|
||||||
|
#define I2C1_CLOCK_SPEED 100000 /* 400000 */
|
||||||
|
#endif
|
||||||
|
#ifndef I2C1_DUTY_CYCLE
|
||||||
|
#define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
// The default PAL alternate modes are used to signal that the pins are used for I2C
|
// The default PAL alternate modes are used to signal that the pins are used for I2C
|
||||||
#ifndef I2C1_SCL_PAL_MODE
|
#ifndef I2C1_SCL_PAL_MODE
|
||||||
#define I2C1_SCL_PAL_MODE 4
|
#define I2C1_SCL_PAL_MODE 4
|
||||||
@@ -71,6 +88,7 @@
|
|||||||
#ifndef I2C1_TIMINGR_SCLL
|
#ifndef I2C1_TIMINGR_SCLL
|
||||||
#define I2C1_TIMINGR_SCLL 21U
|
#define I2C1_TIMINGR_SCLL 21U
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef I2C_DRIVER
|
#ifndef I2C_DRIVER
|
||||||
#define I2C_DRIVER I2CD1
|
#define I2C_DRIVER I2CD1
|
||||||
|
|||||||
Reference in New Issue
Block a user