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
	
	 Joel Challis
						Joel Challis