Rodney
28.09.2004, 19:47
Hallo Leute,
bei meinem UART klappt das Senden zum PC ohne Probleme, alles wird richtig übertagen.
Wenn ich allerdings irgendetwas vom PC sende hängt sich der Controller (AtMega16) auf und führt keine Befehle mehr aus...
Mein kompletter UART-Code:
void uart_init()
{
outp( (CPU_Frequency / (UART_BAUD_RATE*16L))-1 , UBRRL );
outp( 0, UBRRH );
outp( (1 << URSEL) | (3 << UCSZ0), UCSRC);
outp( (1 << RXCIE) | (1 << TXEN) | (1 << RXEN), UCSRB);
sei();
}
void uart_nachricht(char* senden) {
for (; *senden != '\0'; senden++) {
loop_until_bit_is_set(UCSRA, UDRE);
UDR=*senden;
}
loop_until_bit_is_set(UCSRA, UDRE);
UDR = 13;
}
Signal (USART_Receive_Complete) {
uart_nachricht("Hab was emfangen!");
}
bei meinem UART klappt das Senden zum PC ohne Probleme, alles wird richtig übertagen.
Wenn ich allerdings irgendetwas vom PC sende hängt sich der Controller (AtMega16) auf und führt keine Befehle mehr aus...
Mein kompletter UART-Code:
void uart_init()
{
outp( (CPU_Frequency / (UART_BAUD_RATE*16L))-1 , UBRRL );
outp( 0, UBRRH );
outp( (1 << URSEL) | (3 << UCSZ0), UCSRC);
outp( (1 << RXCIE) | (1 << TXEN) | (1 << RXEN), UCSRB);
sei();
}
void uart_nachricht(char* senden) {
for (; *senden != '\0'; senden++) {
loop_until_bit_is_set(UCSRA, UDRE);
UDR=*senden;
}
loop_until_bit_is_set(UCSRA, UDRE);
UDR = 13;
}
Signal (USART_Receive_Complete) {
uart_nachricht("Hab was emfangen!");
}