Ich habe einige Probleme mit USART Flusskontrolle auf dem Atxmega256. Ich kommuniziere mit einem Modem, das RTS/CTS zur Flusskontrolle verwendet. Sobald das Modem CTS auf low setzt, möchte ich keine Daten mehr senden, bis es wieder high wird. Ich benutze derzeit Interrupt-gesteuerte USART-Routinen und finde keine gute Möglichkeit, das Senden zu stoppen. Wenn ich gerade aufhört zu senden, wenn CTS niedrig wird, werden die Daten, die bereits in den Sendepuffern sind, immer noch gesendet und daher verloren.Atxmega USART Flusskontrolle
Ich habe die Folge versucht zu deaktivieren/aktivieren Senden:
if(false == clearToSend()) {
USART_TxdInterruptLevel_Set(data->usart, USART_TXCINTLVL_OFF_gc);
while(false == clearToSend()) {}
USART_TxdInterruptLevel_Set(data->usart, USART_TXCINTLVL_LO_gc);
}
Leider, dass die Sende dauerhaft zu deaktivieren scheint. Irgendwelche Ideen?
Mit freundlichen Grüßen Fredrik