andirs18
27.09.2010, 16:56
Hallo alle zusammen,
ich muss während des Programmlaufs die Baudrate vom USART ändern, doch
leider funktioniert das nicht so ganz.
Ich baue eine LIN Kommunikation auf (AT90CAN128) und um den Syncbreak zu
senden, muss ich von 19200Baud auf 13000Baud runter gehen.
Mit dem Debugger sehe ich auch das die Baudrate im Register richtig
verändert wurde wenn ich einen Breakpoint zwischen den beiden "BAUD_Init" setze (auf 13000Baud) aber es wird trotzdem mit 19200Baud
gesendet.
Habe ich etwas übersehen oder muss ich irgendein Flag noch setzen damit
die Übertragungsrate auch so übernommen wird ?
Meine Funktion sieht wie folgt aus:
void LIN_Syncbreak()
{
// Baudrate von 19200Baud auf 13000Baud runtersetzen
// um für >677µs Syncbreak zu senden
BAUD_Init(SYNCB); // Baudrate auf 13000 setzen
lin_msg.syncbreak = 0x00; // Daten für Syncbreak = 0x00
uart_putc(lin_msg.syncbreak); // Sende Syncbreak
BAUD_Init(NORMB); // Baudrate auf 19200 setzen
}
Gruß Andi
ich muss während des Programmlaufs die Baudrate vom USART ändern, doch
leider funktioniert das nicht so ganz.
Ich baue eine LIN Kommunikation auf (AT90CAN128) und um den Syncbreak zu
senden, muss ich von 19200Baud auf 13000Baud runter gehen.
Mit dem Debugger sehe ich auch das die Baudrate im Register richtig
verändert wurde wenn ich einen Breakpoint zwischen den beiden "BAUD_Init" setze (auf 13000Baud) aber es wird trotzdem mit 19200Baud
gesendet.
Habe ich etwas übersehen oder muss ich irgendein Flag noch setzen damit
die Übertragungsrate auch so übernommen wird ?
Meine Funktion sieht wie folgt aus:
void LIN_Syncbreak()
{
// Baudrate von 19200Baud auf 13000Baud runtersetzen
// um für >677µs Syncbreak zu senden
BAUD_Init(SYNCB); // Baudrate auf 13000 setzen
lin_msg.syncbreak = 0x00; // Daten für Syncbreak = 0x00
uart_putc(lin_msg.syncbreak); // Sende Syncbreak
BAUD_Init(NORMB); // Baudrate auf 19200 setzen
}
Gruß Andi