Forum: Mikrocontroller und Digitale Elektronik Serieller Interrupt bei 80C535 Board von Wickenhaeuser


von Music Man (Gast)


Lesenswert?

Hallo,

ich brauch mal einen Spezialisten, der sich mit dem 80535
Entwicklungsboard der Firma Wickenhäuser auskennt.

Ich möchte den Seriellen Interrupt abfragen (in ANSI C) und bekomme
immer die folgende Fehlermeldung beim Kompilieren:

Error: segment '___ser_irq' overlay in sclass 'text' at address
$8023

Im Quelltext habe ich einfach die folgenden Zeilen geschrieben:

#include <irq52.h>
IRQ_VECTOR(SeriellerInterrupt,SERIAL)
void SeriellerInterrupt (void) interrupt  {
 P3_B5^=1; // Toggle LED (at P3.5 on almost all Wickenhaeuser Boards)
}

Bei den anderen Interrupts (Timer etc.) kommt der Fehler nicht!

Was mache ich falsch??

Ich hoffe ihr könnt mir weiterhelfen. Ich weiß echt nicht mehr weiter.

Danke und Gruß
Music Man

von Tobias Schneider (Gast)


Lesenswert?

Hi,
ich kenne mich mit dem Board und dem Compiler nicht aus, aber der
Codeadresse nach zu urteilen liegt dein Cod eim RAM was wiederum auf
ein Monitorprogramm hinweist, dass dieses entgegen nimmt. Komemn sich
die da vll. in die quere?

Auserdem ist der Interruptvector soweit unten im Speicher auch recht
komisch. Wie verwaltet den dieser Compiler mit dem Monitor das ganze?


Gruß Tobias

von Music Man (Gast)


Lesenswert?

Hi,

der Ram Speicher beginnt bei Adresse 0x8000. In der irq52.h Datei steht
folgendes:

/**********************************************************************
* IRQ52.H
*
* IRQ definition for standard 8051,52
*
* (C) 2002 WWW.WICKENHAEUSER.COM
*
* This file defines a macro to branch from the interupt's entry
address
* to the appropriate C function. For other vectors than the defined
* ones, just use their entry address as parameter.
**********************************************************************/


#asm
.macro _irq_vector
  .show
  .segment @1, org @2
  ljmp @3
  .hide
.endmacro
#endasm

#define _asmline #asmline

#define IRQ_VECTOR(name,loc) _asmline _irq_vector _irq_##name
,loc,_##name

// Available Interrupts on 8051/8052 with known names (IRQ_ added to
avoid conflicts)

#define IRQ_INT0 0x3
#define TIMER0  0xB
#define IRQ_INT1 0x13
#define TIMER1  0x1B
#define SERIAL  0x23
#define TIMER2  0x2B

// END

Ich versteh das so, als wenn die Adresse 0023 auf die Adresse der
Interruptroutine im Programm "umgeleitet" wird.
Aber irgendwie funktioniert das nicht.

No irgend ne Idee?

Gruß Music Man

von Music Man (Gast)


Lesenswert?

Hallo,

hat irgendjemand auch dieses Board von Wickenhäuser mit nem 80C535 und
hat den seriellen Interrupt zum Laufen gekriegt?

Ich glaube fast dass das ein Problem des Boards selbst ist.
Alle Tipps und Codes machen das gleiche wie ich geschrieben habe. Aber
ich krieg einen Fehler beim Assembleieren.
Hier auf der Seite gab es einen schönen Link zu einem ASM Generator.
Das hab ich mal getestet. Mit dem gleichen Ergebnis -> Fehler!!

Ich raffs nicht.
Brauche dringend hilfe...

Danke und Gruß
Music Man

von Ulrich Springfeld (Gast)


Lesenswert?

so läuft das bei mir :

 IRQ_VECTOR(UART_ISR,SERIAL)

 void UART_ISR (void)interrupt

{
  if (RI)
  {
    // clear interrupt flag
    RI = 0;
   // recievebit=1;
  } // if

  if (TI)
  {
    // clear interrupt flag
    TI = 0;
    // no longer busy
    mtxbusy = 0;
  } // if

} // uart_isr



viele Grüsse

Ulli

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.