problem mit jtag ice mkII und interrupts

OP #1662438
Lesenswert?

guten tag,

und zwar habe ich, wie im titel bereits ersichtlich ein problem mit dem 
jtag ice mkii. ich benutze eine selbst gebastelte platine mit einem 
atmega128l, und ich kann den prozessor auch mit dem jtag programmieren.

folgendes test-programm zum beispiel funktioniert einwandfrei:

#include <avr/interrupt.h>
#include <avr/io.h>

int main()
{
DDRB=0xFF;
PORTB=0xFF;
while(1)
{
PORTB=~PORTB;
}
}

sehe ich mir den portb mithilfe eines oszis an, so sehe ich, dass der 
portb wie es sich gehört getoggelt wird. - anschlüsse stimmen also, ich 
kann meinen prozessor programmieren.

will ich allerdings nun ein programm raufladen welches den port mit 
Hilfe eines timer overflow interrupts toggled so tritt folgendes problem 
auf:

die main funktion wird korrekt abgearbeitet, anschließend springt er in 
die interrupt routine, arbeitet diese einmal korrekt durch, kommt zum 
schluss der interrupt routine, anschließend ist eine kurze wartezeit - 
dann springt er wieder zum ersten punkt des programms - also wieder zur 
zeile int main().

selbes problem hatte ich schon vor paar monaten mit einem stk-board, 
dort sahen wir, als wir uns den assembler code anschauten, dass er bei 
dem return from interrupt befehl an eine falsche stelle des flash 
speichers sprang, danach bis zum schluss durchrannte und anschließend 
einen reset erzwang.

hatte schon mal jemand ein ähnliches problem, kann sich jemand 
vorstellen, was mein fehler sein kann? hab ich vielleicht nur irgend ein 
häkchen bei den optionen im avr studio vergessen? danke!
Gast #1662450
Lesenswert?

Florian Z. schrieb:
> die main funktion wird korrekt abgearbeitet, anschließend springt er in
> die interrupt routine, arbeitet diese einmal korrekt durch, kommt zum
> schluss der interrupt routine, anschließend ist eine kurze wartezeit -
> dann springt er wieder zum ersten punkt des programms - also wieder zur
> zeile int main().

Es wäre hilfreich wenn du das nicht funktionierende Programm vorstellst.

MfG
OP #1662451
Lesenswert?

du meinst folgende beiden zeilen gleich zu anfang des programms 
einfügen?

SPL=0x5D
SPH=0x5E

so weit ich mich erinnern kann haben wir das bereits versucht - aber 
wenn ich diese werte setze, setze ich ja nur den wert der im register 
steht, und nicht die adresse ?? verwirrt bin


edit: und noch das nicht funktionierende programm:

#include <avr/interrupt.h>
#include <avr/io.h>

int main()
{
   TCCR0&=0x07;
   TCCR0|=0x05;
   TIMSK|=0x01;
   SREG|=0x80;
  DDRB=0xFF;
  PORTB=0xff;
  while(1)
  {

  }
}

ISR(TIMER0_OVF_vect)
{
  static char count=0;
  if(count++>30)
  {
    PORTB=~PORTB;
    count=0;
  }
}
OP #1662466
Lesenswert?

holger schrieb:
>>   TCCR0&=0x07;
>
> TCCR0 kennt dein ATMega nicht. Das heisst TCCR0A oder TCCR0B.
> Hast du den richtigen AVR eingestellt? Nicht das du da für
> ATMega32 compilierst.

erstmal sry für doppelpost

aber ähm, laut datenblatt, und laut der adressspalte im avr studio (die 
spalte die rechts angedockt ist) - lauten die register tccr0, usw. - 
müsste doch eigentlich stimmen?!

edit: atmega128 ist auch eingestellt
OP #1662470
Lesenswert?

holger schrieb:
>>platine mit einem atmega128l
>
>>edit: atmega128 ist auch eingestellt
>
> Was denn nun? ATMega128? Dann M103C Fuse deaktivieren.

naja physisch wird ein atmega128l eingesetzt, nachdem aber unter 
avrstudio4 so einer nicht zur auswahl steht, habe ich mich 
softwartechnisch für den atmega128 entschieden, da diese pin kompatibel 
sind und auch das selbe datenblatt teilen.
Gast #1662475
Lesenswert?

Hi

>naja physisch wird ein atmega128l eingesetzt, nachdem aber unter
>avrstudio4 so einer nicht zur auswahl steht,

Uraltes AVR-Studio?

> habe ich mich
>softwartechnisch für den atmega128 entschieden, da diese pin kompatibel
>sind und auch das selbe datenblatt teilen.

Mit Sicherheit nicht.

Sorry für den Hinweis zum Stack.

MfG Spess
Gast #1662480
Lesenswert?

>naja physisch wird ein atmega128l eingesetzt, nachdem aber unter
>avrstudio4 so einer nicht zur auswahl steht

Aus welchem Jahrtausend stammt deine AVR Studio Version?
Zieh dir ganz schnell mal ne neue.

>softwartechnisch für den atmega128 entschieden, da diese pin kompatibel
>sind und auch das selbe datenblatt teilen.

Nö, tun sie nicht.
Gast #1772986
Lesenswert?

Hi

>...oder besitzt der AT90USB1287 eine ähnliches Fuse wie das M103c,

Nein, der AT90USB1287 hat nichts vergleichbares.

Es ist übrigens günstiger, einen eigenen Thread aufzumachen in dem du 
dein Problem beschreibst.

MfG Spess

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