logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Attiny jaka różnica między przejściem do początku programu, a sprzętowym resetem

Zbino 02 Sie 2018 23:31 693 9
  • #1 17363880
    Zbino
    Poziom 10  
    Mam procesor Attiny 4313. Chodzi na nim napisany przeze mnie programik. Nie mogą dojść, gdzie jest problem przy zerowaniu procesora. W pewnym miejscu programu chciałbym wyzerować procesor i zacząć cały program od początku łącznie z inicjacją wszystkich portów itp. Skaczę więc do adresu 0. Jednak taki skok powoduje, że program nie działa prawidłowo i pojawiają się jakieś zakłócenia w jego pracy. Zupełnie inaczej program zachowuje się, gdy zrobię sprzętowy reset. Po nim wszystko działa prawidłowo. Ma ktoś pomysła co może być przyczyną, że programowy reset działa inaczej niż sprzętowy?
  • #2 17363945
    Konto nie istnieje
    Konto nie istnieje  
  • #3 17364166
    ex-or
    Poziom 28  
    Reset przez skok pod adres zero realizowany jest przez wykonanie kodu inicjującego a on że tylko zeruje rejestr zerowy i statusowy, ustawia wskaźnik stosu, oraz inicjuje zmienne w RAM. Inne rejestry w tym I/O nie są inicjowane, czyli zatrzymują wartość sprzed "resetu"
  • #4 17364835
    M. S.
    Poziom 34  
    Cytat:
    Jeśli reset ma być skuteczny, najprościej uruchomić WDG

    Lub jedną nóżkę portu podłączyć do nóżki reset i oprogramować. Najpierw nóżkę podciągnąć do zasilania, później przełączyć port na wyjściowy, a reset stanem niskim wykonać.
  • #5 17364948
    Konto nie istnieje
    Konto nie istnieje  
  • #6 17366345
    Rasel
    Poziom 22  
    Czy program masz napisany w asemblerze czy korzystasz z kompilatora c (lub innego języka wysokiego poziomu)?
  • #7 17366364
    Konto nie istnieje
    Konto nie istnieje  
  • #8 17378450
    Zbino
    Poziom 10  
    Rasel napisał:
    Czy program masz napisany w asemblerze czy korzystasz z kompilatora c (lub innego języka wysokiego poziomu)?


    Program napisany a asemblerze. Na początku programu następuje zerowanie programowe wszystkich rejestrów procesora, ustawianie rejestrów portów i ustawiany jest adres stosu. Mimo to program zachowuje się inaczej przy resecie sprzętowym niż przy zresetowaniu działania poprzez skok do adresu 0000. Zastanawia mnie to skąd to się bierze.
    Najlepszym rozwiązaniem chyba będzie zastosowanie watchdoga tylko że skończyło mi się miejsce na nowe linie kodów.
  • #9 17378619
    ex-or
    Poziom 28  
    Co do zerowania rejestrów to np. flagi przerwań "zeruje" się wpisaniem jedynki. Z kolei niektóre rejestry przyjmują wartość początkową inną niż zero (choć nie wiem czy są takie w tym procku, oprócz rejestru stosu, ale ten ustawiasz).
    -- edit ---
    I jeszcze mi się przypomniało: ustawienie (w tym wyzerowanie) niektórych flag wymaga wykonania pewnej sekwencji przy zachowaniu reżimu czasowego. Tak jest np. w przypadku ustawień (resetu ustawień) watchdoga czy, o ile dobrze pamiętam, ustawień BOD. Zwykłe przypisanie 0 do rejestru WD nie odniesie skutku. Na dodatek pozostawienie ustawionej flagi WDRF w MCUSR uniemożliwi zmianę ustawień WD mimo wykonania wymaganej sekwencji.
  • #10 17378653
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA