2017-05-04 2 views
1

Kann mir jemand helfen, die Atmel ATSAME70 ARM M7 USART Empfang Timeout zu arbeiten?Atmel SAME70 USART Receive Timeout nicht ausgelöst

Mein USART sendet und empfängt korrekt bei 115200 Baud. Ich bin mit der ASF-Bibliothek und den Rx Timeout wie folgt festgelegt:

#define TBUS_RX_TIMEOUT_MS 200 
usart_set_rx_timeout(USART0, UART_BAUDRATE * RX_TIMEOUT_MS/1000); 

Ich bestätige, dass die auf den Wert korrekt eingestellt ist in US_RTOR Register.

Ich beginne dann das Timeout mit diesem Aufruf:

usart_restart_rx_timeout(USART0); 

kein Verkehr an dieser Stelle auf dem seriellen Bus ist, so erwartete ich der TIMEOUT-Flag gesetzt werden. Es wird nie eingestellt.

Ist noch etwas erforderlich, um das Zeitlimit auszulösen?

+0

Ist der Interrupt aktiviert? Versuchen Sie hinzufügen 'usart_enable_interrupt (USART0, US_IER_TIMEOUT);' – LPs

+0

Vielen Dank. Ja, der Interrupt ist aktiviert. Ich fügte hinzu, die IER-Timeout auf die bereits existierenden Maske wie folgt: 'usart_enable_interrupt (TBUS_UART, UART_IER_RXRDY | UART_IER_FRAME | UART_IER_OVRE | US_IER_TIMEOUT);' Alle anderen Interrupts ausgelöst werden, nur nicht das Timeout. – David

Antwort

0

Das Zeitgeberproblem wird dadurch verursacht, dass dieser serielle Bus einen invertierten Ruhezustand hat.

Das Datenblatt gibt an, dass der Zähler zurückgesetzt wird, wenn ein Ereignis "Character Received" auftritt. Dies ist nicht das vollständige Bild. Meine Tests zeigen, dass der Zähler immer dann zurückgesetzt wird, wenn am Kabel eine Spannung anliegt.

Mit diesem neuen Verständnis funktioniert der Timer korrekt und kann nicht verwendet werden, um Timeouts mit invertiertem (dh nicht standardmäßigen) seriellem Bus zu erkennen.

Verwandte Themen