Atmel JTAG deaktivieren in Software ohne Optimierung

Gast #1617978
Lesenswert?

Hallo zusammen,

Ich habe diverse Beiträge durchsucht aber nicht das richtige Gefunden.
Ich habe das Problem, dass ich die JTAG Schnittstelle im Program 
deaktivieren möchte. Ich nutze dazu C-Code Problem ist, dass innerhalb 
von 4 Taktzyklen 2x in das MCUCSR Register geschrieben werden muss.

Wenn ich das ohne Optimierung in C mache ist das allerdings zu langsam 
und dauer bei mir 5 Zyklen.

Weiss jmd wie ich in C das deaktivieren in Assembler machen kann?
Oder auch gerne andere Lösungen.

MfG Felix
Moderator Persönliche Seite #1618018
Lesenswert?

Nun, das einfachste wäre es natürlich, die Optimierung einzuschalten.
;-)
1
#include <avr/io.h>
2

3
void jtd(void)
4
{
5
  uint8_t tempreg;
6

7
  asm volatile("in %[tmp], %[mcucsr]" "\n\t"
8
        "ori %[tmp], %[mask]" "\n\t"
9
        "out %[mcucsr], %[mask]" "\n\t"
10
        "out %[mcucsr], %[mask]"
11
        :/* no outputs */
12
        : [tmp] "d" (tempreg), [mcucsr] "I" (_SFR_IO_ADDR(MCUCSR)),
13
          [mask] "M" (1 << JTD));
14
}

Sinnvoll wäre es natürlich noch, das Teil static inline zu
deklarieren, denn im Allgemeinen ruft man die Funktion ja nur
ein einziges Mal pro Applikation auf.
#1618619
Lesenswert?

Hallo,

Peter Dannegger schrieb:
> Felix schrieb:
>> Wenn ich das ohne Optimierung in C mache ist das allerdings zu langsam
>> und dauer bei mir 5 Zyklen.
>
> Wenn Dir das Programm mit Optimierung zu schnell ist, nimm einfach nen
> kleineren Quarz, dann kannst Du die Optimierung an lassen.

Hmmm, habe jetzt statt eines 4MHz HC49/U einen ganz kleinen 4MHz 
SMD-Quarz genommen. Läuft aber noch genauso schnell......

[Duck und wech]

Gruß aus Berlin
Michael

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren