Skocz do zawartości

[Asm] Jak zmodyfikować program asemblerowy dla Attiny26 na program dla ATtiny2313


tadeko

Pomocna odpowiedź

Jak zmodyfikować program napisany w asemblerze dla ATtiny26, aby działał na ATtiny2313.

W programie tym są 2 linie o treści:

.ORG PCI0addr ; wektor przerwania PCI0

reti ; pusta procedura obsługi (powrót)

w których po kompilacji zgłaszany jest błąd.

Linię o treści:

.INCLUDE "tn26def.inc"

zamieniłem na

.INCLUDE "tn2313def.inc"

Link do komentarza
Share on other sites

Te linie po prostu usuń bo to przerwanie nie jest wykorzystane, ale to nie daje żadnej gwarancji, że program będzie działał. To są inne procesory, mające inne zestawy rejestrów i układów peryferyjnych. Jeżeli program korzysta z czegoś ważnego, czego nie ma w 2313 to leżysz. Jeżeli kod w jest w miarę skomentowany i rozumiesz co tam się dzieje to przejrzyj go pod kątem zgodności z 2313. Weź do ręki dane katalogowe obydwu procesorów, zapoznaj się z nimi, wyszukaj/wypisz sobie najważniejsze różnice i sprawdź, czy jakaś cecha występująca wyłącznie w tiny26 jest wykorzystana.

Jeżeli całość mruga kilkoma diodkami i robi delay'e to kłopotów raczej nie będzie, ale jeśli przerabiasz sterownik silnika lub jakiś układ pomiarowy (brak ADC w 2313, inne timery) to różnice na pewno będą.

Link do komentarza
Share on other sites

Niestety już tak wcześniej próbowałem, ale po zablokowaniu podanych 2-ch linii, zamiast 2 błędów jest 15.

Program ten w oryginale pochodzi z książki "Mikrokontrolery AVR ATtiny w praktyce" i bez modyfikacji kompiluje się bez problemu - przerwanie PCI0 jest wykorzystywane.

Nie tutaj jest problem. Albo w ATtiny2313 to przerwanie nazywa się inaczej niż w ATtiny26, albo jest pod innym adresem.

Link do komentarza
Share on other sites

Nie może być wykorzystywane skoro jego obsługa polega na "reti", chyba że czegoś nie pokazałeś a ja się z pustego nie domyślę. Nie ma uniwersalnego sposobu przejścia z jednego procesora na inny a ogólny przepis na konwersję kodu już dostałeś. Dwa dokumenty w rękę, porównujesz, wnikasz w kod i do roboty. Nikt nie wiedząc kodu nie poradzi Ci nic konkretnego. To Ty masz tekst programu, Ty widzisz komunikaty o błędach i Ty możesz ten kod zmieniać. Wyszukaj różnice i zadawaj konkretne pytania: jak zrobić cośtamcośtam bo tego tiny2313 nie obsługuje w sprzęcie a program tiny26 z tego korzysta.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Przerwanie CPI0 jest wykorzystane w tym programie.

W pętli głównej programu jest to tak:

Petla: ; pętla główna programu

cbi K_KLAW, KL_UNIV1 ; przełącz linię klawisza UNIV1 w tryb wej.

ldi R16, (1<

out GIFR, R16 ; anuluj ewentualne żądanie przerwania PCI

sei ; odblokuj obsługę przerwań

sleep ; przejdź w tryb uśpienia

; dalsza część programu wykonywana jest po

; zmianie stanu klawisza UNIV1

cli ; chwilowo zablokuj obsługę przerwań

...

Dzięki temu przerwaniu kontroler budzi się z uśpienia po naciśnięciu klawisza UNIV1.

Jeśli informacje zawarte w moim pytaniu były niewystarczające, to zamiast odpowiadać "tak mi się wydaje" trzeba było poprosić o więcej informacji.

Link do komentarza
Share on other sites

Jeśli informacje zawarte w moim pytaniu były niewystarczające, to zamiast odpowiadać "tak mi się wydaje" trzeba było poprosić o więcej informacji.

Ejże, spokojnie, kto tu prosi o pomoc? Jeśli informacje o tym jakie informacje należy podać były niewystarczające, to zamiast wypisywać co ci się wydaje trzeba było zapytać jakie informacje są potrzebne... 😉

A tak na serio, to wyluzuj, przecież to nie nasza wina, że mikrokontrolery nie są wszystkie równe i mają w środku inne peryferia, które do tego inaczej się programuje. Jak by były wszystkie takie same, to po co miałyby rożne symbole i ceny?

Jeśli twój(?) kod używa peryferiów (które, jak kolega już wytłumaczył, są różne w różnych mikrokontrolerach), to przyjdzie ci przystosować go do nowego mikrokontrolera. Jak to zrobić kolega już ci podpowiedział -- patrzysz czego używa twój kod, porównując z notą katalogową pierwszego procesora gdy masz jakieś wątpliwości, a potem sprawdzasz w nocie katalogowej drugiego czy ma to samo i jak w nim to zrobić i taki kod piszesz. Niestety nie ma automatycznego sposobu na przetłumaczenie jednego na drugie, chyba, że piszesz w czymś wyższego poziomu, albo używasz bibliotek, które szczegóły sprzętu abstrahują.

P.S. Witamy na forum.

Link do komentarza
Share on other sites

I właśnie z tym porównaniem not katalogowych obydwu mikrokontrolerów nie umiem sobie poradzić - dopiero startuję w asemblerze, w bascomie nie było takich problemów.

Dlatego proszę doświadczoną osobę o pomoc, jak zmodyfikować w programie budzenie uśpionego mikrokontrolera przez naciśnięcie klawisza.

Link do komentarza
Share on other sites

OK, teraz mamy wreszcie pierwszy konkret: chcesz popracować nad przeróbką kawałka kodu korzystającego z przerwań od zmiany stanu pinu. Czy ściągnąłeś już dane katalogowe obu procesorów i do nich zajrzałeś? Porównałeś spisy treści? Miałeś na to całą dobę.

No i wciąż nie bardzo czuję na czym konkretnie ma nasza pomoc polegać? Mamy napisać/zmodyfikować kawałek kodu nie widząc oryginału, czy tylko wytłumaczyć Ci jak działają pewne fragmenty procesora?

Skoro sam wiesz (i my wreszcie także), że chodzi o przerwanie od pinów, skup się tylko na tym - a więc jeszcze raz, powoli:

1. Przeczytaj jak jest to zrobione w tiny26 - po to by zrozumieć jak obecnie program z tych własności/zasobów/rejestrów procesora korzysta. Zobacz które piny mogą wywoływać przerwania, jak się je aktywuje, których rejestrów używa itd. Możesz dla potwierdzenia swoich nowo nabytych wiadomości wrzucić tutaj krótki opis tego czego się dowiedziałeś.

2. Znajdź odpowiedni rozdział w dokumentacji tiny2313 i uzbrojony w wiedzę o tiny26 sprawdź jak to zrobili w nowym procku i co musisz zmienić w kodzie by w nim ruszyło to samo co w starym. Znowu: które piny mogą być źródłem przerwań, jak wygląda tablica wektorów przerwań, jakie rejestry odpowiadają za konfigurację przerwań od pinów i co trzeba do nich wpisać. Dla weryfikacji możesz opisać nam plan zmian w kodzie. Może ktoś będzie miał inny, może lepszy pomysł?

Takie zadanie to bardzo dobra wprawka w programowaniu mikrokontrolerów. Nie wiem po co to robisz, może po prostu przerabiasz książkę rozdział po rozdziale by nabyć biegłości, ale z jakiegoś powodu zastąpiłeś tiny26 przez z pozoru tylko podobnym tiny2313 (dlaczego?). Może piszesz coś większego albo jest to praca domowa z jakiegoś przedmiotu - nie ważne. Ważne jest, że dużo z takiej samodzielnej pracy zostanie w głowie a to chyba istotny czynnik naszej zabawy.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.