Forum: Mikrocontroller und Digitale Elektronik AVR JTD setzen


von Timur (Gast)


Lesenswert?

Im Datenblatt des ATmeag324P auf Seite 274 steht. Das wenn ich das JTD 
Bit im MCUCR Register setzten will ich folgendes tuen.

"The application software must write this bit to the desired value twice 
within four cycles to change its value."

Nun versuch ich folgendes Optimierung ist natürlich ausgeschaltet.

(Das JTD Bit ist Bit Nummer 7 im MCUSR Register deshalb 0x80)

u8 temp;
  temp=MCUSR;
  temp=temp|0x80;
  MCUSR=temp;
  MCUSR=temp;
  MCUSR=temp;
  MCUSR=temp;
Ich will damit erreichen dass ich die JTAG Pins als I/O Pins nutzen 
kann.
Flashen tue ich das ganze mit meinem DragonBoard über JTAG.

Das Bit wird aber nicht gesetzt.

Hat Jemand vieleicht erfahrung mit dem Problem

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Timur wrote:

> Nun versuch ich folgendes Optimierung ist natürlich ausgeschaltet.

Was daran ,,natürlich'' sein soll, darfst du noch erklären.

Fährst du ,,natürlich'' dein Auto mit angezogener Handbremse,
damit es nicht so schnell fährt?

Genau das ist jedenfalls dein Problem.  Ohne Optimierung generiert
der Compiler Code, der so schnarchlahm ist, dass die 4-Zyklen-
Bedingung nicht eingehalten wird.

Wenn's partout ohne Optimierung sein muss:

http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=76590#553836

von Timur (Gast)


Lesenswert?

Ah ok danke ich werde das gleich mal probieren.
Die Optimierung hatte ich ausgeschaltet weil ich angst hatte das diese 
Codeschnippsel dann wegoptimiert wird

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Timur wrote:

> Die Optimierung hatte ich ausgeschaltet weil ich angst hatte das diese
> Codeschnippsel dann wegoptimiert wird

Zugriffe auf IO-Register werden nie weg optimiert.  Daher ist es
auch eine sichere Bank, zum Debuggen einfach ein
1
PORTB = 42;

irgendwo einzubauen, da man an dieser Stelle immer einen Breakpoint
setzen kann.

von Timur (Gast)


Lesenswert?

Vielen Dank für den Tipp

Den alten Codeschnippsel den ich nur zum debuggen aufgebläht hatte habe 
ich jetzt durch diesen erstzt und die Optimierung im GCC auf Os gestellt 
jetzt funkt es.

*************
MCUCR |= (1<<JTD);
MCUCR |= (1<<JTD);
*************

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.