Renesas M16C/62P Interruptprogrammierung

Hallo Zusammen

Ich habe f=FCr meinen Renesas Mikrocontroller Renesas M16C62P einen Routine Programmiert um die serielle Schnittstelle abzufragen. Nun habe ich dazu ein kleines Problem mit meiner Interruptroutine. Das ganze sieht ungef=E4hr so aus:

***************************************************************************= ***/ #include "iom16c62p.h"

extern void Interrupt_Init (void);

#pragma INTERRUPT [UART0_RX] void UART0_RX_INT(void);

void Interrupt_Init (void) { S0RIC =3D 0x07; // UART0 Enabled, Priority 7 High }

/**************************************************************************=

**** * UART0_RX_INT Empfangsinterrupt UART0 Interrupt

***************************************************************************=

***/ #pragma INTERRUPT [UART0_RX] void UART0_RX_INT(void) //interrupt [UART0_RX]

{ int a; a =3D U0RB; //breakpoint setzen //16 BIT IN UNSIGND INT U0RB }

***************************************************************************= ********

Nun habe ich beim Compilieren ein Problem mit der deklaration der variable a. Kann diese nicht als integer deklariert werden? bzw. welcher Datentyp m=FCsste verwended werden? Hat evt. jemand schon eine lauff=E4hige Variante f=FCr das abfragen der seriellen Schnittstelle mit einem Interrupt? Oder sonst einen guten Tip.

Vielen Dank

Oli

Reply to
huber_oliver
Loading thread data ...

***********************************************************************************

Welche Fehlermeldung? _Wo_ beginnt deine Interruptbehandlungsroutine? Willst du mit den Daten noch weiter etwas machen?

int ist schon ok. Ich nehme allerdings immer char und lasse die Zusatzinfos gleich dabei weg. Kommt halt drauf an was du alles brauchst.

Ja.

Einfach das Register da auslesen ;) Ich denke nur du hast da allgemein etwas falsch verstanden mit den Interrupts/Pragmas.

ciao

Reply to
Thomas Graf

huber snipped-for-privacy@freesurf.chschrieb: "

#include "..\Controller\sfr62.h"

#pragma INTERRUPT uart2rx // Declares interrupt handler UART2 Receive

static unsigned int uiData = 0;

void uart2rx( void ) { uiData = u2rb; }

funktioniert bei mir einwandfrei, wobei "uart2rx" in sect30.inc als

.glb _uart2rx .lword _uart2rx ; uart2 receive

eingetragen ist.

Dirk

Reply to
Dirk Ruth

*********************************************************************************** hmm, wenn du einen Kompiler mit Optimierung einsetzt, dann wird die Interrruptfunktion leer sein, da das Ziel der Zuweisung nirgens weiterverwendet werden kann (Variable a ist ja nur lokal in der Interrruptfunktion vorhanden) und somit der Kompiler die Zuweisung "rausoptimiert".

Du must die Daten innerhalb deiner Interruptfunktion in einen globalen Puffer schreiben (im einfachsten Fall ne globale Variable). Irgendwo (z.B. innerhalb von main()) kannst du dann die Daten aus dem globalen Puffer auslesen und verarbeiten.

tschaule Martin

Reply to
Martin Kaul

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.