2017-05-04 33 views
1

任何人都可以帮助我获得Atmel ATSAME70 ARM M7 USART接收超时工作吗?Atmel SAME70 USART接收超时未触发

我的USART发送和接收正确,在115200波特。我使用的ASF库,并设置RX时限如下:

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

我确认TO在US_RTOR寄存器正确设置值。

然后我用这个调用启动超时:

usart_restart_rx_timeout(USART0); 

有在这一点上的串行总线上没有流量,所以我预期的超时标志被设置。它永远不会被设置。

是否还有其他要求获得超时触发?

+0

是否启用中断?尝试添加'usart_enable_interrupt(USART0,US_IER_TIMEOUT);' – LPs

+0

非常感谢。是的,中断已启用。我加入了IER超时先前存在的面具如下: 'usart_enable_interrupt(TBUS_UART,UART_IER_RXRDY | UART_IER_FRAME | UART_IER_OVRE | US_IER_TIMEOUT);' 所有其它的中断被触发,只是不超时。 – David

回答

0

定时器问题是由这个串行总线具有反转空闲状态引起的。

该数据表指出,当“字符接收”事件发生时计数器被重置。这不是完整的图片。我的测试表明,只要电线上有空间电压,计数器就会重置。

有了这个新的理解,定时器工作正常,并且不能用于检测倒置空闲状态(即非标准)串行总线的超时。