Obsługa przerwania SysTick ogranicza się do cyklicznego przełączania aktualnie wybranego filtru oraz odczytaniu zliczonych impulsów z rejestru licznika. Poniżej przedstawiono fragment kodu, który wykonywany jest w czasie wybrania jednego filtru. Analogiczne działanie realizowane jest przy pozostałych filtrach. Program do przełączania stanu pracy realizowany jest przy wykorzystaniu funkcji case.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
void SysTick_Handler(void) { extern uint16_t licznik; extern uint16_t FreqRed; extern uint16_t FreqGreen; extern uint16_t FreqBlue; extern uint16_t FreqClear; switch(licznik) { case 7 : //odczyt wartości licznika FreqGreen = TIM_GetCounter(TIM2); //przypisanie nowej wartości do zmiennej licznik = 0; break; case 6 : //zmiana wybranego filtru światła układu TCS3200D TCS3200_DISABLE; TCS3200_Green; TCS3200_ENABLE; //przypisanie nowej wartości do zmiennej licznik = 7; break; ... } //wyzerowanie licznika TIM_SetCounter(TIM2,0); } |
Na początku obsługi przerwania mamy informację na temat wcześniej zadeklarowanych zmiennych, ich deklaracja została wykonana w pliku main.c. Na końcu obsługi przerwania mamy polecenie zerujące licznik TIM2.
Następnie w pętli głównej programu realizowana jest inicjalizacja wyświetlacza oraz wypełnieni go odpowiednią zawartością. Po tym działaniu program przechodzi do nieskończonej pętli, w czasie jej trwania przeprowadzana jest aktualizacja wartości na wyświetlaczu.
Mariusz Dziębowski