v1.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #include "v1.h"
  2. #include "i2cmaster.h"
  3. bool i2c_initialized = 0;
  4. uint8_t mcp23018_status = 0x20;
  5. void matrix_init_kb(void) {
  6. // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md")
  7. TCCR1A = 0b10101001; // set and configure fast PWM
  8. TCCR1B = 0b00001001; // set and configure fast PWM
  9. // unused pins - D4, D5, D7, E6
  10. // set as input with internal pull-ip enabled
  11. DDRD &= ~(1<<5 | 1<<4);
  12. DDRE &= ~(1<<6);
  13. PORTD |= (1<<5 | 1<<4);
  14. PORTE |= (1<<6);
  15. ergodox_blink_all_leds();
  16. matrix_init_user();
  17. }
  18. void ergodox_blink_all_leds(void)
  19. {
  20. ergodox_led_all_off();
  21. ergodox_led_all_set(LED_BRIGHTNESS_HI);
  22. ergodox_right_led_1_on();
  23. _delay_ms(50);
  24. ergodox_right_led_2_on();
  25. _delay_ms(50);
  26. ergodox_right_led_3_on();
  27. _delay_ms(50);
  28. ergodox_right_led_1_off();
  29. _delay_ms(50);
  30. ergodox_right_led_2_off();
  31. _delay_ms(50);
  32. ergodox_right_led_3_off();
  33. //ergodox_led_all_on();
  34. //_delay_ms(333);
  35. ergodox_led_all_off();
  36. }
  37. uint8_t init_mcp23018(void) {
  38. mcp23018_status = 0x20;
  39. // I2C subsystem
  40. // uint8_t sreg_prev;
  41. // sreg_prev=SREG;
  42. // cli();
  43. if (i2c_initialized == 0) {
  44. i2c_init(); // on pins D(1,0)
  45. i2c_initialized++;
  46. _delay_ms(1000);
  47. }
  48. // set pin direction
  49. // - unused : input : 1
  50. // - input : input : 1
  51. // - driving : output : 0
  52. mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
  53. mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out;
  54. mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
  55. mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
  56. i2c_stop();
  57. // set pull-up
  58. // - unused : on : 1
  59. // - input : on : 1
  60. // - driving : off : 0
  61. mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
  62. mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out;
  63. mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
  64. mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
  65. out:
  66. i2c_stop();
  67. // SREG=sreg_prev;
  68. return mcp23018_status;
  69. }