Paweł
Guest
Sat Feb 14, 2009 10:53 pm
Witam !
W celach dydaktycznych bawię się procesorem AT91SAMS.
Nie bardzo rozumiem dwóch spraw związanych z przerwaniami.
1. Włączyłem przerwanie od Timera.
W rejestrze AIC_SMR ustawiłem SRCTYPE na "High level Sensitive"
Przerwanie działa prawidłowo. Ale tylko jeśli w nim odczytuję rejestr
TC0_SR. Jeśli tego nie robię to przerwanie wykonuje się w kółko tzn. nie
wykonuje się program główny. Z jakiego powodu tak się dzieje ?
2. Włączyłem przerwanie od PIOA.
W rejestrze AIC_SMR ustawiłem SRCTYPE na "High level Sensitive"
Wszytko działa prawidłwo.
Zmieniam SRCTYPE na "Positive edge triggered". Podobnie jak w przypadku
Timera przerwanie wykonuje się w kółko co blokuje procesor.
Dzieje się tak nawet gdy w przerwaniu wpisuję do PIOA__IDR same jedynki.
Czyli wyłączam przerwania od PIOA. Z jakiego powodu się tak dzieje ?
Paweł
zbyszek
Guest
Sun Feb 15, 2009 7:41 pm
Quote:
1. Włączyłem przerwanie od Timera.
W rejestrze AIC_SMR ustawiłem SRCTYPE na "High level Sensitive"
Przerwanie działa prawidłowo. Ale tylko jeśli w nim odczytuję rejestr
TC0_SR. Jeśli tego nie robię to przerwanie wykonuje się w kółko tzn. nie
wykonuje się program główny. Z jakiego powodu tak się dzieje ?
Nie znam akurat tego procka ale ogólnie w przerwaniu sprzętowym musisz
potwierdzić jego przyjęcie, wyzerować jakąś flagę, inaczej zgłasza się w
kółko
Quote:
2. Włączyłem przerwanie od PIOA.
W rejestrze AIC_SMR ustawiłem SRCTYPE na "High level Sensitive"
Wszytko działa prawidłwo.
A jesteś pewien że przerwanie obsługujesz tylko raz? Może kręcisz się w
przerwaniu aż nie zniknie zewnętrzny sygnał.
Quote:
Zmieniam SRCTYPE na "Positive edge triggered". Podobnie jak w przypadku
Timera przerwanie wykonuje się w kółko co blokuje procesor.
pewnie to co w 1. ->zbocze ustawia jakąś flagę
Quote:
Dzieje się tak nawet gdy w przerwaniu wpisuję do PIOA__IDR same jedynki.
Czyli wyłączam przerwania od PIOA. Z jakiego powodu się tak dzieje ?
- czyli nowe już nie przyjdzie ale aktualne musisz do końca obsłużyć.
zbyszek