2
0

frenchdev.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "frenchdev.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. frenchdev_blink_all_leds();
  16. frenchdev_blink_all_leds();
  17. frenchdev_blink_all_leds();
  18. frenchdev_blink_all_leds();
  19. matrix_init_user();
  20. }
  21. void frenchdev_blink_all_leds(void)
  22. {
  23. frenchdev_led_all_off();
  24. frenchdev_led_all_set(LED_BRIGHTNESS_HI);
  25. frenchdev_led_1_on();
  26. _delay_ms(50);
  27. frenchdev_led_2_on();
  28. _delay_ms(50);
  29. frenchdev_led_3_on();
  30. _delay_ms(50);
  31. frenchdev_led_1_off();
  32. _delay_ms(50);
  33. frenchdev_led_2_off();
  34. _delay_ms(50);
  35. frenchdev_led_3_off();
  36. frenchdev_led_all_off();
  37. }
  38. uint8_t init_mcp23018(void) {
  39. mcp23018_status = 0x20;
  40. // I2C subsystem
  41. // uint8_t sreg_prev;
  42. // sreg_prev=SREG;
  43. // cli();
  44. if (i2c_initialized == 0) {
  45. i2c_init(); // on pins D(1,0)
  46. i2c_initialized++;
  47. _delay_ms(1000);
  48. }
  49. // set pin direction
  50. // - unused : input : 1
  51. // - input : input : 1
  52. // - driving : output : 0
  53. mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
  54. mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out;
  55. mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
  56. mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
  57. i2c_stop();
  58. // set pull-up
  59. // - unused : on : 1
  60. // - input : on : 1
  61. // - driving : off : 0
  62. mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out;
  63. mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out;
  64. mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out;
  65. mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out;
  66. out:
  67. i2c_stop();
  68. // SREG=sreg_prev;
  69. return mcp23018_status;
  70. }