Cześć zwracam się do Was po raz kolejny z prośbą o pomoc.
Zaczniemy może od przerwań.
Na przykładzie timera jak ja to rozumiem.
Timer generuje fale prostokątną i to jaki jest współczynnik wypełnienia tej fali zależy od tego jak skonfigurujemy sobie Timer.
Czyli dzięki temu uzyskamy sygnał powtarzający się co pewien okres i rozumiem, że co ten właśnie okres będzie generowane przerwanie. I o co chodzi tutaj w tym przerwaniu co to znaczy, że jest generowane przerwanie, jak to się dzieje ? rozumiem, że to się dzieje samo ja nic nie muszę robić ?
I teraz tak tutaj w kodzie z jednym moich programów mam metodę która służy właśnie obsłudze przerwania? nie wiem.
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
bardzo proszę o wytłumaczenie tego kodu o co tu chodzi. Powyższy fragment kodu jest z programu który zliczał ile jest naciśnięty przycisk, czyli przypuszczam że to przerwanie jest wywołane jak się ten przycisk puści. Jak to się dzieje, w jaki sposób takie przerwanie jest wywołane, co musi się stać ?
Przeczytałem też że w każdej obsłudze przerwania trzeba kasować pending request bo obsługa przerwania się zapętli chyba (czy w powyzszym kodzie kasowane jest pending request? ).
W kodzie w assemblerze do obsługi przerwań używaliśmy też czegoś takiego: TIM3_IRQHandler i EXTI0_IRQHandler. Nie wiem jakie to ma znaczenie w użyciu.
Część 2 -> banały
Mam taki kod
Kod:
1. CMP R5,#255 ;
2. ITE EQ ;
3. MOVEQ R1,#1<<13
4. MOVNE R1,#1<<29 ;reset jest na 29
5. STR R1,[R0]
1. Porównuje wartość w rejestrze R5 z 255. Jeżeli jest taka sama ustawia się flaga Z = 1
2. Jeżeli Z == 1 to wykona sie linijka 3, jeżeli nie to wykona się linijka 4.
PYTANIE 1. Po co piszę MOV
EQ / MOV
NE ?? Równie dobrze mogę wywalić linijkę nr 2 ( ITE ) i też będzie chyba działać.
PYTANIE 2. Co oznaczają te przesunięcia bitowe w R1 (linijka 3 i 4) po co takie coś się tutaj robi?
PYTANIE 3. Co to znaczy ze na jakimś porcie robimy maskę na jakiejś pozycji. Np zadanie że mam liczbę np 1011 i chcę wyzerować jakaś pozycję -> robię maskę z jedynkami/zerami na tej pozycji którą chce zmienić. Czy byłby ktoś w stanie mi pokazać przykład jak takie zadanko należy zrobić?
PYTANIE 4. Instrukcja STR
Powiedzmy, że mam:
LDR R1,[R0]
STR R1,[R0]
Wiem, że STR zapisuje wartość rejestru w pamięci w przeciwieństwie do LDR który to ładuje wartość rejestru z pamięci.
Tylko, że ja nie rozumiem czym to się różni.