mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt Trap XC167


Autor: Patrick Moll (Firma: Dilas Diodenlaser GmbH) (moll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

was für Ursachen kann denn ein Interrupt TRAP der Art Illegal Word 
Operrant haben?

Gruß Patrick

Autor: Ampfing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Auszug aus dem Datenblatt:
Illegal Word Operand Access Trap
Whenever a word operand read or write access is attempted to an odd byte 
address, the ILLOPA flag in register TFR is set and the CPU enters the 
illegal word operand access
trap routine.

Sprich wenn Du versucht auf einen n*16 Bit-Operanden zuzugreifen, der an 
einer ungeraden Adresse liegt gibt es denn TRAP.

Gruß

Autor: Patrick Moll (Firma: Dilas Diodenlaser GmbH) (moll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke schonmal. Ich habe mir auch schon gedanken um dieses Problem 
gemacht, wollte aber nicht gleich meine ganzen Überlegungen hier 
hinschreiben, um eine unabhängige Meinung bzw. Idee zu bekommen.

Ich bin auf der Suche nach der Ursache für diese ungerade 
Speicheradresse.

Ich weiß nicht so recht wie es dazu kommt? Hatte schon überlegt, ob 
vielleicht ein Datentyp falsch ist oder der Speicherplatz falsch 
angelegt ist.

Gruß Patrick

Autor: B. Jue (bjue)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick Moll schrieb:
> Ich weiß nicht so recht wie es dazu kommt? Hatte schon überlegt, ob
> vielleicht ein Datentyp falsch ist oder der Speicherplatz falsch
> angelegt ist.
Kann sein, wenn z.B. auf eine ungerade Byte Adresse wortweise 
zugegriffen wird.
Oder anderer häufiger Fehler:
Indirekter Speichzugriff,
MOV R1,[R2]  -> R2 ungerade

Für die Programmentwicklung hifreich ist es, eine Interruptroutine an 
die TRAP Vektoren anzuhängen, die einem auf der seriellen Schnittstelle 
(sofern vorhanden) sämtliche Registerinhalte und den CSP/IP ausgibt, 
dann sind solche Fehler schnell gefunden.

Welche Debugmöglichkeiten bestehen denn?

Autor: Patrick Moll (Firma: Dilas Diodenlaser GmbH) (moll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Entwicklungsumgebung ist Keil µ Vision 3

Autor: mafrmt00 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit einem Cast bekommt man so einen Fehler leicht hin, wenn man ein Word 
oder eine Struktur mit Words auf eine beliebige Adresse castet.

Fällt dann ein Word auf eine ungerade Adresse, gibt es bei Zugriff einen 
Fehler (interrupt).

Autor: Patrick Moll (Firma: Dilas Diodenlaser GmbH) (moll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hier ist mal die Funktion, in der der Fehler auftritt.

int GetDataADC(int *piData)
  {
  int i;

  SSC1_CON_EN = 0;
  SSC1_BR = 0x01;  // Baudrate  10Mbit/s
  SSC1_CON = 0xc05f;
  CS_ADC = 0;  // select DAC
  for (i=0; i< 6;i++)
    {
    SSC1_TB = 0x0000;  // sen Anzahl der Nutzdaten
    while(!SSC1_RIC);  // warte bis Ende der Übertragung
    SSC1_RIC = 0;  // Flag zurücksetzen


*(piData+i) = SSC1_RB;   //Hier tritt der Fehler auf !!!!!


    }
  CS_ADC = 1;   // deselect DAC
  Conversionstart_ADC=0;
  CC2_OUT_CC3IO = 0;
  return 0;
  }


Gruß Patrick

Autor: Ampfing (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ist doch auch kein Wunder.
Du erhöhst piData im zweiten Schleifendurchlauf um 1. Wenn am Anfang 
eine gerade Adresse drin stand steht da jetzt eine Ungerade. Dann 
greifst Du auf diese Adresse zu und schreibst einen 16 Bit-Wert rein -> 
Du greifst auf einen Word-Operanden an einer ungeraden Adresse zu und 
löst damit den Trap aus.

Gruß

Autor: Patrick Moll (Firma: Dilas Diodenlaser GmbH) (moll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

stimmt guter Hinweis, habe aber herausgefunden, dass pidata schon direkt 
nach dem Aufruf der Funktion eine ungerade Adresse hat. Das kommische 
ist es ist nicht vorhersehbar wann der Fehler auftritt, also ich meine 
er tritt nicht immer dann auf wenn die Funktion jedesmal aufgerufen 
wird, sondern z.B erst nach 3 Stunden.

Gruß Patrick

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.