2017-05-04 6 views
1

누구든지 Atmel ATSAME70 ARM M7 USART 수신 타임 아웃을 작동시키는 데 도움을 줄 수 있습니까?Atmel SAME70 USART Receive Timeout 트리거되지 않았습니다.

내 USART가 115200 보오드에서 올바르게 송수신 중입니다. 나는 ASF 라이브러리를 사용하여, 다음과 같이 수신 시간 제한을 설정 해요 : 나는이 US_RTOR 레지스터에 올바르게 설정 값을 확인

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

. 이 시점에서 시리얼 버스 트래픽이 없습니다

usart_restart_rx_timeout(USART0); 

, 그래서 시간 초과 플래그가 설정 될 것으로 예상 :

나는 다음이 호출을 사용하여 제한 시간을 시작합니다. 결코 설정되지 않습니다.

제한 시간 초과를 트리거하는 데 필요한 다른 것이 있습니까?

+0

인터럽트가 활성화되어 있습니까? 'usart_enable_interrupt (USART0, US_IER_TIMEOUT);을 추가하십시오. – LPs

+0

대단히 감사합니다. 예, 인터럽트가 사용됩니다. ;' 다른 모든 인터럽트가 트리거, 그냥 시간 제한 'usart_enable_interrupt (| UART_IER_FRAME | | UART_IER_OVRE US_IER_TIMEOUT TBUS_UART, UART_IER_RXRDY)를 다음과 같이 I는 기존 마스크에 IER 시간 제한을 추가했다. – David

답변

0

타이머 문제는 반전 된 유휴 상태의 직렬 버스로 인해 발생합니다.

데이터 시트는 "문자 수신"이벤트가 발생할 때 카운터가 재설정되었음을 나타냅니다. 이것은 전체 그림이 아닙니다. 내 테스트에 따르면 전선에 공간 전압이있을 때마다 카운터가 재설정됩니다.

이 새로운 이해로 타이머가 올바르게 작동하고 반전 된 유휴 상태 (예 : 비표준) 직렬 버스로 시간 초과를 감지하는 데 사용할 수 없습니다.