forked from mirrors/qmk_userspace
		
	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
This commit is contained in:
		
					parent
					
						
							
								db540e2832
							
						
					
				
			
			
				commit
				
					
						d91987ab9a
					
				
			
		
					 11 changed files with 54 additions and 12 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,3 +22,9 @@
 | 
			
		|||
#define MATRIX_COL_PINS { D5 }
 | 
			
		||||
#define MATRIX_ROW_PINS { B2 }
 | 
			
		||||
#define UNUSED_PINS
 | 
			
		||||
 | 
			
		||||
// i2c_master defines
 | 
			
		||||
#define I2C1_SCL 0 // A2 on pinout = B0
 | 
			
		||||
#define I2C1_SDA 1 // A3 on pinout = B1
 | 
			
		||||
#define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
 | 
			
		||||
#define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,7 @@
 | 
			
		|||
 * @brief   Enables the I2C subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_I2C                         FALSE
 | 
			
		||||
#define HAL_USE_I2C                         TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,4 +42,10 @@
 | 
			
		|||
 *   5 for Teensy 3.x */
 | 
			
		||||
#define KINETIS_USB_USB0_IRQ_PRIORITY         5
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * I2C driver settings
 | 
			
		||||
 */
 | 
			
		||||
#define KINETIS_I2C_USE_I2C0                TRUE
 | 
			
		||||
#define KINETIS_I2C_I2C0_PRIORITY           4
 | 
			
		||||
 | 
			
		||||
#endif /* _MCUCONF_H_ */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,3 +22,9 @@
 | 
			
		|||
#define MATRIX_COL_PINS { D5 }
 | 
			
		||||
#define MATRIX_ROW_PINS { B2 }
 | 
			
		||||
#define UNUSED_PINS
 | 
			
		||||
 | 
			
		||||
// i2c_master defines
 | 
			
		||||
#define I2C1_SCL 0 // A2 on pinout = B0
 | 
			
		||||
#define I2C1_SDA 1 // A3 on pinout = B1
 | 
			
		||||
#define I2C1_SCL_PAL_MODE PAL_MODE_ALTERNATIVE_2
 | 
			
		||||
#define I2C1_SDA_PAL_MODE PAL_MODE_ALTERNATIVE_2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,7 +79,7 @@
 | 
			
		|||
 * @brief   Enables the I2C subsystem.
 | 
			
		||||
 */
 | 
			
		||||
#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
 | 
			
		||||
#define HAL_USE_I2C                         FALSE
 | 
			
		||||
#define HAL_USE_I2C                         TRUE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,4 +42,10 @@
 | 
			
		|||
 *   5 for Teensy 3.x */
 | 
			
		||||
#define KINETIS_USB_USB0_IRQ_PRIORITY         2
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * I2C driver settings
 | 
			
		||||
 */
 | 
			
		||||
#define KINETIS_I2C_USE_I2C0                TRUE
 | 
			
		||||
#define KINETIS_I2C_I2C0_PRIORITY           4
 | 
			
		||||
 | 
			
		||||
#endif /* _MCUCONF_H_ */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,3 +22,10 @@
 | 
			
		|||
#if defined(STM32F1XX) || defined(STM32F2XX) || defined(STM32F4XX) || defined(STM32L1XX)
 | 
			
		||||
#    define USE_I2CV1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// teensy
 | 
			
		||||
#if defined(K20x) ||  defined(KL2x)
 | 
			
		||||
#    define USE_I2CV1
 | 
			
		||||
#    define USE_I2CV1_CONTRIB // for some reason a bunch of ChibiOS-Contrib boards only have clock_speed
 | 
			
		||||
#    define USE_GPIOV1
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue