diff --git a/common/led_matrix.c b/common/led_matrix.c index 2a1e83d2..77e52e48 100644 --- a/common/led_matrix.c +++ b/common/led_matrix.c @@ -18,3 +18,32 @@ along with this program. If not, see . #include #include #include "led_matrix.h" + +#define LED_MATRIX_TIMER_TOP F_CPU/(256*64)/LED_MATRIX_ROWS + +void led_matrix_init(void) +{ + /* Timer1 setup */ + /* CTC mode */ + TCCR1B |= (1<> 8) & 0xFF; + OCR1AL = LED_MATRIX_TIMER_TOP & 0xFF; + SREG = sreg; +} + +void led_matrix_enable(void) +{ + /* Enable Compare Match Interrupt */ + TIMSK1 |= _BV(OCIE1A); +} + +void led_matrix_disable(void) +{ + /* Disable Compare Match Interrupt */ + TIMSK1 &= ~_BV(OCIE1A); +} diff --git a/common/led_matrix.h b/common/led_matrix.h index f683ff09..eb242446 100644 --- a/common/led_matrix.h +++ b/common/led_matrix.h @@ -31,11 +31,17 @@ typedef struct { uint8_t value; } led_matrix_element_t; +#ifdef LED_MATRIX_ENABLE uint8_t led_matrix_rows(void); uint8_t led_matrix_cols(void); void led_matrix_init(void); void led_matrix_enable(void); void led_matrix_disable(void); uint8_t led_matrix_scan(void); +#else +#define led_matrix_rows() +#define led_matrix_cols() +#define led_matrix_init() +#endif #endif