|
|
|
@ -66,6 +66,30 @@ uint8_t matrix_cols(void) { |
|
|
|
|
return MATRIX_COLS; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void matrix_power_up(void) { |
|
|
|
|
#if DIODE_DIRECTION == COL2ROW |
|
|
|
|
for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { |
|
|
|
|
/* DDRxn */ |
|
|
|
|
_SFR_IO8(row_pins[r].input_addr + 1) |= _BV(row_pins[r].bit); |
|
|
|
|
toggle_row(r); |
|
|
|
|
} |
|
|
|
|
for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { |
|
|
|
|
/* PORTxn */ |
|
|
|
|
_SFR_IO8(col_pins[c].input_addr + 2) |= _BV(col_pins[c].bit); |
|
|
|
|
} |
|
|
|
|
#else |
|
|
|
|
for (int8_t c = MATRIX_COLS - 1; c >= 0; --c) { |
|
|
|
|
/* DDRxn */ |
|
|
|
|
_SFR_IO8(col_pins[c].input_addr + 1) |= _BV(col_pins[c].bit); |
|
|
|
|
toggle_col(c); |
|
|
|
|
} |
|
|
|
|
for (int8_t r = MATRIX_ROWS - 1; r >= 0; --r) { |
|
|
|
|
/* PORTxn */ |
|
|
|
|
_SFR_IO8(row_pins[r].input_addr + 2) |= _BV(row_pins[r].bit); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void matrix_init(void) { |
|
|
|
|
/* frees PORTF by setting the JTD bit twice within four cycles */ |
|
|
|
|
#ifdef __AVR_ATmega32U4__ |
|
|
|
|