Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 6 kwi 2026, o 17:56


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 
Autor Wiadomość
PostNapisane: 26 lip 2016, o 12:24 
Offline
Użytkownik

Dołączył(a): 18 maja 2015
Posty: 79
Pomógł: 0

Cze

Przedstawię teraz jak ja rozumie flagę przerwania:
No według mnie to sprawa wygląda tak że jak wystąpi przerwanie to zostaje ustawiona flaga danego przerwania i my jak odblokujemy przerwanie to wtedy program skoczy do procedury obsługi przerwania. Ale nie zawsze to jest nam konieczne czasami wystarczy same sprawdzanie flagi a nie skok do procedury obsługi przerwania.

Tak ja to rozumie ale nie wiem czy dobrze więc jak coś to prosiłbym mnie poprawić.

W takim razie moje pytanie brzmi dlaczego mirek napisał tak:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Czyli kasujemy flagę wystąpienia przerwania ale dlaczego odrazu po ustawieniu zezwolenia na przerwania.

Rozumiem dlaczego kasujemy flagę w przerwaniu ale tutaj dlaczego.

Wiem że mirek dobrze to napisał nie chce zarzucać tutaj że to jest źle napisane tylko tego nie rozumiem.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2016, o 12:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 29 sty 2012
Posty: 777
Lokalizacja: Karpicko k. Wolsztyna
Pomógł: 197

Chodzi o to, że flaga INTF0 może już być ustawiona zanim odblokowane zostaną przerwania. I wtedy po odblokowaniu przerwań od razu wykonało by się przerwanie INT0. A to może być w pewnych sytuacjach nie wskazane. Dlatego dla pewności, przed odblokowaniem przerwania INT0, kasowana jest jego flaga. Tym sposobem mamy pewność, że przerwanie wystąpi wtedy gdy na pinie INT0 zmieni się stan.

------------------------ [ Dodano po: 38 minutach ]

Po resecie procesora wszystkie piny są wejściami w stanie wysokiej impedancji. Napięcie na tych pinach może zmieniać się od GND do VCC.

Bity ISCx1 i ISCx0 odpowiedzialne za wybór staniu, który wyzwala przerwania zewnętrzne są wyzerowane, czyli przerwanie jest wyzwalane stanem niskim. Skoro pin INT0 po resecie jest wejściem pływającym to może się zdarzyć, że napięcie na nim w pewnej chwili będzie miało wartość bliską GND. I w tym momencie zostanie ustawiona flaga INTFx.

Może to się stać zanim odblokowane zostaną przerwania zewnętrzne. Dlatego tak jak pisałem wyżej dla pewności dobrze jest tą flagę wyzerować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2016, o 15:58 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

squelch napisał(a):
Wiem że mirek dobrze to napisał nie chce zarzucać tutaj że to jest źle napisane tylko tego nie rozumiem.

Kiedyś mirek źle napisał :(

flagę zerujemy tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a nie taj

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


porównaj i zapamiętaj na zawsze ... to jest szczególnie ważne gdy się korzysta z kilku przerwań

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2016, o 20:36 
Offline
Użytkownik

Dołączył(a): 18 maja 2015
Posty: 79
Pomógł: 0

Ok rozumiem w czym rzecz ale dlaczego mirku tak zerujemy flagę czy mógłbyś coś więcej o tym powiedzieć



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 lip 2016, o 21:22 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

Tak się składa, że już niejednokrotnie o tym i pisałem i mówiłem w wielu kolejnych moich poradnikach ...

w zasadzie to przypominam tylko to co jest w nocie PDF że flagę przerwania w AVR kasuje się poprzez zapis jedynki do bitu flagi ot wszystko

a nie można tego robić z operacją OR bo możemy niechcący źle wpłynąć na inne flagi aktywnych przerwań

Sam sobie rozpisz te dwa przykłady EIFR = (1<<INTF0); i EIFR |= (1<<INTF0); sprawdź co będzie to lepiej zrozumiesz

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2016, o 08:29 
Offline
Użytkownik

Dołączył(a): 18 maja 2015
Posty: 79
Pomógł: 0

Ale tym poleceniem EIFR=(1<<INTF0) wpisujemy do bitów innych flag zera przez co niechcący je ustawiamy i teraz mogą się zgłosić a tą operacją EIFR|=(1<<INTF0) odczytujemy zawartość rejestru i ustawiamy wybraną flagę na zero.
Czy nie powinno się stosować EIFR|=(1<<INTF0)

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2016, o 09:55 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

squelch napisał(a):
Ale tym poleceniem EIFR=(1<<INTF0) wpisujemy do bitów innych flag zera przez co niechcący je ustawiamy


Posłuchaj - jeszcze raz na spokojnie, w punktach

1. w jaki sposób kasujemy flagę przerwania w AVR ? - odpowiedź: wpisując jedynkę

2. co się stanie jeśli nie wiedząc o mechanizmie z pkt 1 niechcący wpiszemy 0 ? - odpowiedź: nic się nie stanie nie WYZERUJEMY flagi bo ją się zeruje jak pkt.1

dlatego jeśli napiszesz

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to nic się nie stanie z bitami do których polecą zera (na tym polega atmelowskie zabezpieczenie zerowania flag)

Za to jeśli użyjesz tu OR !!! to będziesz miał masakrę bo pomyśl sobie jeśli jakaś flaga będzie ustawiona w innym bicie to pisząc

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


będzie to tak

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


czyli jeśli np flaga INTF1 była ustawiona na 1 to ty ją tu (sorki za wyrażenie) zachlastasz ;) czyli ta jedynka też będzie zapisana co będzie oznaczało , że INTF1 też ma się skasować


teraz jaśniej ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2016, o 11:01 
Offline
Użytkownik

Dołączył(a): 18 maja 2015
Posty: 79
Pomógł: 0

Ok teraz zaskoczyłem ale nadal nie dokońca rozumiem
Czyli chodzi oto że flagi mogę zerować poprzez wpisanie do bitu 1 a jak wpisze do danego bitu zero to nic się nie stanie bo przecież nie mogę ot tak wywołać sobie np. przerwania poprzez wpisanie 0.
Cytuj:
czyli jeśli np flaga INTF1 była ustawiona na 1 to ty ją tu (sorki za wyrażenie) zachlastasz

Bit ustawiony na jeden w rejestrze oznacza że flaga nie jest zgłoszona a bit ustawiony na zero że flaga jest ustawiona zgłoszona. W takim razie super odczytam że jeden na pozycji tego bitu INTF1 i dalej będzie jeden na pozycji bitu bo or tak zadziała czyli flaga nadal jest nieustawiona czyli wszystko ładnie zadziała :?:



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2016, o 11:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 paź 2014
Posty: 237
Lokalizacja: Rzeszów
Pomógł: 11

A co w przypadku flagi TXC w rejestrze UCSRA (atmega 8)
Jeśli tam "polecą zera" to wyzerujemy sobie U2X (i MPCM). To możne być już "groźne".
Chyba, że są mechanizmy zabezpieczające, o których nie wiem.

_________________
Mr. Nobody



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2016, o 18:48 
Offline
Użytkownik

Dołączył(a): 18 maja 2015
Posty: 79
Pomógł: 0

Cytuj:
A co w przypadku flagi TXC w rejestrze UCSRA (atmega 8)
Jeśli tam "polecą zera" to wyzerujemy sobie U2X (i MPCM). To możne być już "groźne".


Flagę zerujemy poprzez wpisnie jedynki więc jak polecą zera to nic się nie stanie. Bo przecież nie możesz ustawiać flag sprzętowych aby się wykonywały przerwania



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 27 lip 2016, o 18:54 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

squelch napisał(a):
Flagę zerujemy poprzez wpisnie jedynki więc jak polecą zera to nic się nie stanie.


no w przypadku UCSRA który nie jest tylko rejestrem flag przerwań trzeba podejść nieco inaczej ... zresztą słusznie zauważył wyżej kolega

squeez napisał(a):
Każdy rejestr jest opisany w datasheet i tam zawsze trzeba zacząć, bo lepiej to sprawdzić niż domniemywać. Różnice też mogą być między procesorami dlatego dobry nawyk to czytanie DS.


--------------------

Wcześniej pytałeś o rejest flag EIFR wtedy bez gadania ;) zerujemy flagę tak jak tobie pisałem wcześniej w tym rejestrze

ale już dla UCSRA trzeba podejść inaczej i tu można użyć OR ... A zatem PDF PDF i jeszcze raz PDF

z tym, że warto zapamiętać to podejście do rejestru flag takiego jak EIFR albo TIFR ...

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 11 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot] i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO