frenchdev.c (2599B)
1 #include "frenchdev.h" 2 3 extern inline void frenchdev_board_led_on(void); 4 extern inline void frenchdev_led_1_on(void); 5 extern inline void frenchdev_led_2_on(void); 6 extern inline void frenchdev_led_3_on(void); 7 8 extern inline void frenchdev_board_led_off(void); 9 extern inline void frenchdev_led_1_off(void); 10 extern inline void frenchdev_led_2_off(void); 11 extern inline void frenchdev_led_3_off(void); 12 13 extern inline void frenchdev_led_all_on(void); 14 extern inline void frenchdev_led_all_off(void); 15 16 extern inline void frenchdev_led_1_set(uint8_t n); 17 extern inline void frenchdev_led_2_set(uint8_t n); 18 extern inline void frenchdev_led_3_set(uint8_t n); 19 extern inline void frenchdev_led_set(uint8_t led, uint8_t n); 20 21 extern inline void frenchdev_led_all_set(uint8_t n); 22 23 bool i2c_initialized = 0; 24 uint8_t mcp23018_status = 0x20; 25 26 void matrix_init_kb(void) { 27 // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md") 28 TCCR1A = 0b10101001; // set and configure fast PWM 29 TCCR1B = 0b00001001; // set and configure fast PWM 30 31 32 33 // unused pins - D4, D5, E6 34 // set as input with internal pull-ip enabled 35 gpio_set_pin_input_high(D4); 36 gpio_set_pin_input_high(D5); 37 gpio_set_pin_input_high(E6); 38 39 frenchdev_blink_all_leds(); 40 frenchdev_blink_all_leds(); 41 frenchdev_blink_all_leds(); 42 frenchdev_blink_all_leds(); 43 44 matrix_init_user(); 45 } 46 47 void frenchdev_blink_all_leds(void) 48 { 49 frenchdev_led_all_off(); 50 frenchdev_led_all_set(LED_BRIGHTNESS_HI); 51 frenchdev_led_1_on(); 52 wait_ms(50); 53 frenchdev_led_2_on(); 54 wait_ms(50); 55 frenchdev_led_3_on(); 56 wait_ms(50); 57 frenchdev_led_1_off(); 58 wait_ms(50); 59 frenchdev_led_2_off(); 60 wait_ms(50); 61 frenchdev_led_3_off(); 62 frenchdev_led_all_off(); 63 } 64 65 uint8_t init_mcp23018(void) { 66 mcp23018_status = 0x20; 67 68 // I2C subsystem 69 70 // uint8_t sreg_prev; 71 // sreg_prev=SREG; 72 // cli(); 73 if (i2c_initialized == 0) { 74 i2c_init(); // on pins D(1,0) 75 i2c_initialized = true;; 76 wait_ms(1000); 77 } 78 79 // set pin direction 80 // - unused : input : 1 81 // - input : input : 1 82 // - driving : output : 0 83 uint8_t data[] = {0b00000000, 0b00111111}; 84 mcp23018_status = i2c_write_register(I2C_ADDR, IODIRA, data, sizeof(data), I2C_TIMEOUT); 85 86 if (!mcp23018_status) { 87 // set pull-up 88 // - unused : on : 1 89 // - input : on : 1 90 // - driving : off : 0 91 mcp23018_status = i2c_write_register(I2C_ADDR, GPPUA, data, sizeof(data), I2C_TIMEOUT); 92 } 93 94 // SREG=sreg_prev; 95 96 return mcp23018_status; 97 }