Problem z obsługa UART [asembler]

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
Matrix86
-
Posty: 8
Rejestracja: 07 mar 2008, 13:50
Lokalizacja: Nowy Sącz

Problem z obsługa UART [asembler]

Post autor: Matrix86 » 23 cze 2008, 13:09

Witam Wszystkich

Mam taki o to problem ..napisałem program w asemblerze do obsługi interfejsu UART (atmega32) i wszystko byłoby ok, gdyby nie problem, który udało mi się wychwycić podczas symulacji w AVR STUDIO 4.13. Problem polega na tym że po sygnalizacji że w rej. UDR pojawił się znak..rozpoczyna się procedura przerwania odbierająca ten znak ale zanim zdążę ten znak odebrać zostanie on wyzerowany tzn. przed odebraniem realizowanym instrukcją: IN ACC,UDR rejestr UDR zostaje wyzerowany..nie wiem dlaczego tak się dzieje. Proszę o pomoc.
Program zamieściłem w załączniku.

Więcej informacji znajduje się też pod linkiem->
https://forum.elportal.pl/viewtopic.php ... ff88b95c2c

`
Załączniki
uart2oki.rar
(3.36 KiB) Pobrany 548 razy

ZbeeGin

Post autor: ZbeeGin » 23 cze 2008, 17:50

Takie są niestety uroki programowej symulacji. Da się to obejść modyfikując ręcznie rejestr do którego trafia zawartość UDR. Wystarczy ustawić pułapkę po instrukcji IN i wklepywać wartości.

Może Ci pomóc sprytny programik HAPSIM ( http://www.helmix.at/hapsim/ ), który podobno potrafi podsyłać dane do symulatora z mini terminala. Nie testowałem jednak tego rozwiązania.

Z ostatniej chwili. Tak, działa. Tylko strasznie wolno a reakcja jest dość opóźniona.

Matrix86
-
Posty: 8
Rejestracja: 07 mar 2008, 13:50
Lokalizacja: Nowy Sącz

Post autor: Matrix86 » 24 cze 2008, 9:52

No i właśnie tak zrobiłem..uruchomiłem debuggera i wybrałem krokowe uruchamianie,gdy program przeszedł opcje określenia stosu, wpisałem ręcznie jakaś daną (znak pisarski) do rejestru UDR w USART oraz ustawiłem znacznik RXC w rejestrze sterującym UCSRA.
Program w następnym kroku przechodzi do obsługi przerwania USARTRXDInterrupt czyli odbiornika USART. Co ciekawe co zauważyłem i znalazło to również potwierdzenie w praktyce (bo dioda do sygnalizacji odbioru danych mi świeci w układzie), zaraz po przejściu do procedury przerwania USART dane wpisane ręcznie do UDR się kasują, po prostu zerują i to zaraz po wykonywaniu makroinstrukcji pushf oraz pushz. Musze wpisywać je jeszcze raz do UDR i dokładnie przed odczytem z tego rejestru (IN ACC,UDR). Czy to jest normalne? Bo według mnie tak nie powinno być. Dane powinno się zachowac do momentu odczytu, czy mam racje? A może coś schrzaniłem podczas inicjacji interfejsu USART? Może niewłaściwe wartości wpisałem do rej. sterujących UCSRA-C albo coś zgubiłem? Sprawdzałem to kilka razy i nie znalazłem błędu.

ZbeeGin

Post autor: ZbeeGin » 24 cze 2008, 17:36

Widzisz. Nie przeczytałeś dokładnie mojego poprzedniego posta. Zostało to tam wyjaśnione.
Nie tylko Ty masz taki problem - na forum AVR Freaks także był poruszony ten problem. Dlatego padła propozycja skorzystanie z HAPSIM.

Uruchomiłem HAPSIMA, połączył się z AVR Studio, wpisuje on do UDR dane, które się NIE KASUJĄ podczas symulacji. I odczyt jest poprawny.

Matrix86
-
Posty: 8
Rejestracja: 07 mar 2008, 13:50
Lokalizacja: Nowy Sącz

Post autor: Matrix86 » 24 cze 2008, 21:56

Przepraszam Cie Kolego ZbeeGin, ale chyba nie bardzo się rozumiemy.
Chce rozwiązać problem w którym na wyświetlaczu nic mi się nie wyświetla pomimo tego że wysyłam do procka łańcuch do wyświetlenia. Sądziłem że przyczyna tkwi właśnie w tym że dane w UDR mi się kasują. Dzięki za odpowiedż...ale czy mam rozumiec że to jest wina AVR Studio? A nie mojego programu?

[ Dodano: 2008-06-24, 22:58 ]
"...Odczyt był poprawny..." aha czyli muszę szukać problemu gdzie indziej.. :sad:

ZbeeGin

Post autor: ZbeeGin » 25 cze 2008, 17:28

Matrix86 pisze:Chce rozwiązać problem w którym na wyświetlaczu nic mi się nie wyświetla pomimo tego że wysyłam do procka łańcuch do wyświetlenia.
Pokazałeś fragment programu - w dodatku zaczerpnięty z książki kol. Gawła. Zatem część napisana przez niego działa na 100%. Przedstaw całość prgramu to wtedy można będzie coś sensownego powiedzieć. Oczywiście nie zbuduję sobie urządzenia by mieć pewność, że działa.

Matrix86
-
Posty: 8
Rejestracja: 07 mar 2008, 13:50
Lokalizacja: Nowy Sącz

Post autor: Matrix86 » 04 wrz 2008, 10:54

Witam ponownie

Pisze tutaj bo mam pewien kolejny problem...
Chce zrobić coś takiego w swoim systemie.
Chciałbym zrobić tak że gdy przycisnę przycisk to wyświetlacz będzie mi wyświetlał napis >10 znaków max do 25 znaków (czyli realizował tzw. scrolling) na 10 pozycjach. A gdy ponownie przycisnę przycisk to program będzie realizował wyświetlanie statyczne czyli do 10 znaków na 10 pozycjach. Czy takie rozwiązanie jest w ogóle możliwe..? Będę wdzięczny jakby ktoś mi wyjaśnił na czym to polega i jak wygląda.
pozdrawiam

ODPOWIEDZ