4 bool i2c_initialized = 0;
5 uint8_t mcp23018_status = 0x20;
7 void matrix_init_kb(void) {
8 // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
9 TCCR1A = 0b10101001; // set and configure fast PWM
10 TCCR1B = 0b00001001; // set and configure fast PWM
14 // unused pins - D4, D5, D7, E6
15 // set as input with internal pull-ip enabled
16 DDRD &= ~(1<<5 | 1<<4);
18 PORTD |= (1<<5 | 1<<4);
21 frenchdev_blink_all_leds();
22 frenchdev_blink_all_leds();
23 frenchdev_blink_all_leds();
24 frenchdev_blink_all_leds();
29 void frenchdev_blink_all_leds(void)
31 frenchdev_led_all_off();
32 frenchdev_led_all_set(LED_BRIGHTNESS_HI);
39 frenchdev_led_1_off();
41 frenchdev_led_2_off();
43 frenchdev_led_3_off();
44 frenchdev_led_all_off();
47 uint8_t init_mcp23018(void) {
48 mcp23018_status = 0x20;
55 if (i2c_initialized == 0) {
56 i2c_init(); // on pins D(1,0)
62 // - unused : input : 1
63 // - input : input : 1
64 // - driving : output : 0
65 mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
66 mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out;
67 mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
68 mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
74 // - driving : off : 0
75 mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
76 mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out;
77 mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
78 mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
85 return mcp23018_status;