PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : UART Interrupt



skywalker1979
30.05.2008, 09:08
Guten morgen,

ich habe ein Problem beim Programmieren einer UART Kommunikation. Ich möchte, das beim Empfang einer Zeichenfolge ein Interrupt ausgelöst wird. In der Interrupt Routine soll dann in eine Funktion zur Befehlsprüfung gesprungen werden. Das Problem ist nur, das nie ein Interrupt ausgelöst wird.
Hier sind die entprechenden Teile aus meinem Programm:

ISR:


void __attribute__((__interrupt__, auto_psv)) _U1RXInterrupt(void)
{

uart1_empfang();
IFS0bits.U1RXIF = 0;
}

UART Init:


void UART1Init(int BAUDRATEREG1)
{
U1BRG = BAUDRATEREG1;
U1MODE = 0x8000;
U1STA = 0x8400;
IFS0bits.U1RXIF = 0;
}

UART Empfang:


void uart1_empfang(void)
{
int i;
char c;
char* s;

s=befehl;
i=0;


do
{
c=UART1GetChar();
if( c!='\r')
{
*s=c;
s++;
i++;
}
}
while( c!='&' );
*s=0;

befehlspruefung();
}


und UART1GetChar:


char UART1GetChar()
{
char Temp;
while(IFS0bits.U1RXIF == 0);
Temp = U1RXREG;
IFS0bits.U1RXIF = 0;
return Temp;
}

Ich hoffe ihr könnt mir hilfreiche Tipps geben.

mit freundlichen Grüßen

_werwurm_
30.05.2008, 18:05
wurde denn das GIE (global interrupt enable) gesetzt?
welcher PIC wird denn verwendet?

hier gibt es ein beispiel zum 16F628:
http://www.piclist.com/techref/microchip/language/c/S628.htm

skywalker1979
04.06.2008, 06:46
Hallo,

Ich verwende einen PIC24FJ64GA002.
Das Problem mit der UART habe ich gelöst. Ich habe einfach nur vergessen beim Initialisieren auch den Interrupt zu enablen. Jetzt funktionierts.

mfg Florian