PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : uart tx führt zu reset



CowZ
12.03.2007, 12:39
Hi,

ich habe ein seltsames Problem:

Ich habe einen mega32 mit angeschlossenem max232. Sende ich ein Zeichen, oder eine Zeichenkette, started das Programm des µC neu. (glaube ich zumindest).

Ablauf:
void main(void):
- Setzte LED als an
- Warte (while(1); )

uart_rxc interrupt:
- wenn empfangenes Zeichen = a => Setze LED als aus
- wenn empfangenes Zeichen = b => Sende '-' zurück.

Ergebnis:
Starten (LED ist an), 'a' senden (LED ist aus), 'b' senden (LED geht wieder an)

Mein Code (relevante teile, led() schaltet nur die LED an/aus):


int main(void)
{
led_init();
uart_init();

sei();
led(led2, 1);

while(1)
{

}
}

ISR(USART_RXC_vect)
{
uint8_t c;
c = uart_receive();

if (c == 'a') led(led2, 0);
if (c == 's') uart_putc('-');
}

void uart_putc(uint8_t data)
{
while (!(UCSRA & (1<<UDRE)));
UDR = data;
}

void uart_puts(uint8_t *data)
{
while (*data)
{
while (!(UCSRA & (1<<UDRE)));
UDR = *data;
data++;
}
}


Interessanter weise schickt er den gesamten string bei uart_puts. Die LED geht trotzdem an. Ich weiß nicht mehr weiter und hoffe, ihr könnt mir helfen.

Gruß, CowZ

SprinterSB
12.03.2007, 13:53
Einen beträchtlicher Teil deines Codes versteckst du woanders...

Ein RESET wird zB dann ausgelöst, wenn eine nicht-implementierte IRQ getriggert wird.

CowZ
12.03.2007, 15:23
vom code fehlt einiges ja, aber ich dachte, das wäre das wichtigste..

muss ich alle aktivierten interrupts auch als IRQ-Routine haben?

Wenn ja, kann es daran liegen, dass ich keine TXC routine habe. Werde ich heut nachmittag mal testen.

Gruß, CowZ

SprinterSB
12.03.2007, 17:05
Wenn eine IRQ getriggert wird, für die keine ISR implementiert ist, dann wird von avr-gcc Code erzeugt, der dann zum RESET-Punkt springt. Das Programm läuft dann also von vorne los, allerdings ohne die Hardware neu zu initialisieren wie bei einem richtigen RESET.

CowZ
12.03.2007, 21:27
Hi,

ok, danke für die Erklärung, hoffe das Problem löst sich so.

Wenn nicht, melde ich mich nochmal. Vielen Dank schonmal :)

edit: grad getestet, läuft wunderbar :D vielen dank :)

Gruß, CowZ