Nie wychodzi z przerwania w UART, a timer 0 przestaje działać ? co robić?
['51] nie wychodzi z przerwania po uarcie
From: "Pawel \"O'Pajak\"" <opajak_at_nospam_gazeta.pl>
Subject: ['51] nie wychodzi z przerwania po uarcie
Date: Mon, 13 Mar 2006 16:38:51 +0100
Powitanko,
Pomozcie prosze, bo zaraz ^!#$$! dostane...
Programik, gania sobie w petli, ustawione 2 przerwania: od seriala
(UARTu) i od timera 0. W IP ustawiony priorytet na seriala. I wszystko
fajnie dziala, tzn. timer 0 generuje przerwania jak trzeba, ale jak cos
sie wysle do seriala (czyli nastapi od niego przerwanie), to juz z niego
nie wychodzi, a timer 0 zatrzymuje sie (?). Oczywiscie jest na koncu
obslugi tego przerwania "reti", probowalem nawet w tej obsludze
uruchamiac timer 0 na nowo, a procek sie uparl i juz. Na stos wpycham
PSW i Acc, zdejmuje na koncu, a on dalej uparty *(&&$_at_nospam_! jego mac.
Heeeelp pliiiiz...
Pozdroofka,
Pawel Chorzempa
--
"-Tato, po czym poznać małą szkodliwość społeczną?
-Po wielkiej szkodzie prywatnej" (kopyrajt: S. Mrożek)
******* >>> !!! UWAGA: ODPOWIADAM TYLKO NA MAILE ->:
> pavel(ten_smieszny_znaczek)klub.chip.pl <<<<*******
From: myrcioch <myrcioch_at_nospam_poczta.onet.nie.lubie.smieci.pl>
Subject: Re: ['51] nie wychodzi z przerwania po uarcie
Date: Mon, 13 Mar 2006 17:07:21 +0100
Pawel "O'Pajak" napisal 2006-03-13 16:38:
Programik, gania sobie w petli, ustawione 2 przerwania: od seriala
(UARTu) i od timera 0. W IP ustawiony priorytet na seriala. I wszystko
fajnie dziala, tzn. timer 0 generuje przerwania jak trzeba, ale jak cos
sie wysle do seriala (czyli nastapi od niego przerwanie), to juz z niego
nie wychodzi, a timer 0 zatrzymuje sie (?). Oczywiscie jest na koncu
obslugi tego przerwania "reti", probowalem nawet w tej obsludze
uruchamiac timer 0 na nowo, a procek sie uparl i juz. Na stos wpycham
PSW i Acc, zdejmuje na koncu, a on dalej uparty *(&&$_at_nospam_! jego mac.
Flagę scon.1 (ti) lub scon.0 (ri - jeśli dane idą do procesora) - kasujesz?
Tomek
From: "Pawel \"O'Pajak\"" <opajak_at_nospam_gazeta.pl>
Subject: Re: ['51] nie wychodzi z przerwania po uarcie
Date: Mon, 13 Mar 2006 18:24:42 +0100
Powitanko,
Flagę scon.1 (ti) lub scon.0 (ri - jeśli dane idą do procesora) - kasujesz?
Tak, pierwszym rozkazem, dopiero potem przepisuje sbufa. Ale juz sobie
poradzilem, pomaga odtworzenie TCON, TMOD, PCON, SCON, a wlasciwie
wpisanie ich na nowo. Dziala, tylko teraz musze pokombinowac dlaczego
obsluga tego przerwania modyfikuje SFRy, ktorych nie powinna ruszac i
ktore dokladnie. Albo to wina Bascoma, albo mojej niewiedzy...
Pozdroofka,
Pawel Chorzempa
--
"-Tato, po czym poznać małą szkodliwość społeczną?
-Po wielkiej szkodzie prywatnej" (kopyrajt: S. Mrożek)
******* >>> !!! UWAGA: ODPOWIADAM TYLKO NA MAILE ->:
> pavel(ten_smieszny_znaczek)klub.chip.pl <<<<*******
From: "JJJK" <janusz_karas##_at_nospam_##poczta.onet.pl>
Subject: Re: ['51] nie wychodzi z przerwania po uarcie
Date: Tue, 14 Mar 2006 09:38:46 +0100
Pawel "O'Pajak" <opajak_at_nospam_gazeta.pl> napisał
Powitanko,
Pomozcie prosze, bo zaraz ^!#$$! dostane...
Programik, gania sobie w petli, ustawione 2 przerwania: od seriala (UARTu)
i od timera 0. W IP ustawiony priorytet na seriala. I wszystko fajnie
dziala, tzn. timer 0 generuje przerwania jak trzeba, ale jak cos sie wysle
do seriala (czyli nastapi od niego przerwanie), to juz z niego nie
wychodzi, a timer 0 zatrzymuje sie (?). Oczywiscie jest na koncu obslugi
tego przerwania "reti", probowalem nawet w tej obsludze uruchamiac timer 0
na nowo, a procek sie uparl i juz.
Pawel Chorzempa
A skąd wiesz, że stoi? Z symulatora? Ze sprzętu?
A jaką prodcedurką odbierasz te dane z portu szeregowego?
Nawet w Bascomie mażna to zrobic na kilka sposobów,
z których część nie nadaje się do przerwań.
Wklej trochę kodu, inaczej nie wiadomo co zrobiłeś :)
Pozdrawiam
JJJK
From: "Pawel \"O'Pajak\"" <opajak_at_nospam_gazeta.pl>
Subject: Re: ['51] nie wychodzi z przerwania po uarcie
Date: Tue, 14 Mar 2006 14:47:31 +0100
Powitanko,
A skąd wiesz, że stoi? Z symulatora? Ze sprzętu?
Dochodzenie co robilem w kolejnych etapach jest mozliwe, ale
pracochlonne. Byl taki etap, ze symulator pieknie biegal, a rzeczywisty
uklad po odebraniu bajtu zamyslal sie na wieki. To, ze siedzial w petli
odbioru z RSa wiem z pulapki programowej (cpl p3.7).
A jaką prodcedurką odbierasz te dane z portu szeregowego?
Taka mieszanka bascomowo-assemblerowa:
If Scon.0 = 1 Then
Scon.0 = 0
Lit = Sbuf
End If
Kompiluje sie na cjnz, mov, itd. a tak lepiej widac co jest co.
Jest kilka takich sekwencji przypisujacych sbuf do roznych zmiennych w
zaleznosci od "lit"
Nawet w Bascomie mażna to zrobic na kilka sposobów,
z których część nie nadaje się do przerwań.
Wiem, np. input;-)
Wklej trochę kodu, inaczej nie wiadomo co zrobiłeś :)
Na poczatek trzeba ustawic:
mov PCON.7,#0
MOV SCON, #&H50'1010000
MOV TH1, #&hFD' 253 (9600bps)
MOV TL1, #&hFD' j.w.
mov ie,#&B10010010 'wlaczone: ogolne, od seriala i od T0
mov ip,#&H10 'priorytet od seriala
Natomiast w obsludze interrupta od seriala na koncu trzeba powtorzyc:
MOV SCON, #&H50 i to wystarczy
Za Boga nie wiem dlaczego i dlaczego w terminalu mi po kazdym odebraniu
2 bajtu wyplowa znaczek "|" i cofa kursor (jakies ASCII ponizej 32).
Pozdroofka,
Pawel Chorzempa
--
"-Tato, po czym poznać małą szkodliwość społeczną?
-Po wielkiej szkodzie prywatnej" (kopyrajt: S. Mrożek)
******* >>> !!! UWAGA: ODPOWIADAM TYLKO NA MAILE ->:
> pavel(ten_smieszny_znaczek)klub.chip.pl <<<<*******