SW reset of ATTINY2313
Moderátor: Moderátoři
SW reset of ATTINY2313
Díky
SW reset of ATTINY2313
Díky.
Kód: Vybrat vše
cli(); // Zakazani preruseni - nevim, jestli se to takhle pise
WDTCSR |= (1<<WDCE) | (1<<WDE);
WDTCSR = (1<<WDE);
while(1); // Tady se pocka na resetA úplně na začátku v inicializaci ještě před povolením přerušení je potřeba ten watchdog zase zakázat:
Kód: Vybrat vše
wdr(); // Reset watchdogu - nevim, jestli se to takhle pise
MCUSR &= ~(1<<WDRF);
WDTCSR |= (1<<WDCE) | (1<<WDE);
WDTCSR = 0;Předmět: SW reset of ATTINY2313
Z počátku se mi z něho dělalo trochu mdlo, ale pro několikerém přečtení příslušné kapitoly v datašítu, jsem ho pochopil. Celodenní problém byl s rozluštěním, asi tiskové, chyby v originále datasítu ATTINY2313 - registr WDTCSR ve skutečnosti v ATtiny neexistuje! Registr se správně jmenuje WDTCR!!! Chvíli mi trvalo, pochopit logiku fungování a nastavování WatchDogu, než jsem si troufl na vlastní zápis. Po několika dnech jsem sesmolil funkční podobu Tvých tipů, pro céčkovské začátečníky snad čitelnější"¨:
asm CLI; // zakázání všech přerušení
mcusr =0; // není nutné
wdtcr = 0b00x11xxx; // povolení WD, x -pomocí těchto bitů se nastaví
resetovací interval
...
.... // uživatelský kod
asm WDR; // reset čítače WD
..... // uživat.kod
mcusr =0; // není nutné
wdtcr = 0b00x11xxx; // ukončení činnosti WD
wdtc=0; // musí být oba řádky
Fce CLI() a WDR() nejsou mému překladači známe, proto jsem použil volání assembleru.
Při čtení manuálu jsem ovšem narazil na další nesrovnalosti týkající se systému restartu. Dle dokumentace by všechny příčiny restartu měly být, co se týče dopadu na chod MCU, ekvivalentní. Ve skutečnosti je především nezanedbatelný rozdíl v chování MCU po vypnutí a opětovném zapnutí napájení a po resetu pomocí příslušného pinu. Mám takové tušení, že ani výše popsaný SW reset není ekvivaletní HW resetu.
A moje otázka pro všechny zkušenější zní: Dá se vůbec SW nasimulovat HW reset?
Díky všem za srozumitelné odpovědi, které mohou být v češtině i angličtině.
S pozdavem